“共享工作簿”模式下不支持 Excel VBA QueryTable

Posted

技术标签:

【中文标题】“共享工作簿”模式下不支持 Excel VBA QueryTable【英文标题】:Excel VBA QueryTable unsupported in "Shared Workbook" mode 【发布时间】:2011-09-07 18:00:18 【问题描述】:

我在 excel vba 中使用 QueryTable 从网站检索数据。当工作簿未处于“共享工作簿”模式时,这可以正常工作。一旦我打开“共享工作簿”并运行 vba 代码,excel 就会返回一条错误消息 - 'Microsoft Excel -- 此命令在共享工作簿中不可用'。 vba 停止的代码是

将查询变暗为 QueryTable

设置查询 = Application.ActiveSheet.QueryTables.Add(Connection:=url, Destination:=Range("A1"))

...

query.Name = "获取数据"

还有其他检索数据的方法吗?

【问题讨论】:

【参考方案1】:

您可以刷新共享工作簿中的查询表。因此,如果它适合您的情况,您可以在模板中设置未共享的查询,然后共享它,然后通过 VBA 进行刷新。这是最简单的方法。

如果您无法预先设置,您可以使用 MSXML 获取 Web 数据并使用 VBA 将其粘贴到您的工作表中。您需要设置对 Microsoft XML、v5.0 和 Microsoft Forms 2.0 对象库(用于剪贴板)的引用(VBE - 工具 - 引用)。然后你可以运行这样的代码从网页中获取一个表格。

Sub GetData()

    Dim oHttp As MSXML2.XMLHTTP50
    Dim shtml As String
    Dim lTableStart As Long, lTableEnd As Long
    Dim doClip As MSForms.DataObject

    Const sTABLESTART As String = "<table id=""table1"">"
    Const sTABLEEND As String = "</table>"

    'create a new request object
    Set oHttp = New MSXML2.XMLHTTP50

    'open the request and send it
    oHttp.Open "GET", "http://finance.yahoo.com/q?s=^GSPC", False
    oHttp.send

    'get the response - a bunch of html
    sHtml = oHttp.responseText

    'define where your data starts and ends
    lTableStart = InStr(1, sHtml, sTABLESTART)
    lTableEnd = InStr(lTableStart, sHtml, sTABLEEND)

    'create a new clipboard object
    Set doClip = New MSForms.DataObject

    'set the text and put it in the clipboard
    doClip.SetText Mid$(sHtml, lTableStart, lTableEnd - lTableStart)
    doClip.PutInClipboard

    'one of those rare instances where you actually have to select a range in VBA
    Sheet4.Range("G10").Select
    'blank out the previous results
    Sheet4.Range("G10").CurrentRegion.ClearContents
    'paste the hmtl as text with no formatting
    Sheet4.PasteSpecial "Text", , , , , , True

End Sub

那里没有错误检查。您可能需要添加一些代码以确保您找到该网页并且它包含您想要的数据。

【讨论】:

以上是关于“共享工作簿”模式下不支持 Excel VBA QueryTable的主要内容,如果未能解决你的问题,请参考以下文章

怎么查看excel表格以前的修订记录?

如何在C#中接受或拒绝 Excel 中的修订

共享Excel编辑的一些资源

将查询导出为共享工作簿

新手向EXCEL高人请教关于VBA和数据透视图的问题,愿不吝赐教的学生先在这里给您道声:谢谢了.请留下您的Q...

Excel 如何快速从第一行选到最后一行