【VBA】.NET Frameworkのクラスで文字列を暗号化する方法とオートメーションエラー

VBA
スポンサーリンク

今回の記事では、VBAから.NET Frameworkのクラスを呼び出して、指定した文字列を暗号化(ハッシュ)する方法を紹介します。
また、一部のパソコンでは、この処理を実装しているコードで「-2146232576:オートメーションエラー」が発生したため、その原因も併せて紹介します。
 
 

VBAから.NET Frameworkのクラスを呼び出してハッシュ値を作成するコード例

当項では、VBAから.NET Frameworkのクラスを呼び出し、SHA-256などのハッシュアルゴリズムを使用して、引数で渡された文字列からハッシュ値を返すサンプルコードを紹介します。

  Function get_HashString(ByVal targetStr As String)

      Dim PROV As String
      Dim BYTES As Variant
      Dim ENC As Variant
      Dim MSXML As Variant
      Dim EL As Variant
          
          'MD5
          'PROV = "System.Security.Cryptography.MD5CryptoServiceProvider"
          'SHA-1
          'PROV = "System.Security.Cryptography.SHA1CryptoServiceProvider"
          'SHA-2(SHA-256)
          PROV = "System.Security.Cryptography.SHA256Managed"

          BYTES = CreateObject("System.Text.UTF8Encoding").GetBytes_4(targetStr)

          Set ENC = CreateObject(PROV)
          ENC.ComputeHash_2 (BYTES)
          
          Set MSXML = CreateObject("MSXML2.DOMDocument")
          Set EL = MSXML.CreateElement("hex")
          EL.DataType = "bin.hex"
          EL.NodeTypedValue = ENC.Hash
          get_HashString = EL.Text

  End Function

上記のコードを簡単に解説します。

ハッシュアルゴリズムは色々な種類がありますが、MD5やSHA-1を使用したい場合は、コメントアウトされている部分をそれぞれ有効にしてください。
ただ、現在MD5やSHA1は脆弱性が報告されているため、ハッシュアルゴリズムの選定に制約がなければSHA256やSHA512を使用してください。

.NET Frameworkの「UTF8Encodingクラス」を呼び出して、引数で渡されてきた文字列をbyte型配列に変換して、変数「BYTES」に代入しています。

次に、同じく.NET Frameworkの「SHA256Managedクラス」を呼び出して、前処理で作成したbyte型配列をもとにハッシュを計算し、その後DOMDocumentオブジェクトを利用して16進数に変換しています。

参考までに、今回.NETの名前空間を指定して呼び出しているクラスの詳細が書かれているMicrosoftのリンクも貼っておきます。
併せてご確認ください。

UTF8Encoding クラス (System.Text)
Unicode 文字の UTF-8 エンコードを表します。
SHA256Managed クラス (System.Security.Cryptography)
マネージド ライブラリを使用して、入力データの SHA256 ハッシュを計算します。

また、当ブログでは、過去にC#の初心者向けの記事を公開しており、その記事のなかで「名前空間」などについても簡単に触れております。
ご興味があればこちらもご一読ください。

【C#入門】初めて作るコンソールアプリ!共有フォルダのファイルを添付してメール送信
今回の記事では、C#の初心者向けに、Visual Studioを起動してプロジェクトを作成するところから、共有フォルダ内...

 

.NETのクラスを呼ぶ際に「-2146232576:オートメーションエラー」が発生する場合

VBAから.NET Frameworkのクラスを呼ぶ際に、「-2146232576:オートメーションエラー」が発生する原因について紹介します。

-2146232576:オートメーションエラー

エラーメッセージをMsgboxで表示した例

このエラーの発生原因が当記事で紹介する内容だけとは限りませんが、私の環境では以下が原因でした。

.NET Framework 3.5(2.0)がOS側で有効化されていない

Windows 10 や Windows 11 の既定値では、.NET Frameworkの最新である4.8が有効化されており、以前のバージョンである3.5(2.0及び3.0)は無効化されています。

今回の記事で紹介している.NET FrameworkのクラスをVBAなどから呼び出す場合、.NET Framework 3.5を有効にしてあげることが必要です。
 

.NET Framework 3.5を有効にする方法

ネットで調べれば、手順はすぐに見つかるかと思いますが、当記事でも簡単に紹介しておきます。

Windowsの「コントロールパネル」から「プログラムと機能」を開きます。

「プログラムと機能」の画面左側の「Windowsの機能の有効化または無効化」を開きます。

Windowsの機能の有効化または無効化

表示された「Windowsの機能」画面内の「.NET Framework 3.5(.NET 2.0及び3.0を含む)」のチェックを付けて「OK」を選択します。

.NET Framework 3.5の有効化

次の画面では「Windows Updateでファイルを自動ダウンロードする」を選択すれば、.NET Framework 3.5のダウンロード、及びインストール処理が実行されて、3.5が有効化されます。
 
 

最後に

今回の記事では、VBAから.NET Frameworkのクラスを呼び出してハッシュを生成するサンプルコードと、.NETのクラスを呼び出す際に、「-2146232576:オートメーションエラー」が発生した場合の対応方法を紹介しました。

この記事がどなたかの参考になれば幸いです。

今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう。

タイトルとURLをコピーしました