2011-09-07 193 views
0

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

昏暗查询作为的QueryTable

集的查询= Application.ActiveSheet.QueryTables.Add(连接:=网址,目标:=范围( “A1”))

。 ..

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

有检索数据的另一种方式?

回答

0

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

如果您不能预先设置它,可以使用MSXML获取Web数据并使用VBA将其粘贴到工作表中。您需要将参考(VBE - 工具 - 参考)设置为Microsoft XML,v5.0和Microsoft Forms 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 

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

相关问题