2013-02-27 94 views
0

假設我有調用自定義的庫文件(.dll); Library.dllVBA7編譯錯誤Excel中的Windows 7

中的庫,有一個叫做類; 類

我生成一個名爲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 

我看到錯誤

對象變量或帶塊變量未設置

沒有崩潰,沒有明確的錯誤消息導致失敗。

任何人有任何想法?

我不知道,如果誤差在庫或代碼中?

而且它是從Excel中鍵入到單元格 = testFunction運行(VAR1,VAR2,VAR3 ....)

編輯:在評論更多信息

+0

什麼是testObject的範圍? – 2013-02-27 18:55:24

+0

你是什麼意思的範圍? Thx – user2111939 2013-02-27 20:01:27

+0

請將testObject聲明爲模擬級別或公共級別。 – 2013-02-28 08:34:26

回答

0

OK,解決方案已被發現。這不是由於代碼錯誤,

Dim testObject As New Library.Class 

工作正常。

一樣其次

Set testObject = New Library.Class 

是,在VB中,我註冊庫dll文件通過

Tools > References 

我認爲這將是不夠的問題

Dim testObject As Library.Class 

我沒有管理員權限。

我錯了。

我需要以管理員身份登錄和註冊thern使用

regsvr32 ".dll path" 

現在我看到在電子表格中感覺輸出的DLL。

2

在VBA中,你可以啓動通過兩種方法對象:

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

不同的是,在一個版本的對象發起第一次是在代碼訪問! (注意:這與VB.NET不同)。在第二種情況下,它被明確地開始當你運行Set o = New Object

因此,當你在該行testObject.Lat1 = var1設置斷點,TestObject的實際上是尚未分配,因此,調試器不能訪問任何東西!只有在執行完這行後才能看到結果。

如果這困擾你,你只需要添加

Set testObject = new Library.Class 
+0

如果我將斷點放置在「調用testSetup」位置,那麼當我進入Sub並進入'testObject.lat1 = var1'時,我會看到同樣的情況。這是否適合您的解決方案? – user2111939 2013-02-27 20:06:18

+0

此外,我在Excel 2010中使用VBA7,如果這改變了什麼 – user2111939 2013-02-27 20:08:33

+0

是的 - 只有在第一次訪問testObject之後(這是testSetup中的某處,它將在調試器中可見)(除非使用'Set。 .. = New ...'如上所述)。這也適用於VBA7! – 2013-02-27 20:10:55