vba - 工作簿。添加不添加新工作簿

标签 vba excel excel-2013

我有一个 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 上放置一个 watch ,它会显示它有一个 ThisWorkbook 的值。

尝试在 Watch 窗口中查看 newBook 的属性会挂起 Excel,我需要从任务管理器中结束任务。

我错过了什么?

最佳答案

If I use the ProdLookup function within Excel



如果您将该函数用作 UDF,则不允许创建新工作簿。 UDF 仅限于将值返回到包含函数调用的单元格。

关于vba - 工作簿。添加不添加新工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43433591/

相关文章:

vba - VBA 中作为类成员的类对象数组

vba - 如何在Excel VBA中使用后期绑定(bind)实现跨版本兼容性

vba - Excel VBA WorkSheet.Excel 2013 之后的复制

javascript - 从 ExcelJS WorkBook 生成 Base64

sql - 如何将 SQL 语句结果导出到 Excel 文件

excel - 如何让Excel公式更易读?

vba - 如何在事件中创建计数器?

excel - 覆盖单元格excel VBA的重新格式化

java - 以编程方式导出 VBA 模块

arrays - 加快我的字符串文本替换代码