• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA パソコンによってコマンドが実行されない)

VBAパソコンでコマンドが実行されない理由と対処方法

このQ&Aのポイント
  • Excel VBAでパソコンによってコマンドが実行されないことがあります。特に、IEを操作してテキストを取得する際に問題が発生します。
  • 問題の原因は、画面の一部の情報を更新する際に、アドレスが更新されずに古い情報が取得されることです。
  • この問題は、Excelの設定やバージョンの違いによるものかもしれません。正常に実行できる方はExcel 2013を使用しており、それ以外のバージョンでは問題が発生します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。 > ... リンクをクリックして画面の一部の情報を更新 ... > ... 画面が更新されアドレスも末尾が変化したにもかかわらず ... ページの遷移が正しく実行され、 URLも変化する、ということでしたら、 Document.URLが更新されるまで、待機を掛けて、同期を図る、 という風にしてみては如何でしょう。 例えば、   h = objDocument.URL   ' "リンクをクリック"する処理   Do     DoEvents ' またはWin32 API のSleep関数   Loop While objDocument.URL = h   DoEvents   ' "その部分からテキストを取得" みたいな。 HTMLDocumentオブジェクトの遷移後の更新(同期)に掛かる時間に差が出る、 という問題の原因については、 必ずしもOSやOfficeのバージョンの違いだけではなくて、 IEのバージョン、通信環境、PCのスペック、等の影響も受けます。 OSについていえば、Win7以前ではHTML5に非対応、 ということが問題になることも、最近話題に上ることが増えています。 勿論、詳しい状況を再現出来なければ、 確定的な断定を下せるものではありませんが。 上記のように、ループをさせながら待機する方法の他に、   Application.Wait DateAdd("s", 3, Now()) 一定の時間決め打ち的に(例では3秒)待機させることで、 済ますことを好む方もいます。 ここまで説明した方法でも、うまく同期がとれない場合は、 原因を特定する為の一時的な処置として、 現在お使いのソースそのまま、に対して、   「遷移後の」"その部分からテキストを取得" 処理の記述の直前行に   Debug.? objDocument.URL と書き込んで、 その行にブレークポイント(F9 キー)を設定してから 実行してみて下さい。 ブレークポイントの行でステップ(デバッグ)モードになって一時停止しますから、 そのまま数秒待って、F8 キーで、1行分だけステップ実行してみて下さい。 イミディエイトウィンドウ(Ctrl + G)に、 「遷移後のURL」が出力された場合は、   単にWaitが足りていないせいで同期がとれていなかった、   という現象を確認したことになります。 「遷移前のURL」が出力された場合は、   遷移後のHTMLDocumentを参照できていなかった、   つまり、オブジェクトの参照ミス、を確認したことになります。   (この場合、先に挙げたループは無限ループになります。    いつまでも処理が終らない時はEsc キーで終了してください。)   IE上に「遷移前のページ」と「遷移後のページ」2つのタブ(またはウィンドウ)   が同時に表示されている筈ですから、   「遷移前のページ」を表示していたタブ(またはウィンドウ)に   「遷移後のページ」を表示するようにNavigete2等の処理を正すか、   「遷移後のページ」を表示するタブ(またはウィンドウ)配下のHTMLDocumentを   オブジェクトとして正しく捉え直すか、のどちらかの対応になります。 以上です。

fisica
質問者

お礼

ありがとうございます。 Debug.によりイミディエイトウィンドウには遷移前のアドレスが表示されました。 なので時間の問題ではないようですが、しかし遷移後のHTMLDocumentを参照できていなかったとするならば、両方のPC(エクセル)で実行できないと思うのですが。 参照できるかどうかは性能の違いではないでしょうから。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBAでメール送信(CDO)

    お世話になります ExcelのVBAでCDOを使用してメールの送信を行おうとしております Excelファイルを配り、Excel内のアンケートに答えていただいた 後にVBAで作成したメール送信ボタンを実行すると、指定先にメール を送るということを考えております ただ、ソース内でSMTP情報と相手のメールアドレスの設定をしないと いけないのですが、この2点をどのようにVBAを使用して設定すれば良いの かが分かりません。そもそも出来るのかもわからないのですが ご存知の方可能なのであれば取得方法をご教授頂きたいと思います

  • VBA 再実行

    エクセルVBAでループによる以下のような定期実行を行っています。 >1時間に一度株価のデータを取りに行きます。 >データ取得後、他のPCに(VBAでソフトを起動させて)アップロードします。 *このアップロードの時に、ソフトが別の処理をしていると起動しません。 VBAで起動はさせるものの、ソフトが実行しないという状態になります。 そこで、一度行った処理を時間をおいて再度実行させたいのです。 できれば、30秒後と1分後に2回再実行するというようにしたいと思っています。 どなたか、お力添え頂けませんか

  • VBAである処理を実行中に・・・

    お世話になります。 ExcelのVBAである処理を実行中に、フォームやその他の方法でもいいのですが、あるフォルダ内の画像ファイルをランダムに表示することは可能でしょうか? ある処理には、外部データの取り込みでwebの情報を取得し、それを関数で加工して、テキスト形式で排出する処理で、Loopが所々に入っています。 この処理には多少時間がかかります。 その間に、画像ファイルの表示をランダムになるべくなら等間隔で表示させたいのですが、出来るものでしょうか? 処理完了までに時間がプラスされるのは覚悟しています。 要するに、バックではある処理がされ、画面上には写真などがプレビューされるようにしたいということです。何か方法をご存知の方、よろしくお願いいたします。

  • VBScriptからEXCELのVBAコマンドを実行するには?

    VBScriptからEXCELのVBAコマンドを実行するにはどうしたら良いでしょう? 例) Set P_OBJEXCEL = CreateObject("Excel.Application") ※ここで EXCEL VBA の Chdir "N:\"を行いたい W_INFILE = P_OBJEXCEL.Application.GetOpenFilename("EXCEL(*csv),*.csv",,"入力ファイル") P_OBJEXCEL.Application.Quit 環境→EXCEL2000+Windows2000+IE6 目的→入力ファイルを取得ため、N:\配下をGetOpenFileNameにて開きたい ※EXCELのデフォルトパスを変更したくないため 何かヒントを御願いします

  • VBAを同時実行

    例えば 監視.xls(外部参照でprivate_culculateを実行,具体的には楽天のRSS) 発注.xls(買い,売り時に出動) があったとしますよね。 とうぜん,発注VBA実行中にも監視VBAのcaluculateの更新は必須ですよね。 しかし,これって同時に走るのでしょうか? 同時に走らせるために, (1)エクセルを分ける___新規エクセルを起動して,監視読み込み。 また新規エクセル起動して発注読み込み。 これなら,Winがマルチタスクである以上,相当CPUに負荷がかからないかぎり 問題なく動くと思うのですが,この場合のVBAのやりとり(コード)は難しいですか? (2)エクセルの中で,両方のファイルを別々に立ち上げる。この場合はVBAが 共用されますが,VBAは同時に動くのでしょうか? やればわかるじゃないかと言われそうですが(^^;) どなたか経験のある方,みえますか?

  • Excel VBAでpptのアクティブスライド

    Excel VBAで、pptのスライドショー実行中のアクティブスライド番号を取得するコードを教えてください。 編集中のスライド番号を取得する方法は、検索して探し出したのですが、 スライドショー実行中での方法がわかりません。 Excelのセルにある値を、pptのテキストボックスに代入するプログラムを作成したいので、pptのVBAではなく、ExcelのVBAで実現させたいです。

  • VBAでマクロ実行中はExcelのマウスやキーボードを使ってセル選択などを無効にしたい

    お世話になります。 VBAで作成しております。 VBAでマクロ実行中は、Excelのマウスやキーボードを使ってセル選択などを無効にしたいのですが、どのようにすればよいでしょうか? ※Application.ScreenUpdatingはただ、画面の更新は止まっているのですが、セル選択などは裏で実行されているみたいで。。。 以上よろしくお願いします。

  • 別のパソコンでこのVBAは動いています。

    問題を生じているVBAですが,私のFMV以外では正常に動きます。 私のFMVから外付けの拡張画面上にエクセルを表示して、コマンドボタンをクリックしてもこのVBAはフリーズして動きません。 ただし、私のFMV本体画面に同じエクセルを表示して,コマンドボタンをクリックすると私のFMVでもこのVBAは問題なく動きます。

  • エクセルVBAでアクセスの更新クエリを実行

    エクセルVBAでアクセスの更新クエリを実行する方法はありますか? アクセスもエクセルも常に起動している状態です。 エクセルからアクセスの更新クエリを実行するコードを教えてください。 アクセスで実行するとしたら Sub test1() DoCmd.OpenQuery "更新クエリ" End Sub というコードになります。 できれば、ADODBを使ったやり方がいいのですが、 エクセルからアクセスのプロシージャーのtest1を呼ぶしかないのでしょうか?

  • エクセルVBA作成時と実行時のエクセルバージョン

    VBAにて工程表の自動作成マクロを作成したのですが、社内で他の方にお試しで利用してもらったところ、途中で処理がエラーとなってしまいました。 予想ですが、エクセルのバージョンに問題があるのではないかと思っています。 ・作成時~エクセル2000 ・エラーが発生したバージョン~エクセル2010 他の2000使用者にも実行してもらったところ、問題なく処理が行われました。 社内には2000と2010が混在しているので、どちらでも使用できるようにしたいのですが、解決方法はありますでしょうか? ちなみに2010で実行したら、カレンダーを作成している最中に「応答なし」が表示され、画面上の処理がフリーズします。 その後に、テキストボックスを指定して、特定のセルに移動させる処理があるのですが、指定したテキストボックスが存在しないというエラーが返ってきて、処理が中断します。(画面のカレンダー作成は正常に終わってました) エラーとなる前にも他のテキストボックスを移動させているのですが、そちらは正常に処理されています。 2010でマクロ実行前に問題となっているテキストボックスを選択して名前を確認しましたが、間違ってはいませんでした。 分かり難い説明で恐縮ですが、何らかの解決方法をご提示していただけると幸いです。

専門家に質問してみよう