首页 文章

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

提问于
浏览
0

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

Dim query As QueryTable

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

...

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

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

1 回答

  • 0

    您可以刷新共享工作簿中的查询表 . 因此,如果它符合您的情况,您可以在模板未设置共享时设置查询,然后共享,然后通过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
    

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

相关问题