我試圖運行下面的代碼來創建一個字典,然後在函數中使用該字典來根據字典鍵來分配函數參數值。Sub運行後的VBA字典<out of context>
Option Explicit
Public b1 As Object
Public var1 As Variant
Public var2 As String
Public var3 As Variant
Sub CreateDictionaries()
Set b1 = CreateObject("Scripting.Dictionary")
b1.Add "key1", 0.009
b1.Add "key2", 0.011
b1.Add "key3", 0.014
b1.Add "key4", 0.025
b1.Add "key5", 0.045
End Sub
Public Function MyFunction(var1, var2, var3)
If var1 <= 5 Then
MyFunction = b1.Item(var2) * var1* var3
ElseIf var1 > 5 And var1 <= 10 Then
MyFunction = b1.Item(var2) * (var1 - 5) * var3
ElseIf var1 > 10 Then
MyFunction = b1.Item(var2) * (var1 - 10) * var3
End If
End Function
雖然這個工作最初,我暫時改變後的Sub到Static Sub它停止工作。將其更改回到上次工作狀態時尚未解決問題。重新啓動VBA並將代碼作爲新模塊運行也沒有奏效。
在調試過程中,我可以在Watch窗口中看到字典b1是按照它應該創建的,但是在Sub完成之後,它需要值「out of context」。它沒有任何意義,現在它讓我發瘋了!誰能幫忙?
這不是一個好主意來自動實例化對象變量:http://www.cpearson.com/excel/declaringvariables.aspx – CallumDA
@CallumDA如果你想要確保變量引用一個'Dictionary'而不是'Nothing',那麼我沒有看到任何理由不使用自動實例語法 - 每一個你sage將用新的'Dictionary'填充變量。只有當初始化比簡單地創建一個新的'Dictionary'更復雜 - 例如用某些值填充它 - 自動實例化是無用的;正如我在答覆中指出的那樣。 –
在你的代碼中,你寫'If Not b1 Is Nothing' - 這是不行的,因爲你還沒有創建字典。此外,如果您更改了「Public b1 As New Dictionary」,它仍然不會出於同樣的原因(請參閱鏈接)。僅供參考我不只是在猜測這個,我測試了你的代碼,它不起作用。 – CallumDA