我有一個Excel函數,它使用來自SQL拉的信息填充字典。爲了幫助可視化答案集,我將它放入了一個新的工作簿 - 雖然我不需要再將其可視化,但我仍然發現它有助於填充。工作簿。添加不添加新工作簿
答案集不會改變,除非我自己在填充數據庫中做了一些事情,所以我不需要每次都執行查詢的函數。因此,一旦字典被填充,我將繞過查詢,除非我強制它使用刷新參數初始化字典。
Option Explicit
Option Compare Text
Private dProducts As Scripting.Dictionary
------
Function ProdLookup(sValue As Variant, sReturn As Variant, sLookupType As
Variant, _Optional iVendor As Integer, Optional bRefresh As Boolean) As
Variant
If sValue = "" Then
ProdLookup = ""
Exit Function
End If
If sLookupType = "SKU" Then
If (dProducts Is Nothing) Or (bRefresh = True) Then
Call Create_dProdsBySKU
End If
ProdLookup = dProducts(CStr(sValue.Value))(CStr(sReturn.Value))
Exit Function
End If
End Function
------
Sub Create_dProdsBySKU()
Dim newBook As Workbook
Set newBook = Workbooks.Add
'Rest of code to create query, run it, retrieve results, dump onto
'newBook, and populate into dProducts
newBook.Close SaveChanges:=False
End Sub
如果我簡單地從編輯器中運行Create_dProdsBySKU,詞典填充到一個新的工作簿,並關閉:
該模塊的結構如下。但是,如果我在Excel中使用ProdLookup函數,它永遠不會創建一個新的工作簿 - 如果我在newBook上放置了一個監視器,它將顯示它具有ThisWorkbook的值。
試圖在Watch窗口中看到newBook的屬性會掛起Excel,我需要從任務管理器中結束任務。
我錯過了什麼?
正如我所看到的,你還沒有創建一個dProducts詞典類的新實例。或者我在這裏失去了一些東西? – sktneer
@sktneer不缺失任何東西,部分被剪下的代碼包括以下內容: Set dProdsBySKU = CreateObject(「Scripting.Dictionary」) – mikstravaganza