0

と呼ばれるカスタム ライブラリ (.dll) があるとします。Library.dll

ライブラリ内には、; というクラスがあります。クラス

testObject というオブジェクトを生成します。

Dim testObject As New Library.Class

testFunction という関数があります。

Function testFunction(var1 As Double, var2 As Double, var3 As Double, var4 As Double, _
var5 As Double, var6 As Integer, var7 As Double, var8 As Double, var9 As Double)
    Call testSetup(var1, var2, var3, var4, var6, var7, var8, var9)
    testFunction = testObject.Field(var5)
End Function

この関数は testSetup を呼び出します。

Sub testSetup(var1 As Double, var2 As Double, var3 As Double, var4 As Double, _
var5 As Double, var6 As Integer, var7 As Double, var8 As Double, var9 As Double)
    testObject.Lat1 = var1
    testObject.Lon1 = var2
    testObject.Lat2 = var3
    testObject.Lon2 = var4
    testObject.mth = var6
    testObject.GMT = var7
    testObject.ssn = var8
    testObject.icf = var9
End Sub

私が抱えている問題は、実行時にその場所にブレークポイントを配置すると

testObject.Lat1 = var1

実行して次の行にステップオーバーすると、オブジェクトにカーソルを合わせると

testObject.Lat1

エラーが表示されます

オブジェクト変数またはWithブロック変数が設定されていません

クラッシュはなく、失敗の原因となる明示的なエラー メッセージもありません。

誰にもアイデアはありますか?

エラーがライブラリ内にあるのかコード内にあるのかわかりませんか?

また、セルに入力することでExcelから実行されます =testFunction(var1, var2, var3....)

編集:コメントの詳細

4

2 に答える 2

2

VBA では、次の 2 つの方法でオブジェクトを開始できます。

  1. Dim o as New Object
  2. Dim o as Object: Set o = New Object

違いは、バージョン 1 では、オブジェクトがコード内で最初にアクセスされたときに開始されることです。(注: これは VB.NET とは異なります)。2 番目のケースでは、 を実行すると明示的に開始されますSet o = New Object

したがって、行にブレークポイントを設定するとtestObject.Lat1 = var1、 testObject は実際にはまだ割り当てられていないため、デバッガーは何にもアクセスできません! この行を実行した後にのみ、結果が表示されます。

これが気になる場合は、単に追加する必要があります

Set testObject = new Library.Class
于 2013-02-27T19:28:35.177 に答える
0

OK、解決策が見つかりました。コードのエラーが原因ではありませんでした

Dim testObject As New Library.Class

うまくいきました。

するように

Dim testObject As Library.Class

に続く

Set testObject = New Library.Class

問題は、VBでライブラリdllファイルを登録したことです。

Tools > References

管理者権限がなかったので、これで十分だと思いました。

私は間違っていた。

管理者としてログインし、次を使用してdllを登録する必要がありました

regsvr32 ".dll path"

今、私はスプレッドシートに賢明な出力を見ています。

于 2013-02-28T11:24:18.617 に答える