以前投稿された表題の質問をマネして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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
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のダウンロード通知バーVBA制御
Visual Basic(VBA)
-
7
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
8
IE操作時、ファイルのダウンロードボタンの押下
Visual Basic(VBA)
-
9
Webページ中の javascript をVBAから実行するには
Visual Basic(VBA)
-
10
VBA URLDownloadToFileについて
Visual Basic(VBA)
-
11
Alt+P,Alt+NをPostmessageで送るには
Visual Basic(VBA)
-
12
VBS作動中のブラウザのmsgboxについて
Visual Basic(VBA)
-
13
IE9のダウンロード通知バーで名前を付けて保存
Excel(エクセル)
-
14
ExcelVBAでリンク先の対象のファイルを保存
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実行時エラー 438になった時の...
-
【Excel VBA】マクロをボタンに...
-
エクセルエラー13型が一致しま...
-
なぜこんな初歩的なVBAのIf文で...
-
マクロについて教えてください...
-
OLEDB.NETで接続できない
-
VBAでのエラー
-
VBで構造体を使うさ際の64k...
-
[Delphi] データセットは閉じて...
-
VB6+SQL サーバー 2000 で 実行...
-
職場から目的地までの距離集計
-
エクセルVBAで以下のようなコー...
-
VBAがブレークモードになっ...
-
Outlook.ApplicationをCreateOb...
-
EXCEL/VBAで、自分のPCだけエラ...
-
VBS実行時エラー オブジェクト...
-
EXCEL VBAマクロ中断でデバッグ...
-
【エクセル】ハイパーリンク先...
-
VBA リボンののリカバリーでオ...
-
SQL文をVBAで流すと「型...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
マクロについて教えてください...
-
実行時エラー3001「引数が間違...
-
VBAがブレークモードになっ...
-
ExcelVBA Range クラスの Page...
-
VBSで変数の宣言はできないので...
-
VBS実行時エラー オブジェクト...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
ADODB.Streamを使用してUTF-8を...
-
VBAでのエラー
-
実行時エラー48発生時のDLL特定...
-
Outlook.ApplicationをCreateOb...
-
実行時エラー -'-2147417848
-
VB6+SQL サーバー 2000 で 実行...
-
「コンパイルエラー:プロシー...
おすすめ情報