« StrRevers関数 | トップページ | Webクエリを使ってURLが存在するか確かめる »

2011年6月 4日 (土)

Webクエリまとめ

今までの記事の中のWebクエリは
マクロ自動記録で記録したものを使っていました。
必須の引数などがいまいちわからなかったので
そのまま放置していたのですが、
整理します。

VBAヘルプのWebクエリ関連のページはわかりにくいので
まず始めにこのWebページをどうぞ、
Webクエリを作成する方法です。
Add メソッド
「QueryTables オブジェクトの Add メソッド」の箇所です。

さてここを読んでやっと、
Webクエリ作成に最小限な引数とメソッドがわかりました。

Webクエリを作成する最小限のコードはこちら

Webクエリを作成するコード1:

Sub macro110604a()
'Webクエリ作成
'最小限

    With ActiveSheet.QueryTables.Add( _
        Connection:="URL;https://yumem.cocolog-nifty.com/blog/2011/05/post-faec.html", _
        Destination:=Range("A1"))
        
        .Refresh
    End With

End Sub

ポイントはRefreshメソッドです。
これをしないと何も表示されません。

上のコードを実行してみると
指定したページのTableだけがとりだされます。
これは、WebSelectionType プロパティが
デフォルトでxlAllTablesになっているためです。

次のリンクのページはWebSelectionType プロパティについてです。
WebSelectionType プロパティ

xlEntirePage (すべて)
xlAllTables (既定値/すべてのテーブル)
xlSpecifiedTables (特定のテーブル)

この3つの値をWebSelectionType プロパティに指定できます。
カッコ内は説明です。

3番目の値をWebSelectionTypeに指定したときは、
テーブルの番号を指定するWebTables プロパティを併せて使用します。

1番目のテーブルを指定するときはこうです。

WebTables = "1"

1番目と3番目のテーブルを指定するときは

WebTables = "1, 3"

このように複数のテーブルを指定するときはコンマで続けます。
指定したページのテーブルの数や
どのテーブルが何番目のテーブルか?
などはいろいろ試行してください。

WebSelectionType プロパティを使用したWebクエリ作成コードはこちら
xlEntirePage、xlAllTables、xlSpecifiedTables について
それぞれ1つずつあります。

Webクエリを作成するコード2:

Sub macro110604b1()
'Webクエリ作成
'WebSelectionType = xlEntirePage

    With ActiveSheet.QueryTables.Add( _
        Connection:="URL;https://yumem.cocolog-nifty.com/blog/2011/05/post-faec.html", _
        Destination:=Range("A1"))
        
        .WebSelectionType = xlEntirePage
       
        .Refresh
    End With

End Sub

Sub macro110604b2()
'Webクエリ作成
'WebSelectionType =  xlAllTables

    With ActiveSheet.QueryTables.Add( _
        Connection:="URL;https://yumem.cocolog-nifty.com/blog/2011/05/post-faec.html", _
        Destination:=Range("A1"))
        
        .WebSelectionType = xlAllTables '既定値
        
        .Refresh
    End With

End Sub

Sub macro110604b3()
'Webクエリ作成
'WebSelectionType = xlSpecifiedTables

    With ActiveSheet.QueryTables.Add( _
        Connection:="URL;https://yumem.cocolog-nifty.com/blog/2011/05/post-faec.html", _
        Destination:=Range("A1"))
        
        .WebSelectionType = xlSpecifiedTables
        .WebTables = "3"

        .Refresh
    End With

End Sub

ほとんどの場合はデータのみ欲しいと思いますので、
次はHTML形式を取り込まないようにしたいです。

これを指定するのはWebFormatting プロパティで、
書式をどの程度適用するかを指定します 。

次のリンクのページはWebFormatting プロパティについてです。
WebFormatting プロパティ

さてxlWebFormattingAllとxlWebFormattingNoneはよいとして
xlWebFormattingRTFとは何ぞや?ということで検索、

リッチ テキスト形式と互換性のある書式をインポートします。

このページにあります。

とりあえず書式は一切要らない方針なので追求しません。
ここからはバイキング方式でいきます。
以下のコードのどれかをmacro110604b系のRefreshの前の
Withステートメントの中、空白の行に足していってください。

.WebFormatting = xlWebFormattingNone '書式なし
.WebFormatting = xlWebFormattingAll 'すべての書式
.WebFormatting = xlWebFormattingRTF '何らかの書式

次は、最初に名前がありきのはずがここでName登場です。
作成してからWebクエリのプロパティを変えたり、
Refreshメソッドを使うときに
どのWebクエリかを指定するときに使います。

.Name = "クエリの名前"

名前でクエリを指定するには次のようにします。
このコードは指定したクエリを更新します。

ActiveSheet.QueryTables("クエリの名前").Refresh

ここからはさらっと流します。

クエリの自動更新のプロパティ、分単位です。
0は更新なし、
使用できる範囲は、0 ~ 32767 の整数です。

.RefreshPeriod = 0 '既定値=0

更新をバックグラウンド (非同期) で実行するには
BackgroundQuery プロパティをTrueにします。

.BackgroundQuery = True

ブックを開いたときにクエリを更新するかを設定するには、
RefreshOnFileOpen プロパティを使います。
Falseが更新しないです。

.RefreshOnFileOpen = False '既定値

ブックを保存するときに
クエリのデータを保存しないで
クエリがあるということだけ保存する場合は

.SaveData = False

よく使いそうなプロパティは
こんなところでしょうか。

その他のプロパティはこちらのページを参照してください。
_QueryTable メンバ

あとRefreshメソッドを実行する際に、
バックグラウンドで更新したいとき

.Refresh BackgroundQuery:=True
.Refresh True

などと引数を指定してください。

|

« StrRevers関数 | トップページ | Webクエリを使ってURLが存在するか確かめる »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Webクエリまとめ:

« StrRevers関数 | トップページ | Webクエリを使ってURLが存在するか確かめる »