2008-12-08 47 views
0

我在VBA中遇到過一個非常奇怪的錯誤,想知道是否有人可以擺脫一些光線?VBA即時窗口與應用程序運行時間有何不同?

我打電話工作表函數是這樣的:

Dim lMyRow As Long 
lMyRow = WorksheetFunction.Match(vItemID, rngMyRange.Columns(1), 0) 

這是爲了讓我通過在該項目的排在某些情況下(雖然我不能牽制什麼時候),調用Match函數時會發生奇怪的事情。

如果我執行在即時窗口那行,我得到如下:

lMyRow = WorksheetFunction.Match(vItemID, rngMyRange.Columns(1), 0) 
?lMyRow 
10 

即查找作品,並lMyRow得到分配給它的價值。如果我讓該語句在實際代碼中執行,則我的lMyRow值爲0.

這似乎很奇怪!我不明白如何在立即窗口中執行某些操作可以成功地分配一個值,在程序執行過程中的相同位置,在代碼中正常運行時,同一個調用可以賦值0。

我能想到的唯一的事情就是它是一些奇怪的轉換事件,但是如果我分配的變量是int,double或者甚至是一個字符串,我會得到相同的行爲。

我甚至不知道從哪裏開始 - 幫助!

回答

0

我不能用Excel 2007

重現問題這是我使用的代碼:

Sub test() 

Dim vItemID As Variant 
Dim lMyRow As Long 
Dim rngMyRange As Range 

    Set rngMyRange = ActiveWorkbook.Sheets(1).Range("A1:Z256") 

    vItemID = 8 
    lMyRow = WorksheetFunction.Match(vItemID, rngMyRange.Columns(1), 0) 

    Debug.Print lMyRow 

End Sub 

這聽起來很蠢,但你確定匹配函數的所有參數都在同你的宏,並在即時窗口?也許範圍對象改變了?

+0

是啊,這是一個有趣的一個 - 的99.9%,這一呼籲的作品,我不能確定它失敗時的區別是什麼! – 2008-12-09 14:58:45

2

立即窗口和正常代碼運行的唯一區別是範圍。 即時窗口中的代碼在當前應用程序範圍內運行。 如果當前沒有運行,這意味着全局範圍。 放入VBA函數時的代碼僅限於函數範圍。

所以我的猜測是你的一個變量超出了範圍。

我會在該行的函數中放置一個斷點並添加手錶以找出哪個變量未設置。

而且,如果您在vba代碼模塊的頂部沒有Option Explicit,則應該添加它。

0

感謝您的答案傢伙 - 我應該稍微更具體的方式,我做以下電話:

Function makeTheLookup(vItemID As Variant, rngMyRange as Range) 

Dim lMyRow As Long 
lMyRow = WorksheetFunction.Match(vItemID, rngMyRange.Columns(1), 0) 

End Function 

奇怪的是,我傳遞了兩個參數到函數所以我看不出它們在函數內部和外部可能會有什麼不同。這就是說,我仍然完全無能爲力,尤其是因爲它是一個真正的間歇性問題

是否有任何簡單的方法比較函數上下文中的範圍對象與立即窗口上下文中的範圍對象,以及告訴他們是否不同?鑑於該範圍是一個引用類型,感覺就像我應該能夠比較兩個指針,但我不知道如何在VBA中做到這一點!

我使用Excel 2007的方式,雖然我不知道這是否有任何區別。

+0

如何調用?makeTheLookup vItemID,rngMyRange 從即時窗口?這是否行得通(你應該讓函數返回找到的值,在你的例子中不是這種情況)? – 2008-12-09 22:03:21

0

如上所述,它絕對看起來像是一個範圍問題。或一個朦朧的Bug。

我會嘗試使用Debug.print語句以及Watch,並查看它們是否匹配,然後從中取出。

2

您沒有分配函數名稱,以便函數將始終返回零(如果您期待Long)。看來你應該有

makeTheLookup = lMyRow

在你的函數結束。

1

我不知道,如果你還在看着這個或沒有,但我會寫這樣說:

Function makeTheLookup(vItemID As Variant, rngMyRange as Range)as Long 
    makeTheLookUp = WorksheetFunction.Match(vItemID, rngMyRange.Columns(1), 0) 
End Function 
相關問題