新 Excel 工作簿应用程序中的网络查询
Webquery in a new Excel workbook application
我认为这里的问题与在新 Excel 应用程序中打开的新工作簿有关。这是代码的一部分是错误的。
如果将 nb.ActiveSheet.QueryTables.Add
更改为 ActiveSheet.QueryTables.Add
一切正常(但在当前工作簿中,而不是在 nb 中)。
它必须在新工作簿而不是当前工作簿中执行。
Dim app As New Excel.Application, nb As Excel.Workbook
Set nb = app.Workbooks.Add
With nb.ActiveSheet.QueryTables.Add(Connection:= _
"URL; http://www.example.com", _
Destination:=Range(Cells(2, 2), Cells(57, 3)))
End With
我看到问题出在哪里了,就在这里:
Destination:=Range(Cells(2, 2), Cells(57, 3)))
如果您没有明确指定要使用哪个工作簿,Range() 将始终引用 ActiveWorkbook 的 ActiveSheet。所以将其更改为:
Destination:=nb.Worksheets(1).Range(nb.Worksheets(1).Cells(2, 2), nb.Worksheets(1).Cells(57, 3)))
这样就可以了。
编辑:我应该提到同样适用于 Cells(),所以我也更新了它们。
我认为这里的问题与在新 Excel 应用程序中打开的新工作簿有关。这是代码的一部分是错误的。
如果将 nb.ActiveSheet.QueryTables.Add
更改为 ActiveSheet.QueryTables.Add
一切正常(但在当前工作簿中,而不是在 nb 中)。
它必须在新工作簿而不是当前工作簿中执行。
Dim app As New Excel.Application, nb As Excel.Workbook
Set nb = app.Workbooks.Add
With nb.ActiveSheet.QueryTables.Add(Connection:= _
"URL; http://www.example.com", _
Destination:=Range(Cells(2, 2), Cells(57, 3)))
End With
我看到问题出在哪里了,就在这里:
Destination:=Range(Cells(2, 2), Cells(57, 3)))
如果您没有明确指定要使用哪个工作簿,Range() 将始终引用 ActiveWorkbook 的 ActiveSheet。所以将其更改为:
Destination:=nb.Worksheets(1).Range(nb.Worksheets(1).Cells(2, 2), nb.Worksheets(1).Cells(57, 3)))
这样就可以了。
编辑:我应该提到同样适用于 Cells(),所以我也更新了它们。