2011-09-07 20 views
0

ExcelのvbaでQueryTableを使用してWebサイトからデータを取得しています。ブックが「共有ブック」モードでない場合、これが正常に動作します。 「Shared Workbook」をオンにしてvbaコードを実行すると、excelはエラーメッセージ「Microsoft Excel - このコマンドは共有ブックでは使用できません」を返します。 (:= urlには、送信先:=範囲( "A1")接続)「共有ブック」モードでExcel VBA QueryTableがサポートされない

VBAが上停止したコードは、クエリテーブル

セットクエリとして

薄暗いクエリ= Application.ActiveSheet.QueryTables.Addです。 ..

query.Name = < "データを取得" - HERE

データを取得する別の方法はありますか?

答えて

0

共有ブックのクエリテーブルを更新することができます。したがって、あなたの状況に合っている場合は、共有されていないときにテンプレートにクエリを設定してから共有してから、VBA経由でリフレッシュしてください。それが最も簡単な方法です。

事前に設定ができない場合は、MSXMLを使用してWebデータを取得し、VBAでシートに貼り付けることができます。参照(VBE - ツール - 参照)をMicrosoft XML、v5.0、Microsoft Forms 2.0 Object Library(クリップボード用)に設定する必要があります。次に、このようなコードを実行してWebページからテーブルを取得することができます。

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 

エラーをチェックインしていません。いくつかのコードを追加して、Webページを見つけ、必要なデータが含まれていることを確認することができます。

関連する問題