みこしば屋

VSCodeでExcelVBAを何とかするための拡張機能を作りました


概要

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ファイル自体を用途ごとに保存しておくという使い方も考えられます。 関数のテスト用途にも使えそうな気がしています。

詳細は拡張機能のチュートリアルを参考にしていただければと思います。

GitHub Repository

Phase3まで開発が進んだ際にはソースコードを公開し、有識者を巻き込んでの開発を進めていきたいと思います。

リンク

こちらの記事はQiitaにも掲載しています。