他の人が言ったように、Workbook_Open
までDLLへの参照を追加しない場合は、遅延バインディングを使用してDLL内のものに接続する必要があります。
しかし、私はあなたがこれを間違った方法で行っていると思います。 DLLへの参照をWorkbook_Open
に追加する代わりに、すでに参照して.IsBroken
をチェックしてください。次に、壊れた参照を修正するために必要なことを行うためのコードを作成することができます。
これは早期バインディングの利点を維持し、DLLへの参照が壊れている場合、同じ種類のコンパイルエラーは発生しません。
:まだコンパイルエラーが発生することがありますが、DLLが見つからない場合はありません。参照が壊れている間に、VBA Strings
モジュールの関数を使用すると、関数の先頭にStrings.
が含まれていないとコンパイルエラーが発生します。たとえば、次のコードではコンパイルエラーが発生します.は、 。 Strings.
で、接頭辞Mid
とInStrRev
を修正するには
Private Sub Workbook_Open()
Dim r As Reference
For Each r In ThisWorkbook.VBProject.References
If r.IsBroken Then
MsgBox "Found broken reference." & vbCrLf _
& Mid(r.FullPath, InStrRev(r.FullPath, "\") + 1)
End If
Next r
End Sub
。
MsgBox "Found broken reference." & vbCrLf _
& Strings.Mid(r.FullPath, Strings.InStrRev(r.FullPath, "\") + 1)
あなたはのWorkbook_Openコード内のどこタイプTを使用しています(またはワークシートオブジェクトのいずれかで?)、コンパイル時には、それは強い型付けされたオブジェクトがOKかどうかをチェックします。これを回避する1つの方法は、あなたのTオブジェクトを強く入力することを放棄することです。 – Pynner
@Pynnerが示唆するように、レイトバインディングを使用します。したがって、型Tの変数を宣言する代わりに、宣言は '' Object''と同じです。 –
レイチェルの提案に加えて。ユーザーはそのdllも持っていますか?彼のPCに登録されていますか? –