Open2

VBA開発時、次回活かせるコードやノウハウをメモしておく

aisheng.yuaisheng.yu
' ------------------------------------------------------------------------------------------------
' EdgeブラウザのパスをOSバージョンに基づいて取得
' ------------------------------------------------------------------------------------------------
Private Function GetEdgePath() As String
    ' デフォルトのパスを設定
    Dim defaultPaths(1 To 2) As String
    defaultPaths(1) = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
    defaultPaths(2) = "C:\Program Files\Microsoft\Edge\Application\msedge.exe"
    
    ' ファイルシステムオブジェクトを作成
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' デフォルトのパスをチェック
    Dim i As Integer
    For i = 1 To UBound(defaultPaths)
        If fso.FileExists(defaultPaths(i)) Then
            GetEdgePath = defaultPaths(i)
            Exit Function
        End If
    Next i
    
    ' レジストリから検索
    On Error Resume Next
    
    ' シェルシェルオブジェクトを作成
    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")
    
    ' レジストリからEdgeのパスを取得しようとする
    Dim regPath As String
    regPath = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\msedge.exe\")
    
    ' エラーがなく、regPathが空でない場合
    If Err.Number = 0 And regPath <> "" Then
        GetEdgePath = regPath
    Else
        ' デフォルトに戻る
        GetEdgePath = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
    End If
    
    On Error GoTo 0
End Function

以下はVBA関数GetEdgePathの技術解説用説明文です。


関数概要

GetEdgePathは、Microsoft Edgeの実行ファイルパスをOSのバージョンやインストール形態に応じて動的に取得するための関数です。32ビット/64ビットOSへの対応や、ユーザーがカスタムインストールパスを選択した場合にも柔軟に対応します。

主な特徴

  1. デュアルパス検索システム

    • デフォルトのインストールパス(32ビット版と64ビット版)を優先的にチェック
    defaultPaths(1) = "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
    defaultPaths(2) = "C:\Program Files\Microsoft\Edge\Application\msedge.exe"
    
  2. レジストリ連動検索

    • Windowsレジストリから実際のインストールパスを取得
    regPath = WshShell.RegRead("HKEY_LOCAL_MACHINE\...")
    
  3. フォールバック機構

    • すべての検索に失敗した場合、デフォルトパスを返す安全設計
    GetEdgePath = "C:\Program Files (x86)\...msedge.exe"
    

技術的ポイント

  • OS互換性: Program Files (x86)Program Filesの両方をチェックし、OSアーキテクチャを自動判別
  • 効率的な検索: ファイルシステムオブジェクトScripting.FileSystemObjectで直接存在確認
  • エラートレランス: On Error Resume Nextでレジストリアクセスエラーを制御
  • 拡張性: レジストリキーのパスを変更すれば他アプリケーションにも応用可能

使用シーン例

  • Excel VBAからEdgeを自動起動するマクロ開発
  • 企業環境での複数バージョンのEdge管理
  • ユーザーカスタムインストールパスへの対応が必要なアプリケーション

この関数は、VBAでブラウザ連携を行う際の基盤技術として、安定したブラウザパス取得を実現します。特にWindowsレジストリを活用した動的パス取得の部分は、プロフェッショナルなアプリケーション開発で重要なテクニックと言えます。

aisheng.yuaisheng.yu

VSCodeでVBA開発時に文字化けを解決する方法

VSCodeでVBA(Visual Basic for Applications)を開発する際、.basや.clsファイルを開くと文字化けが発生することがあります。これはVSCodeがデフォルトでUTF-8エンコーディングを使用するためで、VBAファイルがShift_JISで保存されていることが原因です。

この問題を解決するには、.vscode/settings.jsonに以下の設定を追加します:

.vscode/settings.json
{
    // ファイル拡張子とVBAの関連付け
    "files.associations": {
        "*.bas": "vb",
        "*.cls": "vb", 
        "*.frm": "vb"
    },
    
    // VBAファイルのエンコーディングをShift_JISに設定
    "[vb]": {
        "files.encoding": "shiftjis"
    },
    
    // エディタの表示設定(オプション)
    "editor.fontFamily": "Consolas",
    "editor.fontSize": 13,
    "editor.fontWeight": "normal",
    "editor.lineHeight": 16,
    "editor.letterSpacing": 0.4,
    "editor.tabSize": 4
}

設定のポイント

  1. files.associations
    VBAファイルの拡張子(.bas, .cls, .frm)をVBAとして認識させる

  2. [vb]エンコーディング設定
    VBAファイルをShift_JISで開くように指定

  3. エディタ表示設定(オプション)
    開発しやすいフォントやサイズを指定

この設定を行うことで、VSCodeでVBAファイルを開いた際の文字化け問題が解消されます。また、VBAのシンタックスハイライトも正しく表示されるようになります。