|
▼Wz さん:
こんばんは。
>現在ネット上のホームページのボタンを押して、データを保存するマクロを作成しています。
>
>このボタンを押した後ですが、データ量が多いため保存のダイアログボックスが出るまで少し時間がかかります。
>しかもデータ量が毎回一定しないので、ダイアログボックスが出る時間も一定しません。
>ここで、ダイアログボックスが出るまでマクロを待機させ、出たら再開させるようなことはできるのでしょうか?
>(IE上のダイアログボックスの表示が出たのを確認できるのかどうか)
>
>ちなみに現在はApplication.Waitで長めに設定して待機しています。
>(しかしこれでは結構な時間待たされてしまいます)
まず、上記の動作を起こす例としてのHPやダイアログボックスを表示するまでのコードの提示をどうしてされないのですか?
そこまでのコードの提示が見ている方にとって、参考になるコードかもしれないのに
・・・。
さらに回答投稿が付いた場合、コードがあれば投稿もしやすいし、
この投稿を見ている方が問題点から解決までの過程を再現することができます。
質問者がそういう再現性を怠ると・・・。
まず、上記の動作をするHtmの説明からしなくてはなりません。
(こういうのって、探すとないんですよね!!)
NotePadなどのテキストエディタに以下のコード
<html>
<head>
<title>Sample</title>
<script language="VBScript">
<!--
Option Explicit
Sub inputdata()
dim indata
dim idx,jdx
for idx=1 to 1000000
next
indata=Inputbox("input data")
if indata<>false then
document.getElementById("dataArea").innerText=indata
end if
End Sub
-->
</script>
</head>
<body>
<button id="myButton" onclick="inputdata()">ボタン</button>
<br>
<br>
<div id="dataArea">出力エリア</div>
</body>
</html>
をコピーして適当なフォルダにsample.htmとして作成してください。
・実行するとボタンと「出力エリア」というメッセージが表示されます
・ボタンをクリックしてください。メッセージを要求するダイアログが表示されます。
・適当に文字を入力し、OKボタンをクリックすると、入力した内容が「出力エリア」
という箇所に上書きされます。
まっ、これだけのことをするhtmです。
中のVbscriptがネストされていませんが、コピー時のエラーを避けるために敢えて
しました。おのおのでネストはしてください。
Excel側です。
新規ブックにて、VBEにて、参照設定を行います。
「ツール」---「参照設定」にて、
「Microsoft HTML Object Library」と
「Microsoft Internet Controls」にチェックを入れてください。
Thisworkbookのモジュールに
'==========================================================
Public WithEvents idoc As HTMLDocument
'==========================================================
Private Sub idoc_onfocusout()
ffg = True
CreateObject("WScript.Shell").SendKeys "ichinose{ENTER}"
End Sub
標準モジュールに
'==========================================================
Public ffg As Boolean
Dim ie As InternetExplorer
'==========================================================
Sub main()
With ThisWorkbook
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.navigate ThisWorkbook.Path & "\sample.htm"
Do While .Busy = True Or .readyState <> 4
DoEvents
Loop
ffg = False
Set ThisWorkbook.idoc = .document
On Error Resume Next
With ThisWorkbook
.idoc.getElementById("myButton").Click
Do While ffg = False
DoEvents
Loop
Set .idoc = Nothing
End With
CreateObject("WScript.Shell").Popup "確認"
On Error GoTo 0
End With
End With
ie.Quit
Set ie = Nothing
End Sub
sample.htmと同じフォルダに保存してください。
保存後に、mainを実行してください。
sample.htmを表示後、ボタンをクリックしています。
Inputbox表示後に「ichinose」と入力しています。
結果を確認してこの方法がWz さんの抱えている問題に対応できるか検討してみてください。
というように投稿する私もあまり確信が持てない方法なのにこんなに
記述しなければなりません。
本来は、この8割方の記述は、Wz さんにして頂くことだと思いますよ!!
|
|