如何在不提示目标位置的情况下打开IQY文件?

3
我将自动化一个过程,其中我会打开多个IQY文件并将它们粘贴到Excel的主工作表中。目前该过程是手动进行的。
我可以使用VBA打开文件,例如:
set sourcebook = workbooks.open("C:\Metrics\sourceFile.iqy")

我已将通知设置为false,我已将displayAlerts设置为false,但无论如何都不能阻止用户导入数据表格的提示。我没有改变任何设置,目前它被设置为在新工作簿中以表格形式输出数据,这很好。我只想删除该决策/点击过程,这样我只需运行宏,然后所有新数据就会出现在我的主工作表中。
是否有修改.open方法的修饰符可以让我预先确定诸如在新工作簿上将数据放入表格等事项?
我考虑将IQY文件添加为数据源,但我必须向许多其他用户发送/共享此文件,他们对那些文件没有用处,而且我对添加数据源/连接不太熟悉。
2个回答

1
请参见此链接中的“使用动态Web查询”部分 https://msdn.microsoft.com/zh-cn/library/office/aa203721(v=office.11).aspx
这对我有效:
Sub Finder_Get_Query()
    'Edit path to .iqy file, if necessary.
    IQYFile = "C:\Program Files\Microsoft Office\OFFICE11\" & _
       "QUERIES\MSN MoneyCentral Investor Currency Rates.iqy"
    With ActiveSheet.QueryTables.Add(Connection:= _
       "FINDER;" & IQYFile, Destination:=Range("A1"))

        .BackgroundQuery = True
        .TablesOnlyFromHTML = True
        .Refresh BackgroundQuery:=False
        .SaveData = True
    End With
End Sub

这似乎是从我拥有的.iqy文件中导入表格,其数据与手动打开并添加为新工作表时不同。例如,手动打开会给出我期望的列,但这种自动化方法只给了我一些我期望的列。更有问题的是,它给了我一个我不需要的ID列。因为它作为ListObject导入,所以您无法删除列。 - TylerH

0

非常完美!只需进行少量修改,您就可以定义导入的目标工作表(如果您有多个*.IQY文件需要连接)

strTargetSheet = "Your SheetName"

StrSourceConnection = "Your IQY file location"

'make the call from any other procedure ....

Call Finder_Get_Query(strTargetSheet, strSourceConnection)

Sub Finder_Get_Query(strSheet As String, strConnection As String)
Dim IQYFile As String

ThisWorkbook.Sheets(strSheet).Select
 
IQYFile = strConnection
With ActiveSheet.QueryTables.Add(Connection:= _
   "FINDER;" & IQYFile, Destination:=Range("A1"))

    .BackgroundQuery = True
    .TablesOnlyFromHTML = True
    .Refresh BackgroundQuery:=False
    .SaveData = True
End With
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接