Workbooks.Add不添加新工作簿

时间:2017-04-16 04:07:27

标签: excel vba excel-vba excel-2013

我有一个Excel函数,它使用SQL pull中的信息填充字典。为了帮助可视化答案集,我现在把它放到一个新的工作簿中 - 虽然我不再需要对它进行可视化,但我仍然觉得填充它会很有帮助。

答案集不会改变,除非我自己在填充它的数据库中做了一些事情,所以我不需要每次都执行查询的功能。因此,一旦填充了字典,我就会绕过查询,除非我强制它使用刷新参数初始化字典。

该模块的结构如下:

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,我需要从任务管理器中结束任务。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

  

如果我在Excel中使用ProdLookup功能

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