概要
VSCode拡張機能 Barretta を作成しました。
Visual Studio Code でのVBA編集サポーターとして、Excelファイルとの連携を各コマンドより行うことができます。
GoogleAppsScriptにおける clasp(留め金)に対して、ExcelVBAにおける Barretta(髪留め) となりました。
なぜ作ったか
VBAに対しても、claspのようなものがないものかと思っていました。
最近、XVBAというVSCode拡張機能を使ってみて何となく可能性のようなものを感じました。
XVBAの作者の方にお手伝いさせてくれないかとコンタクトを試みましたが、
開発自体が止まっているようなので、自力で作ることを選択しました。
(なお、XVBAのソースも拝見させていただきましたがレベルが高すぎて参考になりませんでした…C#とかも使っているっぽい)
現時点での開発はPhase1とし、モジュールの入出力とマクロの起動のみ対応しました。
一応のclasp相当にはなったと思われます。
Phase2ではVBAの言語機能としてVSCode LanguageServerまわりの実装を行う予定です。
Phase3ではソースコードを公開し、そこからは有識者を巻き込んだ開発に移行できればと思っています。
大まかな機能
基本的にはコマンドベースの拡張機能です。
Barretta:
から始まる4種のコマンドがあります。
-
Barretta: Init (SC : Alt + Ctrl + N)
対象のフォルダをBarrettaプロジェクトとして初期化し以下の構成を行います。
- /barretta-core
- /code-modules
- /excel_file
- .gitignore
- barretta.code-workspace
- barretta-launcher.json
初期化したフォルダをBarrettaプロジェクトフォルダと定義します。
excel_fileフォルダには単一のxlsmファイルを格納することができます。
.gitignore
はテンプレートとしてexcel_file
フォルダのみ除外する状態です。
barretta.code-workspace
はbasやclsファイルに言語設定vb
を付与しています。
そのため、上記のworkspaceを開いて作業することが推奨されます。 -
Barretta: Push (SC : Alt + Ctrl + I)
-
Barretta: Pull (SC : Alt + Ctrl + E)
それぞれ、
code_modules
内のVBAモジュールファイルを対象のExcelファイルにインポート、エクスポートします。
実際には Pull の際にcode_modules
には UTF-8 エンコードされたテキストとして出力され、
Push の際にはcode_modules
のファイルを Shift-JSに変換したものがbarretta-core/dist
に生成され、
それらのファイルが入力されます。 -
Barretta: Open (SC : Alt + Ctrl + O)
対象のExcelファイルを開きます。
サイドパネル機能
Barrettaは専用のサイドパネルを備えています。
Commands
セクションではInit以外のコマンドをボタンから実行できます。
Macro Runner
セクションにはマクロのランチャーを barretta-launcher.json
から定義できます。
VBA開発時に関数を実行したい場合、イミディエイトウィンドウから実行することは多いと思いますが、
例えば引数がある場合、その引数のパターンをいくつか試したい場合など大変なことがあります。
barretta-launcher.json
はキックするマクロ、その引数、メモを記載し任意の名前を付けて保存しておくことができます。
場合によってはjsonファイル自体を用途ごとに保存しておくという使い方も考えられます。
関数のテスト用途にも使えそうな気がしています。
現時点ではBarrettaプロジェクトのルートに設置されている barretta-launcher.json
のみが読み込み可能です。
任意にリネームし別の場所に保存しておく運用が必要があります。
詳細は拡張機能のチュートリアルを参考にしていただければと思います。
GitHub Repository
Phase3まで開発が進んだ際にはソースコードを公開し、有識者を巻き込んでの開発を進めていきたいと思います。