IE10の通知バーの保存ボタンをVBAで制御したい

このQ&Aのポイント
  • IE10で表示される通知バーの保存ボタンをAccess2010VBAで制御したい方法について質問です。
  • Const urlを定数にするとVBAでIE通知バーのボタンを制御できますが、変数にすると認識されません。
  • また、urlを動的に変化させたい場合にはどのようにすればいいのでしょうか。
回答を見る
  • ベストアンサー

IE10の通知バーの保存ボタンをVBAで制御したい

IE10でダウンロードの際に表示される通知バーの保存ボタンをAccess2010VBAで制御したいと考えており、 http://okwave.jp/qa/q8121989.html を参考にさせていただきました。 この際、下記コードのように Const url As String = "ttp://www.xxx.com"と、 urlを定数にするとVBAでIE通知バーのボタンを制御できますが、 Dim url As String url = "ttp://www.xxx.com"と urlを変数にして、リンク先を記述するとIEのウィンドウを認識してくれません。 なぜ変数にすると認識されないのか理解できず、質問させていただきました。 また、urlを動的に変化させたいのですが、なにかいい方法はないでしょうか。 どなたかご教示のほど、よろしくお願いいたします。 OS Windows7 32bit Access2010です。 以下、コードです。 Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Sub hoge2() Const url As String = "ttp://www.xxx.com" Dim IE As Object Set IE = CreateObject("Shell.Application").Windows.FindWindowSW(url, Empty, 1, 0, 1) If IE Is Nothing Then msgbox "IEがありません" Exit Sub End If Dim o As IUIAutomation Dim e As IUIAutomationElement Set o = New CUIAutomation 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

質問者が選んだベストアンサー

  • ベストアンサー
  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.3

> # 参照設定のコードに書き換える手もあります。 こちらは訂正させてください。

参考URL:
http://www.moug.net/faq/viewtopic.php?t=67744
kinkin123
質問者

お礼

kumatti1さん、ありがとうございます。 お返事が遅くなり、また、勝手にコードを拝借しましてすいません。 変数をVariant型にすることで解決しました。 ほんと助かりました。ありがとうございます。

その他の回答 (2)

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.2

えーと、そのコードを書いた本人です。 CStrでもCVarでもいいのでキャストしてください。 # 参照設定のコードに書き換える手もあります。

回答No.1

こんばんは。 変数 url に設定する文字列の先頭に 'h' が足りない、単なるスペルミスのように思えますが・・・・。

kinkin123
質問者

お礼

ご指摘ありがとうございます。コードに記載してあるURLは例として記載していますが、先頭に'h'を付け足してしまうと、ハイパーリンクで表示されてしまうので、あえて外しました。

関連するQ&A

  • IE9のダウンロード通知バーで名前を付けて保存

    IE9のダウンロード通知バーをVBAから制御する方法について、下記のQ&Aでkumatti1さんの解にあるコードでは「保存」をさせる動作となっています。これを「名前に付けて保存」させることはできないでしょうか。よろしくお願いします。 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 --------------------------------------------------------------------------------

  • IE11のダウンロード通知バーのVBからの操作

    IE11のダウンロード通知バーをExcel VBAから操作する為、 http://okwave.jp/qa/q8121989.html を参考にさせて頂きました。 「保存」のボタンを探す条件がまずい為か、IUIAutomationElementのButtonを参照する所で、Buttonが見つかっていない為、エラーになります。 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) 〈エラーメッセージ〉 実行時エラー '91': オブジェクト変数またはwithブロック変数が設定されていません 〈動作環境〉 OS Windows 10 64bit Excel2013 どなたか、解決方法のアドバイスを宜しくお願いします。

  • VBAでIEの「ファイルのダウンロード」ダイアログを制御

    VBではなくVBAにて、IEの「ファイルのダウンロード」ダイアログを制御したいと思い、過去の同様の質問等を参考に下記のソースを作成して動かしてみましたが、「ファイルのダウンロード」画面で、「保存(S)」ボタンのハンドルを取得するところまではできましたが、sendMessageでクリックができず、次に進むことが出来ませんでした。 手動で「保存(S)」ボタンを押下して、強制的に「名前を付けて保存」画面に遷移させた後プログラムを再開すると、同画面の「保存(S)」ボタンのクリックはできました。 同じロジックで「名前を付けて保存」画面の「保存(S)」は動くのに、「ファイルのダウンロード」画面の「保存(S)」が動かないのはなぜでしょうか。 どなたかおわかりになる方がいらっしゃいましたら、ご回答をお願いします。 ***使用環境*** OS: XP pro IE: 6 OFFICE:2002 ***以下作成したソース(エラー制御は省略)*** Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long Private Sub Test() Dim ret1 As Long Dim ret2 As Long Const WM_COMMAND As Long = &H111 ret1 = FindWindow("#32770", "ファイルのダウンロード") ret2 = FindWindowEx(ret1, 0, "Button", "保存(&S)") Call SendMessage(ret1, WM_COMMAND, GetDlgCtrlID(ret2), ByVal ret2) ret1 = FindWindow("#32770", "名前を付けて保存") ret2 = FindWindowEx(ret1, 0, "Button", "保存(&S)") Call SendMessage(ret1, WM_COMMAND, GetDlgCtrlID(ret2), ByVal ret2) End Sub ***以上ソース終わり***

  • Excel VBAでIE「ダウンロードの表示」生成

     Internet Explorer で、「ダウンロードの表示」のDialogウィンドウをショートカット(Ctrl + J )を使って表示させたいのですが、Excel VBA で以下のコードで試したのですが、うまくいきません。どういうコードを書いたらよいのでしょうか?アクセスキーを使った方法では、「ツール」で N  に該当するのが「ダウンロードの表示」と「Send To Note」の2つあって起動できません。  よろしくお願いします。 Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public Const VK_CONTROL = &H11 Public Const VK_J = &H4A Public Const navOpenInNewTab = &H800 Sub Test() Dim objIE As Object Dim hWnd_objIE As Long Dim Ret As Long 'IE起動 Set objIE= CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.google.co.jp/", navOpenInNewTab Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop 'objIEのhWnd取得 hWnd_objIE = objIE.hwnd 'IEの親ウィンドウのhWnd取得する 'hWnd_objIE のウィンドウにPostMessageする Ret = PostMessage(hWnd_objIE, WM_KEYDOWN, VK_CONTROL, 0) Ret = PostMessage(hWnd_objIE, WM_KEYDOWN, VK_J, 0) Sleep 100 Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_CONTROL, 0) Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_J, 0) End Sub

  • Excelに対応してコンボボックスを選択するマクロ

    Excelのコンボボックスの表記と同じ表記のものをゆっくりムービーメーカーという別アプリの指定したコンボボックスから選ぶVBAマクロを開発したいです。カスタムと書かれたコンボボックスを動かしたいです。ですが、他にもclassnameやAoutmationIDが同じコンボボックスがあります。その中で自分の指定したコンボボックスを動かす方法も教えて頂きたいです。エクセルの「セリフ」sheetのE列にコンボボックスがあり、コンボボックスの中身は「表情」sheetのA列の表記(例魔理沙笑う) Excelのコンボボックスの表記と同じ表記のものをゆっくりムービーメーカーという別アプリの指定したコンボボックスから選択するVBAマクロを開発したいです。見づらいですが画像の右端の真ん中くらいにあるカスタムと書かれたコンボボックスを動かしたいです。ですが、他にもclassnameやAoutmationIDが同じコンボボックスがあります。その中で自分の指定したコンボボックスを動かす方法も教えて頂きたいです。エクセルの「セリフ」sheetのE列にコンボボックスがあり、コンボボックスの中身は「表情」sheetのA列の表記(例:魔理沙笑う)です。ゆっくりムービーメーカーのコンボボックスにも「表情」sheetのA列の表記(例:魔理沙笑う)と同じものが複数存在します。私はゆっくりムービーメーカーのコンボボックスの中からExcelのコンボボックスの表記と同じ表記のものを選択するVBAマクロを開発したいです。ご指導よろしくお願いします。下のマクロを改良したいですが、あくまで前のバージョンかつ私が作りたいマクロと似ていますが違うものなので参考程度にお願いします。 これと全く違うスクリプトでも構いません。よろしくお願いいたします。 Private Sub zputTachieParam(Param() As Variant) Dim i, j, k, row_blank, f_hetitem As Integer Dim x_char As String Dim tmp, x_last_item As Variant Dim elmYukkuri_tachie As IUIAutomationElement 'RegExpオブジェクトの作成 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") '正規表現の指定 With reg .Pattern = "[^0-9]" 'パターンを指定 .IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True) .Global = True '文字列全体を検索するか(True)、しないか(False) End With hWnd = FindWindowA(vbNullString, C_アプリ名) Set uiAuto = New CUIAutomation Set elmYukkuri = uiAuto.ElementFromHandle(ByVal hWnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ItemEditorView") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ScrollViewer") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "Editor") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_NamePropertyId, "立ち絵") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Dim elms_ComboBox As IUIAutomationElementArray Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ComboBox") Set elms_ComboBox = elmYukkuri.FindAll(TreeScope_Children, iCnd) Dim ptnVal As IUIAutomationSelectionItemPattern f_hetitem = 0 x_last_item = "" For j = 0 To elms_ComboBox.Length - 1 tmp = Split(elms_ComboBox.GetElement(j).CurrentHelpText, "\") If UBound(tmp) > 0 Then '選択されてるコンボボックス '現状の設定とパラメータ値を比較 If Param(j) <> Int(Replace(tmp(UBound(tmp)), ".png", "")) Then elms_ComboBox.GetElement(j).SetFocus 'ENDキーで最後の選択肢に持っていく wshSendKeys "{END}", True f_hetitem = 0 For k = 0 To 200 elms_ComboBox.GetElement(j).SetFocus 'Debug.Print "1> " & elms_ComboBox.GetElement(j).CurrentHelpText tmp = Split(elms_ComboBox.GetElement(j).CurrentHelpText, "\") If UBound(tmp) > 0 Then 'Debug.Print "2> " & reg.Replace(tmp(UBound(tmp)), "") If Param(j) = Int("0" & reg.Replace(tmp(UBound(tmp)), "")) Then f_hetitem = 1 Exit For End If wshSendKeys "{UP}", True Else 'Debug.Print "nohit!" wshSendKeys "{DOWN}", True Exit For End If Next End If End If Next Sleep 100 End Sub

  • VBA ユーザーフォームの×ボタン制御の不具合

    PowerPoint VBAで複数のユーザーフォームからなるVBAマクロを作成しました。 フォーム内の「次へ」「前へ」ボタンでのみ、マクロの実行制御をしているので、途中で右上の×を押されると、想定外エラーが発生します。 そこで、一番下に貼りつけたようなコードを全てのフォームに挿入することで、右上の×が表示されないようにしました。 あくまでフォームにしかコードは埋め込んでいません。 (標準モジュール、クラスには入ってません) ですが、極稀に、「フォームの右上×」ではなく、「PowerPointの右上×」が非表示になってしまう現象が発生します。 いろいろやるうちに再現はするのですが、厳密な再現手順がよくわかりません。 状況と下記ソースから、どこらへんに原因がありそうかアドバイス頂けないでしょうか? 全コードは出せない部分が多いのですが、アドバイスにあたり必要なコードがあれば、別途貼らせて頂きます。 Private Const GWL_STYLE = (-16) Private Const WS_SYSMENU = &H80000 ' ウィンドウに関する情報を返す Private Declare Function GetWindowLong Lib "USER32.dll" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long ' ウィンドウの属性を変更 Private Declare Function SetWindowLong Lib "USER32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' Activeなウィンドウのハンドルを取得 Private Declare Function GetActiveWindow Lib "USER32.dll" () As Long ' メニューバーを再描画 Private Declare Function DrawMenuBar Lib "USER32.dll" (ByVal hWnd As Long) As Long ' フォームアクティブ時処理 Private Sub UserForm_Activate() Dim hWnd As Long Dim Wnd_STYLE As Long hWnd = GetActiveWindow() Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE) Wnd_STYLE = Wnd_STYLE And (Not WS_SYSMENU) SetWindowLong hWnd, GWL_STYLE, Wnd_STYLE DrawMenuBar hWnd End Sub

  • VBA ウィンドウの列挙 Win32 API

    http://d.hatena.ne.jp/cartooh/20090618 上記のページに記載されているVBAです。 動作は確認できたのですが、どのような処理の流れとなっているのかがわかりません。 どなたかコメントを付けていただけないでしょうか。 よろしくお願いいたします。 Option Explicit Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal cnm As String, ByVal cap As String) As Long Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, _ ByVal cch As Long) As Long Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, _ ByVal nMaxCount As Long) As Long Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, _ ByVal lParam As Long) As Long Declare Function IsWindow Lib "user32" (ByVal hWnd As Long) As Long Const INDENT_KEY = "INDENT" Public Function EnumChildWindowsProc(ByVal hWnd As Long, ByVal lParam As Object) As Long EnumChildWindowsProc = EnumWindowsProc(hWnd, lParam) End Function Public Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Object) As Long EnumWindowsProc = True If IsWindowVisible(hWnd) = 0 Then Exit Function End If Dim strClassName As String ' * 255 Dim strCaption As String ' * 255 strClassName = String(255, vbNullChar) strCaption = String(255, vbNullChar) GetWindowText hWnd, strCaption, Len(strCaption) GetClassName hWnd, strClassName, Len(strClassName) strCaption = RTrim(left(strCaption, InStr(1, strCaption, vbNullChar) - 1)) strClassName = RTrim(left(strClassName, InStr(1, strClassName, vbNullChar) - 1)) ActiveCell.Cells(1, 1).Value = Hex(hWnd) ActiveCell.Cells(1, 2).Value = IsWindowVisible(hWnd) ActiveCell.Cells(1, 3).Value = strCaption ActiveCell.Cells(1, 4).Value = strClassName ActiveCell.Cells(2, 2).Activate Dim c As Collection Set c = lParam Dim indent As Long indent = c(INDENT_KEY) c.Add String(indent * 2, " ") & Hex(hWnd) & " " & strCaption & " " & strClassName, before:=c.Count indent = indent + 1 c.Remove INDENT_KEY c.Add indent, INDENT_KEY Call EnumChildWindows(hWnd, AddressOf EnumChildWindowsProc, ObjPtr(c)) indent = c(INDENT_KEY) - 1 c.Remove INDENT_KEY c.Add indent, INDENT_KEY ActiveCell.Cells(1, 0).Activate End Function Sub hoge() Application.ScreenUpdating = False Dim sht As Worksheet Set sht = ThisWorkbook.Worksheets(1) sht.UsedRange.Clear sht.Activate sht.Range("A1").Activate Dim c As Collection Set c = New Collection c.Add 0, INDENT_KEY Dim ret As Long ret = EnumWindows(AddressOf EnumWindowsProc, ObjPtr(c)) c.Remove INDENT_KEY Set sht = ThisWorkbook.Worksheets(2) sht.UsedRange.Clear sht.Activate sht.Range("A1").Activate Dim o As Variant For Each o In c ActiveCell.Value = o ActiveCell.Cells(2, 1).Activate Next Application.ScreenUpdating = True End Sub

  • VBA IE制御 テーブルコピー

    下記コードは、http://www.ken3.org/vba/backno/vba177.htmlからお借りしているものです。 (一部ヤフーのデザインに変更があったため、変更しています。) 実行してみると、本来7行4列である表が、1行目にすべて入り込んでしまいます。 見直してみても、間違ってはいないように見えるのですが、原因はどこかわかりますでしょうか? よろしくお願いいたします。 Sub ie_make_table_test() Dim objIE As Object 'IEオブジェクト参照用 Dim objTAG As Object 'TAGのオブジェクトを代入 Dim strURL As String 'URLの文字列 Dim strTAGNAME As String 'タグの名前保存用 Dim y As Integer Dim x As Integer Dim objTableItem As Object 'TABLE内のITEM検索用 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '文字列で指定したURLに飛ぶ strURL = "http://table.yahoo.co.jp/" 'ベースURL strURL = strURL & "t?c=2004&a=10&b=4&f=2005&d=10" '期間 strURL = strURL & "&e=14&g=d&s=4753.t&y=0&z=4753.t" '銘柄コードなど??? objIE.Navigate strURL 'URLへ '表示終了まで待つ Do While objIE.Busy = True DoEvents Loop '新規ブックを追加する Workbooks.Add 'No.177で修正ブックを新規に1つ作る '.document から.getElementsByTagName("TABLE")でオブジェクトを取り出す For Each objTAG In objIE.document.getElementsByTagName("TABLE") 'TABLEの中、テキスト文字で[値上がり率]があるか、子TABLEは無しかチェック If InStr(objTAG.InnerText, "値上がり率") > 0 _ And InStr(objTAG.InnerHTML, "TABLE") = 0 Then '値上がり率在り、TABLE無しか '新規シートを追加する Sheets.Add 'No.177で修正、新規シートを作成する 'カウンタの初期化 y = 0 '行カウンタ 'テーブル内のITEMでループする For Each objTableItem In objTAG.all strTAGNAME = objTableItem.tagName 'テーブル、タグ名 If strTAGNAME = "TR" Then y = y + 1 '行カウンタを+1 x = 1 '列カウンタを1(左端にする) End If '↓No.177でTHもセットするように変更 TD or THの時 If strTAGNAME = "TD" Or strTAGNAME = "TH" Then 'テキストデータをセットする Cells(y, x) = objTableItem.InnerText x = x + 1 '列カウンタを+1(次にする) End If Next End If Next End Sub

  • Web上のチェックボックスにフォーカスをあてたいのですが

    エクセル2003のVBAで困っています。 IE6のグーグルで検索したWebページ上のチェックボックスにカーソルをあてたいのですが、以下のコードではチェックボックスを取得できません。 別のページで動かしてみたのですが、 ちゃんと動くページもありました。 確実にWebページ上のチェックボックスをひろいたいのですが、 良い方法はないでしょうか。 どなたかご存知の方、アドバイスをよろしくお願いします。 ------------------------------------------------------ 'SetForegroundWindowの定義 Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long 'FindWindow関数の定義 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long '************************************************************ 'IEのウィンドウハンドルを取得 '************************************************************ Dim hwnd As Long hwnd = FindWindow("IEFrame", vbNullString) '見つからなければ戻り値0 '************************************************************ 'ウィンドウを前面に表示する '************************************************************ If hwnd = 0 Then MsgBox "IEが起動していません" Exit Sub End If SetForegroundWindow hwnd '============================================= 'チェックボックス検索開始 '============================================= Dim i as Integer Dim Browser1 As Object Dim elm As Object Dim objShell As Object Dim ShWins As Object Dim IE As Object Const READYSTATE_COMPLETE As Long = 4 'IEオブジェクト状態(4=読み込み完了) Set objShell = CreateObject("Shell.Application") Set ShWins = objShell.Windows() For Each IE In ShWins Set Browser1 = IE Exit For Next '次の画面が表示されるまで待機 While Browser1.ReadyState <> READYSTATE_COMPLETE While Browser1.Busy = True DoEvents Wend Wend Set elm = Browser1.document.getElementsByTagName("INPUT") For i = 0 To elm.Length - 1 'If (elm(i).Name = "q") Then elm(i).Focus: Exit For MsgBox elm(i).Type Next i ------------------------------------------------------

  • VBAでアクティブなIEを操作

    現在VBAでIEを操作しようとしております。 URLやタイトルから指定してIEを操作することはできるようになりました。 今度はデスクトップの最善面にあるIEを操作したいと考えています。 下記を参考にして考えていますが、Hwndプロパティが読み取り専用らしく ハンドルから操作するIEを指定することができません。 http://okwave.jp/qa/q2147057.html そもそもVBAで可能なのかについても よく分からないのですが、恐れ入りますが代案を含め方法があれば教えてください。 ひとまず、煮詰まっていますが、 今残っているコードを載せておきます。 Public Declare Function GetForegroundWindow Lib "user32" () As Long ’--------------- Sub shell_test() Dim objie As Object Dim a as long Set obj = CreateObject("shell.application") a = GetForegroundWindow Debug.Print a End Sub

専門家に質問してみよう