見出し画像

Excel VBAのメンテナンス

VBAをメンテナンスする

ExcelとAccessのVBAのメンテナンスをすることになりました。〇年ぶり。2024にもなってそんなことをすることになるとは思いませんでしたが仕方ありません。VBEも見にくくて使いたくないのでVS Codeを使っていこうと思います。イチからつくるならいまどきVBAも無いもんだろうと思うので別記事を作ります。

Codeの取り出し

まずはCodeの取り出し。vbac.wsfを使います。vbac.wsfは格納されているディレクトリのbin配下のxlsmを分解します。

cscript .\vbac.wsf decombine

srcフォルダを作って分解してくれます。

ソース一覧をつくる

vbac.wsfはソースをファイルに分けてくれますが、おおもとのVBAファイルはフォルダにわかれているので、Powershellを使って一覧をつくりましょう。Powershell ISEを起動して下記のコマンドを貼り付けてください。

$target = ".\src"
$outfile = ".\一覧.csv"

Get-ChildItem -Recurse $target -File | Export-CSV -path $outfile -Encoding Default -NoTypeInformation

-File指定をするとLength(バイト長)がでるのでソースの長さを推定することができます。
どのファイルのモジュールなのかはでないので、ファイルのパスから一個上のフォルダを取ってやります。Excel上でやる場合は一番うしろのセルに下記関数を書いてやれば取り出せます。

=SUBSTITUTE(SUBSTITUTE(R2,"srcまでのfullパス\src\",""),"\"&L2,"")

R2 , L2はGet-ChildItemを全列だした場合です。必要なのはBaseName,Name,Length,FullNameくらいなのでそれに絞ることもできます。Select-Objectコマンドを間に挟みます。

Get-ChildItem -Recurse $target -File |Select-Object  BaseName,Name,Length,FullName|Export-CSV -path $outfile -Encoding Default -NoTypeInformation

この場合4列しかないので、先ほどの式を読み替えてください。

パスワード保護の解除

VBAにパスワードがかかっていると下記のようなメッセージがでます。

cscript : C:\Users\User\VBA\vbac.wsf(441, 6) VBAProject: プロジェクトが保護されているため、操作を実行することができません。
発生場所 行:1 文字:1
+ cscript .\vbac.wsf decombine
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (C:\Users\...作を実行することができません。:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
  • ブックを開く

  • 開発>Visual BasicをクリックしてVBE (Microsoft Visual Basic for Applications)を開く 。該当のVBA Projectをダブルクリック。パスワードを求められるので入力する。


  • 「プロジェクト プロパティ」ダイアログを開く

  • 「保護」タブをクリックする

  • 「プロジェクトのロック」のチェックを外し、「パスワード」と「パスワードの確認を入力」に入力されているパスワードを削除する

  • OKをクリックする

  • マクロブックを保存する

  • マクロブックを閉じてvbac.wsfを再実行する

ファイルが開いたままだと下記のエラーが出ます。

cscript : C:\Users\User\VBA\vbac.wsf(643, 10) Microsoft Excel: ファイル 'C:\Users\User\VBA\bin\xxxxxxxx.xlsm' にアクセスできません。次のいずれかの理由が考えられます。
発生場所 行:1 文字:1
+ cscript .\vbac.wsf decombine
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (C:\Users\sito\O...いずれかの理由が考えられます。:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
? ファイル名またはパスが存在しません。
? ファイルが他のプログラムによって使用されています。
? 保存しようとしているブックと同じ名前のブックが現在開かれています。

VSCodeでエラーがでる

Request textDocument/hover failed.
  Message: Request textDocument/hover failed with message: Bad control character in string literal in JSON at position 

こんな感じのエラーが出るようになりました。日本語だと何もヒットしないんですけど、英語だとVSCodeの再インストールで解決すると出てきました。(jsonファイルでエラーがでるのでたぶん、設定ファイルがおかしい)

VSCodeをインストールする

Microsoft Visual Studio Code,要は開発エディタです。言語によってはそのまま実行・デバッグもでき、gitと連携もできるので慣れた方にはこちらの方が良いと思います。「VBAしか開発したことがない」という方はVBEのままの方がきっと良いんでしょう。PythonとかRubyとかモダンな言語触りたいよってかたは色々開発環境覚えるよりひとつの方がらくかもしれません。少なくともシェアは高いので、記事を検索するとVSCodeはいろいろヒットするのでおすすめではあります。

VSCodeのインストーラーを入手する

開発元のhttps://code.visualstudio.com/に行きましょう。

アクセスしているOSに合わせたインストーラーが表示されるはずなのでダウンロードしてインストールします。

コメントの文字化けを直す

デフォルトのままだとUTF8で判定されて日本語コメントは文字化けします。


文字化けしたコメント

コード自動判定をVSCodeに設定します。バージョンによって違いますが2024時点は下記
[ファイル] > [ユーザー設定] > [設定]
もしくは[Ctrl + ,]

[設定の検索] 欄にfiles.autoGuessEncodingと入力

この状態で再度ソースを開くとコメントが日本語で表示されます。


今日はここまで



この記事が気に入ったらサポートをしてみませんか?