繁体   English   中英

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

[英]Excel VBA QueryTable unsupported in “Shared Workbook” mode

我在excel vba中使用QueryTable从网站检索数据。 当工作簿不在“共享工作簿”模式下时,这可以很好地工作。 打开“ Shared Workbook”并运行VBA代码后,excel会返回错误消息-“ Microsoft Excel-此命令在共享工作簿中不可用”。 vba停止的代码是

暗查询作为QueryTable

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

...

query.Name =“获取数据” <-这里

还有另一种检索数据的方法吗?

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

如果无法事先设置,则可以使用MSXML获取Web数据,然后使用VBA将其粘贴到工作表中。 你需要设置一个参考(VBE - 工具 - 引用)对Microsoft XML,5.0版和Microsoft窗体2.0对象库(用于剪贴板)。 然后,您可以运行像这样的代码来从网页中获取表格。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM