2014-10-31 124 views
0

我有一个目前正在工作的odbc查询表,但我需要通过单元格D18中的值定义从数据库选择的字段。Excel VBA查询表属性

下面的代码应该替换查询表属性中的命令文本,但它不起作用。 debug表示“下标超出范围”。如果我在即时窗口中调试并运行文本,然后在SQL中运行此结果文本行,它将返回正确的值,因此sql语句是正确的。我有什么错在VBA语法

Sub Accrual() 

    Text = "SELECT " 
    Text = Text & "BALANCE.CDTLED_" & Range("D11").Value - 1 & " " 
    Text = Text & "FROM x3sov.SOVEX.BALANCE BALANCE " 
    Text = Text & "WHERE (BALANCE.ACC_0='2109') AND (BALANCE.FCY_0='S01')" 

    Sheets("Control").QueryTables(1).CommandText = Text 


End Sub 

大加赞赏

+0

您是否将QueryTable范围转换为ListObject又名Excel表? – 2014-10-31 20:38:35

+0

没有。我用Data->从其他来源 - > MS查询并返回数据作为表。然后我删除标题,以便将值显示在单个单元格中。但它仍然是一张表格,我可以右击并刷新 – jfly62 2014-10-31 20:44:47

+0

因此,您可能需要编辑“连接”对象的“CommandText”。 – 2014-10-31 20:47:00

回答

0

由于引入Excel ListObjects(在UI称为表)的任何帮助,您可以不再依赖QueryTables.Count去所有的外部数据连接。如果您没有任何QueryTable,则外部数据连接将通过ListObject。

Sheet1.ListObjects(1).QueryTable.CommandText = Text 

注意的ListObject不具有的QueryTable 小号属性,但一个的QueryTable属性,因为总有唯一的一个。

+0

非常感谢迪克。这已经让我坚持了几个小时 – jfly62 2014-10-31 22:15:06