我有一个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