Sample Site

VBA VBEアドイン2

VBAtoHTML

これは VBE(VisualBasicEditor)のアドインです。VB/VBAで書かれたコードをホームページ等にアップしたり、コードを色付きでプリントアウトするときに用います。HTMLにおけるキーワード等の色分け表示と div によるプロシージャ毎の自動領域分割、各プロシージャへのリンク(id埋め込みとhrefリスト作成)を自動抽出/生成するものです。

正直に言うと別ページで GAWK(GNU AWK) を扱っていますが、こちらで作った方が10倍くらい楽なんです。現に vbScript で書かれたスクリプトは GAWK 版で HTML 化しています。しかし、VBE から直接コードを HTML 化できるメリットもあるんです。下記をご覧ください。

VBAtoHTMLの概要

VBE にて(ExcelやAccessではなく) メニュー/アドインから「ソースをhtmlに変換する」を選択。以下のダイアログが起動します。
vba_addin_html1.jpg
右側の3つの欄が示す通り、ダイアログだけでこのファイルが持つすべてのプロジェクト 、モジュール、プロシージャにアクセスし、コードを呼び出すことが可能です。 プロシージャリストの先頭「*」はモジュールのすべてを表示します。 プロシージャ1つずつを表示し html へ変換することもできます。 表示されているコードが html化の対象となります。 「変換」ボタンをクリックして「クリップボード」をクリックするだけで作業終了です。
vba_addin_html2.jpg

この VBAtoHTML も Vector様からダウンロードできますが、VB6 製作物であるため、 更新していません。これを使用するためには、VB6 ランタイムモジュールが必要です。 さらに VBAtoHTML が使っている RichTextBox (RICHTX32.OCX) とアドインデザイナ (MSADDNDR_vb6sp6.DLL)...現行の VisualStudio の DLL と名前が競合するので変えている... が必要で、手動でそれぞれ Regsvr32 にて(管理者として実行)登録しなければなりません。特に RICHTX32.OCX は、筆者がアップしたファイルに同梱していないため、どこかに探しに行かなくてはなりません。MSADDNDR_vb6sp6.DLL は同梱されています。
筆者は自分で作ったので、win10 Excel2013 で使用していますが、公式?には win7 までの対応としています。大きな課題も残されたアドインですので、個人的なメンテナンスは使用可能な限り行うつもりです。

課題

  • htmlタグ(クラス名)が、これによって固定されてしまう
  • 解:iniファイルで工夫する
  • 色分けが 5+1 種類しかできないので、VBE とあまり変わらない
  • 解:レキシカルアナライザを見直す
  • 行番号がない
  • 解:変換、書き込みの直前に挿入する

VBAtoHTMLの処理結果

Sub regexp_test() Dim regex As Object Dim str1 As String, str2 As String On Error GoTo PROC_ERR Set regex = CreateObject("VBscript.RegExp") With regex .Ignorecase = False .Global = True End With regex.Pattern = "[0-9]" str1 = "1東京 2大阪 3京都 4名古屋 5福岡 6札幌" str2 = regex.Replace(str1, "★") Debug.Print "置換後 = "; str2 PROC_EXIT: Exit Sub PROC_ERR: MsgBox "Error_Number: " & Err.Number & ". : " & Err.Description, , _ "bas_RegExp" & "." & "regexp_test" Resume PROC_EXIT End Sub


文字列リテラルとGoTo系の行先/着地ラベルがわかりやすいけれど、他は VBE 画面と変わらない...

GAWKで作ったVBAtoHTMLに似たもの vbScriptの変換に使用

1 : Sub regexp_test() 2 : Dim regex As Object 3 : Dim str1 As String, str2 As String 4 : 5 : On Error GoTo PROC_ERR 6 : 7 : Set regex = CreateObject("VBscript.RegExp") 8 : With regex 9 : .IgnoreCase = False 10 : .Global = True 11 : End With 12 : 13 : regex.Pattern = "[0-9]" 14 : str1 = "1東京 2大阪 3京都 4名古屋 5福岡 6札幌" 15 : str2 = regex.Replace(str1, "★") 16 : Debug.Print "置換後 = "; str2 17 : 18 : PROC_EXIT: 19 : Exit Sub 20 : 21 : PROC_ERR: 22 : MsgBox "Error_Number: " & Err.Number & ". : " & Err.Description, , _ 23 : "bas_RegExp" & "." & "regexp_test" 24 : Resume PROC_EXIT 25 : 26 : End Sub

テキストファイルベースなので、VBA しながらというのは不可能。モジュール内に含まれるプロシージャの内容は、エディタでファイルを開くまでわからないし、エディタと VBE のコピー/ペーストの往復になってしまいます。インポート/エクスポートで何とかしのぐ方法もありますが、モジュール名が同じだと操作が煩雑になってしまいます。
でも、せめて色分けは、これと同じくらいにしたいです。あとこれにGoToラベル加えて・・・

後日:こんな感じになりました。

1: Sub regexp_test() 2: Dim regex As Object 3: Dim str1 As String, str2 As String 4: 5: On Error GoTo PROC_ERR 6: 7: Set regex = CreateObject("VBscript.RegExp") 8: With regex 9: .IgnoreCase = False 10: .Global = True 11: End With 12: 13: regex.Pattern = "[0-9]" 14: str1 = "1東京 2大阪 3京都 4名古屋 5福岡 6札幌" 15: str2 = regex.Replace(str1, "★") 16: Debug.Print "置換後 = "; str2 17: 18: PROC_EXIT: 19: Exit Sub 20: 21: PROC_ERR: 22: MsgBox "Error_Number: " & Err.Number & ". : " & Err.Description, , _ 23: "bas_RegExp" & "." & "regexp_test" 24: Resume PROC_EXIT 25: 26: End Sub

なんか......にぎやかでいいんだけど......

vba_addin_html3.jpg

追記モードのために、行番号は任意の番号から開始できるようにしました。デフォルトは1行目からですが、行番号自体を付加しないこともできるようにしています。
地味にプレーンソースをコピーできなかったので、できるようにしました。
HTML を追記で作成していて失敗したとき、いちいち編集から全選択、削除は面倒なので、全削除ボタンを付けました。欲張ってしまい、ボタンが入らなくなってしまいました。
iniファイル操作は考え中です。もしもこれをiniファイルなしで新規で導入するとしたら、CSSファイルの配色部分にクラスを13種足すことになります。タグspanのクラスを増やすとブラウザ動作に目に見えるほどの影響が出るのか、とか、既存のクラスと同じ名にした時に生じる問題(色分けパターンが必ずしも同数あるわけではない)とか、拡張性とメンテナンスとか、ちょっと情報が必要です。