小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

VBA版タグ挿入スクリプト

前回(VB6版)前々回(VBS版)VBA版です。

たとえば、フォルダ内にqa0001.htmからqa7000.htmの7000個のhtmファイルがあったとします。
とある事情で、bodyタグの直後にscriptタグを追加したい場合、手作業で追加するのは大変です。
そこで、以下のようなプログラムをEXCELVBAで組んで見ました。

以下のプログラムをそのフォルダ内で実行すると一発で7000個ファイルを更新することが出来ます。
Dir関数の引数やLike演算子オペランドをカスタマイズして、何かに流用してもらえれば、幸いです。
とにかく、フォルダ内の複数のファイルに対しいて処理するときの雛型として使えると思います。

'---------------------------------------------------------------------------------------------
'[VBA版タグ挿入スクリプト]
'カレントフォルダにあるqa*.htmでマッチしたファイルすべてにbodyタグの直後にscriptタグを追加する。
'
'---------------------------------------------------------------------------------------------
Option Explicit
Private Sub Workbook_WindowActivate(ByVal Wn As Window)

Dim vntp As Variant
Dim strWk As String
Dim strCurrentDirectory As String
Dim intIdx As Integer

    'カレントディレクトリを求める。
    For intIdx = Len(ActiveWorkbook.FullNameURLEncoded) To 1 Step -1
      If Mid(ActiveWorkbook.FullNameURLEncoded, intIdx, 1) = "\" Then Exit For
    Next
    strCurrentDirectory = Mid(ActiveWorkbook.FullNameURLEncoded, 1, intIdx - 1)
    
    'カレントディレクトリを設定する。
    ChDrive Mid(strCurrentDirectory, 1, 1)
    ChDir strCurrentDirectory
    
    'カレントフォルダにあるq*.htmでマッチしたファイルすべて処理する。
    'ちなみに『*』は、ワイルドカード。
    vntp = Dir("q*.htm", vbNormal)
    Do While vntp <> ""

        Open "tmp.log" For Output As #2
        Open vntp For Input As #1
        Do While Not EOF(1)
            Line Input #1, strWk
            Print #2, strWk
            
            '文字列の中をLike検索する。ちなみに『*』はワイルドカード。
            If strWk Like "*" Then
               Print #2, ""
            End If
        Loop
        Close #1
        Close #2
        
        FileCopy "tmp.log", vntp
        Kill "tmp.log"
        vntp = Dir

    Loop
    Application.Quit

End Sub

以下が、少し参考になるかも。