タイトル : Re: エクセル動作確認後、VB6でのエラーにつきまして 投稿日 : 2017/03/16(Thu) 21:47 投稿者 : 魔界の仮面弁士
> OS:Windows 7 Microsoft Office Excel 2000 Microsoft Visual Basic 6.0 Office 2000 は Windows XP までの対応なので、 Vista や 7 での動作保証はありません。 そもそもサポート切れの製品ではあるので、どちらにしても 自己責任での利用ということになります。 また、IE のバージョンは 11 になっているでしょうか。 それとも IE8/9/10 のままだったりしますか? > エクセルでは問題なく動作確認できました。 VBA では動作するものの、 VB6 からの制御がうまく行かない、ということでしょうか。 でも、そもそも VB6 には Application.Wait メソッドが存在しないはず…? > 操作手順 > 1.Command1ボタン ⇒ webページ起動 ⇒ フォームチェックボックス表示 このフォームとは、Excel の UserForm ではなく、VB6 の Form のことでしょうか。 > Do While (1) 無限ループが目的なら、正しくは「Do While True」あるいは単に「Do」ですよ。 > '指定したURLのページを表示する > objIE1.Navigate URL:="http://www.vba-ie.net/code/test.html" 今回のページは、IE11 ではEdge モードでレンダリングされるようですね。 Web ページが後方互換であるのか標準準拠であるのかで、 Document 配下のオブジェクトの操作手順が異なる可能性がありますのでご注意下さい。 > Set objIE = objIE1 そもそも変数 objIE は宣言されていないので、 文法エラーになるはずなのですが…。 > 質問 > objIE.Document.Forms("form1")・・・・でエラーにつきまして > ご教示願えますと幸いであります。 ループ中で DoEvents を呼び出しているので(本来は望ましくない)、 ループ中に他のボタンを押せてしまう可能性があります。 その場合、objIE が Nothing (あるいは Empty) という未設定の状態や、 .forms("form1") が ロードされきる前に処理されてしまう可能性もありえます。 (今回の事象がそうだといっているわけでは無いですが) ひとまず Command2_Click の内容を下記のようにすると、何が出力されてきますか? Debug.Print "objIE => "; TypeName(objIE) Debug.Print "objIE.Document =>"; TypeName(objIE.Document) Debug.Print "forms.length="; objIE.Document.forms.length Debug.Print "forms['form1'] is nothing?", objIE.Document.forms("form1") Is Nothing Debug.Print "lcolor =>"; TypeName(objIE.Document.forms("form1").lcolor) Debug.Print "lcolor[0] =>"; TypeName(objIE.Document.forms("form1").lcolor(0)) Debug.Print objIE.Document.forms("form1").lcolor(0).outerHTML > objIE.Document.Forms("form1").lcolor(0).Checked = True > objIE.Document.Forms("form1").lcolor(1).Checked = True > の所で[実行時エラー '424':オブジェクトが必要です。]エラーになります。 > オブジェクトに関して試し記述、検索してみましたが解決できませんでした。 ドキュメントの読み込みを待ち合わせるために、ループ待機を用いないようにしましょう。 かわりに DocumentComplete イベントを使い、それが呼び出された後で objIE.Document の処理を許可するようにします。 Option Explicit Private WithEvents IE As InternetExplorer Private Sub Form_Load() Command2.Enabled = False Command3.Enabled = False Command4.Enabled = False End Sub Public Sub Command1_Click() Set IE = New InternetExplorer IE.Visible = True IE.Navigate "http://www.vba-ie.net/code/test.html" Command4.Enabled = True End Sub Public Sub Command2_Click() IE.Document.Forms("form1").lcolor(0).Checked = True End Sub Public Sub Command3_Click() IE.Document.Forms("form1").lcolor(1).Checked = True End Sub Public Sub Command4_Click() IE.Quit End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If Not IE Is Nothing Then IE.Quit End If End Sub Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant) Command2.Enabled = True Command3.Enabled = True End Sub Private Sub IE_OnQuit() Set IE = Nothing Command2.Enabled = False Command3.Enabled = False Command4.Enabled = False End Sub |