VBA版タグ挿入スクリプト

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

◆VBA版タグ挿入スクリプト

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

たとえば、フォルダ内にqa0001.htmからqa7000.htmの7000個のhtmファイルがあったとします。

とある事情で、bodyタグの直後にscriptタグを追加したい場合、手作業で追加するのは大変です。

そこで、以下のようなプログラムをEXCELのVBAで組んで見ました。

以下のプログラムをそのフォルダ内で実行すると一発で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 "<body>*" Then
               Print #2, "<script src=""header.js"" type=""text/javascript"" charset=""Shift_JIS""></script>"
            End If
        Loop
        Close #1
        Close #2
        
        FileCopy "tmp.log", vntp
        Kill "tmp.log"
        vntp = Dir

    Loop
    Application.Quit

End Sub

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

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。