tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。