在非ActiveSheet范围的QueryTables

我一直把QueryTables结果放在ActiveSheet ,但是现在我想把它们放在另一个表单的一边。 在下面的代码中,注释掉的行是我原来的,下面的“与”行是我的新尝试。

 Dim QuerySheet As WorkSheet Dim ttt As Integer Set QuerySheet = ActiveWorkbook.Worksheets("ZZ$Temp$") QuerySheet.Cells.Clear QuerySheet.Cells(1, 1) = 1234 QuerySheet.Cells(2000, 50) = 5678 ttt = QuerySheet.Cells(1, 1) ' With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl, Destination:=DataSheet.Range(Cells(row_stock + iMax, 27), Cells(row_stock + iMax + 199, 27))) With QuerySheet.QueryTables.Add(Connection:="URL;" & qurl, Destination:=QuerySheet.Range(Cells(row_stock + iMax, 27), Cells(row_stock + iMax + 199, 27))) .BackgroundQuery = True .TablesOnlyFromHTML = False .Refresh BackgroundQuery:=False .SaveData = True End With 

我知道该表存在,我定义内容在1, 12000, 50

我得到错误Run-time error '1004' Method 'Range of object '_worksheet' failed.

我也尝试激活QuerySheet和原来的。

我如何得到QueryTables把东西放在QuerySheet

你需要在某个地方设置QuerySheet。 简单Dim是不够的。 加

  Dim QuerySheet As WorkSheet set QuerySheet = Sheets("querysheet") 

(或者表单的名称)在你的代码之前。

然后,您将不得不将以下内容更改为仅引用QuerySheet(适用于QuerySheet的所有“单元格”和“范围”用法)。

 With QuerySheet.QueryTables.Add(Connection:="URL;" & qurl, Destination:=QuerySheet.Range(QuerySheet.Cells(row_stock + iMax, 27), QuerySheet.Cells(row_stock + iMax + 199, 27))) 

我发现下面的作品。 是的,所有表单参考都是必需的!

 With Sheets("ZZ$Temp$").QueryTables.Add(Connection:="URL;" & qurl, Destination:=Sheets("ZZ$Temp$").Range(Sheets("ZZ$Temp$").Cells(row_stock + iMax, 27), Sheets("ZZ$Temp$").Cells(row_stock + iMax + 199, 27)))