【发布时间】:2013-12-10 02:23:05
【问题描述】:
我有一个命名范围 lstVendors,它指的是:=OFFSET(Data!$W$2,0,0,COUNTA(Data!$W$2:$W$400),1)。我希望在工作簿打开时填充此范围。我有以下代码:
Private Sub Workbook_Open()
Application.WindowState = xlMaximized
Dim rslt()
Dim i As Integer
Dim n As Integer
Dim startRng As Range
Dim DropDown1 As DropDown
ThisWorkbook.Sheets("Dashboard").Shapes("TextBox 6").Visible = False
' Range("lstVendors").Offset(0, 0).Value = "Please Select..."
' Set DropDown1 = ThisWorkbook.Sheets("Dashboard").DropDowns("Drop Down 1")
' DropDown1.Value = 1
On Error Resume Next
If Not IsError(Range("lstVendors")) Then
Range("lstVendors").ClearContents
End If
On Error GoTo 0
rslt = Application.Run("SQLite_Query", "path/to/my/sqlite", "SELECT PROGRAM_ID FROM VENDOR;")
Set startRng = Range("lstVendors")
i = 0
For n = 2 To UBound(rslt)
Range("lstVendors").Offset(i, 0).Value = rslt(n)(0)
i = i + 1
Next n
End Sub
Set startRng = Range("lstVendors") 出错。我知道这是因为当我尝试设置它时,该范围内没有任何内容,因为如果我将一个条目放入命名范围,则该集合可以工作,但是,我需要在每次打开时由 sqlite 查询填充它作为数据变化。
非常感谢任何建议。
【问题讨论】:
-
您收到什么错误信息?另外,我不确定您的
On Error Resume Next使用得当。 -
对不起,这是一个运行时错误“1004”:对象“_Global”的方法“范围”失败。它基本上认为命名范围不存在,因为它是空白的。 Application.Goto Worksheets("Data").Range("lstVendors") 返回相同的错误。
-
错误是因为你的 sql 没有返回任何结果,所以它使公式的 COUNTA 部分无效?如果是这样,请尝试将其包装在 Max 语句中,如下所示: =OFFSET(Data!$W$2,0,0,MAX(COUNTA(Data!$W$2:$W$400),2),1)
-
@Methonis 清除后范围不存在。
Name确实存在,但范围不存在。无论如何,您不需要在代码中使用它。在下面检查我的答案。