pagetaka

写真、PC、ネット、岡山、旅の話題をお届けします

VBA:getElementsByClassNameが働かない #ie11 #438エラー #互換性

Wordpressを使っているサイトの更新状況チェックをVBAで行っています。あるサイトのところになるとエラーが出ます。

実行時エラー '438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。

あるサイトとは、ドメインが同じで、サブドメインを使っている3つのURLで、複数…。
XMLHTTPで取得してみると、ひとまず外形的には取得できているようですが、ターゲットになる部分がどうも取得できていないように見えます。実は、文字化けで英数半角のタグの存在から、なんとなくそのように思いました。

サーバが貧弱なのか…。先だってまでは作業できていた。最近、ひとつのURLに関係しMySQLを別の場所に変更しただけだが…。Wordpressをつかっているのでindex.phpが中身をすべて読み込まないうちに、何らかの理由で完了サイン(数値:4)を返しているのだろうか…。イロイロ考えた(ふりをした)です…。
f:id:PageTAKA:20140925113833j:plain

使っているIEはバージョン11でまず問題ないだろう…(実はこの設定に問題があったのだが…後述)、ということで、ひたすらVBAのスクリプトを書き換えておりました。

すると、HTMLクラス名ではNGだったものが、とあるHTMLタグ名であれば成功するなどばらつきが目につきました。でも、他の同様のWordpress(異なるドメイン)ではVBAが働いてくれます…やはりサーバか…(結果的にはそうではなかった…)

解決:互換表示設定を削除するとOK

解決編です。何のことはありません。記憶以外の設定をIEの該当ドメイン(≒サイトURL)にしていました。

IE→特定URL(適宜お好みの)→IEツール→互換表示設定→追加 により「互換表示に追加したWEBサイト」にそのドメインが追加済みになっていました。
f:id:PageTAKA:20140925114630j:plain
これを他の用件で一時的に追加したことを忘れ、そのままにしていました。
削除であります。
f:id:PageTAKA:20140925114726j:plain

この後、改めてVBAを動かしたら、何事もなかったかのように必要な作業をしてくれたのでした。

ie.Document.body.getElementsByClassName("xxx") が、ieの互換表示設定とバッティングするとは、意外でありました…朝から延々6時間の格闘でありました~ビェーン(泣)。

Wordpress
VBA
438
getElementsByClassName
IE
互換表示設定