VB.NET 2017で単純なdllを作成しました。 VBA(Excel 2016)から呼び出そうとしています。私はStack OverflowとMSDNを検索しましたが、このVBAエラーの多くのヒットにもかかわらず、この特定の問題を解決するユーザー定義のDLLに関連する情報は見つかりません。vba実行時エラー '429':ユーザー定義のvb.net dll(VB.NET 2017、Excel 2016)でActiveXがオブジェクトを作成できない
dllをコンパイルするときにCOM Interopに登録オプションのボックスをチェックしました。また、アセンブリのCOM-Visibleを作成するボックスもチェックされていることを確認しました。
コンパイルに成功し、VBAエディタ内の参考文献でライブラリ(TestLibrary2)を見つけることができました。私が作成したクラスは、TestVBNETと呼ばれています。私はVBAでそれを含めることTestLibrary2を確認して、VBAに次のコードを実行しようとしました:実行時エラー:
Public Sub mySub()
Dim myTest2 As TestLibrary2.TestVBNet
Set myTest2 = New TestLibrary2.TestVBNet
End Sub
私はサブを実行したとき、私はメッセージでポップアップダイアログを得ました「429」:ActiveXは私はMSDNや他のサイトで読んだものに基づいてオブジェクト
を作成することはできません、期待される結果はTestLibrary2.TestVBNetオブジェクトが正常にインスタンス化されなければならないということです。
以下のコードは、私がdllにコンパイルしたVB.NETコードです。 GUIDは、Windows 10コマンドプロンプトでguidgenを使用して生成されました。
Imports System.Runtime.InteropServices
<Guid("2CEBF80D-D5FC-4C52-BCF1-E2F076318240")>
Public Interface ITestVBNet
Function addTrig(x As Double, y As Double) As Double
End Interface
<Guid("60983277-A724-4CDD-8ACE-B94CF9546F43")>
<ClassInterface(ClassInterfaceType.None)>
Public Class TestVBNet
Function addTrig(x As Double, y As Double) As Double
Return Math.Sin(x) + Math.Cos(x)
End Function
End Class
ご意見やご要望があれば幸いです。前もって感謝します。
EDIT(以下のコメント):実際にRegister for COM Interopオプションを実行するには、管理者としてdllをコンパイルしました。また、管理者として - - 私はまたします。regasmを使用してみました、次のように、コンパイルされたDLLと同じディレクトリに:
regasm /codebase /tlb TestLibrary2.dll
以下が返されました:私はここに初心者くさいことをお詫び申し上げます
RegAsm : warning RA0000 : Registering an unsigned assembly with /codebase can cause your assembly to interfere with other applications that may be installed on the same computer. The /codebase switch is intended to be used only with signed assemblies. Please give your assembly a strong name and re-register it.
Types registered successfully
RegAsm : error RA0000 : An error occurred while saving the exported type library: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
をCOMライブラリの登録に関しては、dllが正常に登録されたがGACに転送できなかったことを示すように見えた。それを転送しないことが私の意図でした。 VBAでロードしようとすると、上記と同じエラーが発生しました。
現在のユーザーの特権によっては、アクセス権の問題が考えられます。その理由を除外できるように、管理者としてコードを実行してみてください。 – peakpeak
dllのビット数とExcelのビット数が一致していることを確認してください。 regasm.exeでアセンブリを再登録してみてください –
単純なVB.NETクライアントでDLLをロードしようとしましたか?これはあなたにヒントを与えるかもしれません –