以前投稿された表題の質問をマネしてVBAから通知バーの制御を試みたらエラーになりました。
原因がわからず困っています。どこに問題があるか教えて頂けないでしょうか?
http://okwave.jp/qa/q8121989.html
■実行エラー91
「オブジェクト変数またはWithブロック変数が設定されていません」
■エラー停止箇所
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
■補足
・参照設定はしています。
・下記2点に示すようにお尻の数字を削除しています。(他のエラーがでてしまうため)
Dim o As IUIAutomation2→IUIAutomation
Set o = New CUIAutomation8→CUIAutomation
---【http://okwave.jp/qa/q8121989.html】------------------------------------------------------
Option Explicit
'参照設定 UIAutomationClient
'C:\Windows\System32\UIAutomationCore.dll
Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Sub hoge2()
Const url As String = ""
Dim ie As Object
Set ie = CreateObject("Shell.Application").Windows.findwindowSW(url, Empty, 1, 0, 1)
If ie Is Nothing Then Exit Sub
Dim o As IUIAutomation2
Dim e As IUIAutomationElement
Set o = New CUIAutomation8
Dim h As LongPtr
h = ie.Hwnd
h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
If h = 0 Then Exit Sub
Set e = o.ElementFromHandle(ByVal h)
Dim iCnd As IUIAutomationCondition
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "保存")
Dim Button As IUIAutomationElement
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke
DoEvents
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "通知バーのテキスト")
Dim iElemFound As IUIAutomationElement
Set iElemFound = e.FindFirst(TreeScope_Subtree, iCnd)
Dim iValuePattern As IUIAutomationValuePattern
Set iValuePattern = iElemFound.GetCurrentPattern(UIA_ValuePatternId)
Do
DoEvents
If iValuePattern.CurrentValue Like "*のダウンロードが完了しました。*" Then
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "閉じる")
Set iElemFound = e.FindFirst(TreeScope_Subtree, iCnd)
Set InvokePattern = iElemFound.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke
Exit Do
End If
Loop
End Sub
No.2ベストアンサー
- 回答日時:
そのコードは通知バーが完全に表示されている状態での実行を期待しています。
なので、ループで参照がセット出来るまで、待ち合わせてみるとか。
Dim Button As IUIAutomationElement
Dim InvokePattern As IUIAutomationInvokePattern
While Not InvokePattern Is Nothing
DoEvents
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
Wend
InvokePattern.Invoke
No.1
- 回答日時:
こんにちは。
こういうコードは、あくまでも「実情に合わせて」ということでしょうから、こちらがこれが正解という話でもありませんし、実際に、Vector で動かしてみましたが、支障はないようです。
ただし、「実情に合わせて」ですから、それなりに、
Dim o As CUIAutomation8 'IUIAutomation3
Dim e As IUIAutomationElement
Set o = New CUIAutomation8 'New CUIAutomation8
Dim oButton As IUIAutomationElement 'oは、object の'o'
Button 自体は、予約語ではありませんが、VBAの名称には違いないので、それは嫌いました。
それで、起動してみました。ダウンロードまでいけます。
この種の質問は、何度も見ていますが、私自身は、このようなハードなコードは書きませんし、正直なところ、よく分かりません。オブジェクトとして取得しているかどうかぐらいの判定なので、コメントしづらい部分があります。
ちなみに、私の環境
OS Windows 10, Excel 2013, 32bit, IE11+Adblock Plus(環境が変わるらしい)
ありがとうございます。
私もこのコードの詳細はわからないため、学習するには短時間では無理なのでおまじないで機能すればよいというレベルです。
が、機能しないので困っています。。
私の環境は、下記のとおりでした。
■OS Windows 7 Professional, Excel 2010, 64bit, IE11
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBA IE ダウンロード ダイアログ制御(名前を付けて保存)
Visual Basic(VBA)
-
vbaでIEの名前を付けて保存(A)をしたい
Microsoft ASP
-
VBA IE通知バーの制御 バー内のボタン 開く/保存/キャンセルを押す
Visual Basic(VBA)
-
-
4
ダウンロードダイアログをVBAから操作するには?
Visual Basic(VBA)
-
5
VBA IE操作でダイアログ表示後、ファイルを開くボタンが押下できない
Visual Basic(VBA)
-
6
IE操作時、ファイルのダウンロードボタンの押下
Visual Basic(VBA)
-
7
IEのダウンロード通知バーVBA制御
Visual Basic(VBA)
-
8
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
9
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
10
URLDownloadToFile でダウンロード不可
Visual Basic(VBA)
-
11
IE9のダウンロード通知バーで名前を付けて保存
Excel(エクセル)
-
12
VBA ログイン後csvファイルをダウンロードする
Excel(エクセル)
-
13
VBA URLDownloadToFileについて
Visual Basic(VBA)
-
14
ExcelVBAでリンク先の対象のファイルを保存
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エラーDlg「An invalid argumen...
-
なぜこんな初歩的なVBAのIf文で...
-
INSERT INTOステートメント構文...
-
VBAがブレークモードになっ...
-
実行時エラー 438になった時の...
-
excel vbaでレート取得について...
-
マクロについて教えてください...
-
初歩的なことだとはおもいます...
-
「アプリケーション定義または...
-
VB6.0からEXCELのセル内文字列...
-
VBA:「中断モードでは入力でき...
-
VBSで変数の宣言はできないので...
-
VBA IEの操作 ClassNameでエラ...
-
Live Update
-
エクセルVBA、フリーフォームで...
-
Mid関数(2)
-
OLEDB.NETで接続できない
-
VBAにて計算式をセルへ代入でき...
-
Excelで下記のようにマクロを作...
-
VBAのChrome操作のエラーについ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
VBAがブレークモードになっ...
-
なぜこんな初歩的なVBAのIf文で...
-
【Excel VBA】マクロをボタンに...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
実行時エラー3001「引数が間違...
-
ExcelVBA Range クラスの Page...
-
ExcelVBAで、ユーザー定義型は...
-
EXCEL VBAマクロ中断でデバッグ...
-
マクロについて教えてください...
-
プロシージャ名の取得
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
Outlook.ApplicationをCreateOb...
-
VBAでのエラー
-
なぜエラーになるのでしょうか...
-
VBAのコードがエラーになっ...
-
[Delphi] データセットは閉じて...
おすすめ情報