2013年5月9日木曜日

エクセルでもクラス風味

エクセルVBAの本はどうして分厚くて、高くて、役に立たないのだろう。よんでも、例文を入力して実行してみても一向にわかった気がしないし、アプリが作れるような気にもならない。

まず、なぜオブジェクト指向っぽい体系なのにそれがあまり語られないのであろう。また、例文やクラスの利用方法を示していても、全てを網羅しているわけでもないのにオブジェクトブラウザとヘルプなどでの当たりの付け方などに言及されないのはなぜなのだろう。エクセルはパソコンを職業とする人以外の人たちも多数利用し、プログラマでもないのに結構使いこなしている方を見かけるのだが、よほど先入観がないか、優れた人達なのではないだろうか。

そんな一般な人たちに脅威を抱きつつ、テキスト貼り付けマクロのコードの見直しとクラス風味への変更を行なってみた。本と首っ引きで作成したのが前回のもので、今回はオブジェクトブラウザとヘルプ、及び、マクロの記録を使ってコードを書きなおしてみた。かなり短くなってしまったが、やりたかったイメージはこちらの方が近いと思う。クラス風味にすることで、他のエクセルのライブラリへの理解も深まろうというものです。しかし、作るのに時間がかかるなぁ。頭悪すぎを実感します。

呼び出しマクロ
Sub test()
    Dim List As New TextListing
    
    With List
        .PathName = ThisWorkbook.Path
        .TextListing
    End With
End Sub
クラス風味のコード
Public PathName As String

Sub TextListing()
    Dim temp As Workbook
    Dim fname As String

    'テキストファイルにマッチングするよう指定
    fname = Dir(PathName & "\*.txt")
    Do While fname <> ""
        '指定のファイルを新しいブックに読み込む
        Set temp = Workbooks.Open(Filename:=PathName & "\" & fname,Format:=5)
        
        'フォントサイズを9ポイント
        temp.Worksheets(1).Cells.Font.Size = 9
        
        'フォントを HGゴシックE に変更
        temp.Worksheets(1).Cells.Font.Name = "HGゴシックE"
        
        '枠線の消去
        ActiveWindow.DisplayGridlines = False
        
        '読み込んだシートをマクロを起動したブックに移動
        temp.Worksheets(1).Move Before:=ThisWorkbook.Sheets(1)
        
        '次のファイル名を取得
        fname = Dir
    Loop
End Sub

0 件のコメント:

コメントを投稿