【VBA】VBEでコードスニペットを扱う仕組み
先日見つけた素晴らしいこの記事を参考に、コードスニペット化マクロを自作してみた。
事前用意
まずはVBEを操作できるようにする。
手順はこちら
Office TANAKA - VBAでVBEを操作する[VBEを操作するための設定]
次に、このマクロ自体を個人用マクロブック
のSnipet
という標準モジュールに登録しておく。
使い方
- 何かスニペット化したい部分をコピーしてクリップボードに入れておく
- イミディエイトから
SNI_00_スニペット作成
を呼び出す。("sni"まで打ったらCtrl
+Space
で候補が出る - 作成するスニペット名を引数に入れてEnter
すると標準モジュールSnipet
の最上段にスニペットが作成される。
別のモジュール名に入れたい場合はここを変える。
ThisWorkbook.VBProject.VBComponents("Snipet").CodeModule 'このモジュールにスニペットを追加する
作成されたスニペットを呼び出すのもイミディエイトから同様に。
コード
Option Explicit
Function SNI_00_スニペット作成(作成スニペット名 As String)
Dim Codes
With New MSForms.DataObject
.GetFromClipboard '変数のデータをDataObjectに格納する
Codes = Split(.GetText, vbCrLf)
End With
Dim ub: ub = UBound(Codes)
Dim Snipets
ReDim Snipets(ub)
Dim i
For i = 0 To ub
Codes(i) = Replace(Codes(i), """", """""") ' 既存ダブルクォーテーションを生かす処理
Snipets(i) = " debug.Print " & """" & Codes(i) & """" '全体のダブルクォーテーションのエスケープ処理
Next
Dim buf
buf = Join(Snipets, vbLf)
buf = "Function SNI_" & 作成スニペット名 & "()" & vbLf & buf
buf = buf & vbLf & "End Function"
With ThisWorkbook.VBProject.VBComponents("Snipet").CodeModule 'このモジュールにスニペットを追加する
.AddFromString buf
End With
End Function