以前投稿された表題の質問をマネして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.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
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
お探しの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
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
7
IEのダウンロード通知バーVBA制御
Visual Basic(VBA)
-
8
Webページ中の javascript をVBAから実行するには
Visual Basic(VBA)
-
9
VBA URLDownloadToFileについて
Visual Basic(VBA)
-
10
IE操作時、ファイルのダウンロードボタンの押下
Visual Basic(VBA)
-
11
ExcelVBAでリンク先の対象のファイルを保存
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルエラー13型が一致しま...
-
実行時エラー 438になった時の...
-
ExcelVBA Range クラスの Page...
-
エクセルVBAで以下のようなコー...
-
プロシージャ名の取得
-
なぜこんな初歩的なVBAのIf文で...
-
エラー1004 PDFの保存ができま...
-
VBAがブレークモードになっ...
-
ADODB.Streamを使用してUTF-8を...
-
INSERT INTOステートメント構文...
-
Outlook.ApplicationをCreateOb...
-
実行時エラー -'-2147417848
-
【Excel VBA】マクロをボタンに...
-
VB6 エラー:438 (InputBoxに値)
-
Invalid procedure call or arg...
-
Application.ActiveInspectorで...
-
vbaのvlookup関数エラー原因を...
-
EXCEL VBAマクロ中断でデバッグ...
-
VBAのコードがエラーになっ...
-
VBA 別シートのセルから、文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
【Excel VBA】マクロをボタンに...
-
なぜこんな初歩的なVBAのIf文で...
-
VBAでのエラー
-
マクロについて教えてください...
-
ExcelVBA Range クラスの Page...
-
実行時エラー3001「引数が間違...
-
VBS実行時エラー オブジェクト...
-
VBAがブレークモードになっ...
-
OLEDB.NETで接続できない
-
プロシージャ名の取得
-
EXCEL VBAマクロ中断でデバッグ...
-
VBSで変数の宣言はできないので...
-
ADODB.Streamを使用してUTF-8を...
-
実行時エラー -'-2147417848
-
AccessVBAでExcelを起動し、罫...
-
VB6+SQL サーバー 2000 で 実行...
-
Outlook.ApplicationをCreateOb...
-
Application.ActiveInspectorで...
おすすめ情報