7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#で作ったアドインをVBAから呼び出そうとした時に困ったこと

Last updated at Posted at 2024-11-07

Excel VBAからC#で作成したExcel DNAアドインを呼び出す際に直面しやすい一般的な問題について、解決策とサンプルコードを提供します。

1. 関数呼び出し時の「名前空間」や「クラス名」不要

VBAで Application.Run を使用する際、アドインの関数名のみを指定します。C#側で関数が Namespace.ClassName.FunctionName の形式で定義されていても、呼び出す際は「関数名」のみを指定します。

サンプルコード

Dim result As String
result = Application.Run("MyFunction", "parameter1", "parameter2")
MsgBox result

注意: Namespace.ClassName.FunctionName の形式で指定するとエラーが発生します。関数名のみを指定することが重要です。

2. マクロのセキュリティ設定が原因のエラー

Excelのセキュリティ設定でマクロを有効にする必要があります。VBAからC#のアドインを安全に利用するため、Excelの「マクロの設定」と「VBAプロジェクト オブジェクト モデルへの信頼」を設定することで、エラーを回避できます。

設定手順:

  1. Excelで「ファイル」 > 「オプション」 > 「セキュリティセンター」 > 「セキュリティセンターの設定」 > 「マクロの設定」に移動します。
  2. 「すべてのマクロを有効にする」にチェックを入れるか、信頼できるフォルダに保存して実行します。
  3. 「VBAプロジェクト オブジェクト モデルへの信頼」にもチェックを入れておくと、アドイン内のVBAプロジェクトにアクセスできます。

3. .xll アドインファイルの読み込み手順

C#で生成したExcel DNAアドイン(.xll ファイル)は、Excelのアドイン設定で手動で読み込む必要があります。

読み込み手順:

  1. Excelで「ファイル」 > 「オプション」 > 「アドイン」に移動し、下部の「管理」ドロップダウンで「Excel アドイン」を選択し、「設定」をクリックします。
  2. 「参照」ボタンから .xll ファイルを選択して「OK」を押します。

ポイント: .xll ファイルを信頼できる場所に保存し、読み込み後にアドインリストに表示され、チェックが入っていることを確認します。

4. .xll アドイン読込コードの追加

VBAコード内で .xll ファイルをプログラム的に読み込むことで、マクロ実行時に自動でアドインがロードされるようにします。

サンプルコード

Public Function LoadAddin() As String
    On Error GoTo ErrorHandler
    
    Dim addinPath As String
    addinPath = "C:\path\to\your\addin.xll"  ' .xllファイルのフルパスを指定
    Application.RegisterXLL addinPath
    LoadAddin = "アドインが正常に読み込まれました。"
    Exit Function
    
ErrorHandler:
    LoadAddin = "アドインの読み込みに失敗しました: " & Err.Description
End Function

このコードを実行すると、指定されたパスの .xll ファイルを自動的に読み込みます。

5. エラーハンドリングの追加

コードにエラーハンドリングを追加することで、アドインの登録エラーや関数呼び出しの失敗に対して適切なフィードバックが可能になります。

改良版のサンプルコード

以下は、エラーハンドリングを追加し、接続とデータ転送をテストするための改良版のサンプルです。

Option Explicit

' アドインの関数を呼び出す例
Public Function CallAddinFunction() As String
    On Error GoTo ErrorHandler
    
    ' アドイン読み込み
    Dim loadResult As String
    loadResult = LoadAddin()
    If InStr(1, loadResult, "失敗", vbTextCompare) > 0 Then
        CallAddinFunction = loadResult
        Exit Function
    End If
    
    ' 関数呼び出し
    CallAddinFunction = Application.Run("MyFunction", "parameter1", "parameter2")
    Exit Function
    
ErrorHandler:
    CallAddinFunction = "エラー: " & Err.Description
End Function

' アドイン読み込み関数
Public Function LoadAddin() As String
    On Error GoTo ErrorHandler
    
    Dim addinPath As String
    addinPath = "C:\path\to\your\addin.xll"  ' 実際のパスに置き換えてください
    Application.RegisterXLL addinPath
    LoadAddin = "アドインが正常に読み込まれました。"
    Exit Function
    
ErrorHandler:
    LoadAddin = "アドインの読み込みに失敗しました: " & Err.Description
End Function

まとめ

  • 関数名のみを指定して Application.Run で呼び出す。
  • Excelのセキュリティ設定でマクロを有効化し、必要に応じて「VBAプロジェクト オブジェクト モデルへの信頼」を設定。
  • .xll アドインの読み込みには、Excelのアドイン設定画面または LoadAddin 関数を使用。
  • エラーハンドリングを追加し、アドインの読み込み失敗や関数呼び出しエラーに対して、わかりやすいエラーメッセージを提供。

この設定とコードにより、VBAからC#で作成したExcel DNAアドインの関数を呼び出し、Excelで外部システムとスムーズに連携することが可能になります。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?