VBAで objIE を使用して Webページ中の javascript を実行したいのですが、
onclick="~~" の記述がないケースがあり困っております。
例えば以下のような記述です。

<a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>

onclick の記述がない上記のようなケースでは、javascript の呼び出しはどのようにすればよいのでしょうか?
不可能でしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

ここを読んでみればよいのですが、だらだらと文章が長いですね。

^^;
http://www.ken3.org/vba/backno/vba170.html
この内容のまとめは、この後でします。もし、ダメだったら、こちらも読んでください。

>onclick="~~" の記述がないケースがあり困っております。

最初に、ストレートな回答ではありませんが、私の場合、いくつかの方法を試しています。

>a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>
この場合は、id がありますから、確実のオブジェクトとして取得できますから、まず最初に、ダメ元で、
id名.Click を一度試してみます。もしくは、この行の上部のコードのオブジェクトのClass名のオブジェクトのひとつから、ヒットさせようとします。

そこでダメなら、ということで、ken3の内容に入るのですが、この著者の結論(正解)は、

ご質問に沿って書くと
For i =0 To objIE.Document.links.Length -1
If objIE.Document.links(i).href ="javascript:;" Then '文字の比較は、大文字・小文字がある
   objIE.Document.Links(i).Click
End if
Next i

ということになっています。私は、このコードは少し古臭く感じます。

ここで、ken3 の所では、Testサイトを用意してくれているので、試してみましたが、ダイレクトでサイトがとれている限りは、やはり、

Testサイト:http://www.ken3.org/vba/test170f.html

 objIE.Navigate "javascript:xxxxx;"

が利くことが分かりました。ただし、実際は、ここで時間待ちをしなくてはならないでしょう。
解説は、フレームからですので、うまく行かなかったようです。
    • good
    • 1
この回答へのお礼

助かりました

どこのどなたか存じませんが、貴重な時間を割いてご親切にありがとうございます。
結論から言いますと、「id名.Click」の2段階指定でうまくいきました!

初め、目的とする箇所の id名 でいきなりクリックしたところ反応がなく、
教えて頂いた Links(i) のループで id名 を確認したところ、なぜかその id名 が見当たりませんでした。
DOM Explorer では id が見えているのに、VBAでHTMLソースを確認すると id が存在しないため、
すっかり訳が分からなくなってしまいました。
しかし、そのクリックしたい箇所がドロップダウンリストの中の項目だったので、まずドロップダウンリストの id名 をクリックし、
その次に目的とする項目の id名 をクリックしたところ、見事動作しました!

2日もかけて実現できず諦めかけていたのですが、思い切って質問してみて良かったです。
ドロップダウンリストの中の項目だったというのがポイントだったと思うのですが、
頭が鈍くそれに気付かず、質問の際も説明不足で申し訳ありませんでした。
教えて頂いたすべてのことが、問題の解決にとても役立ち、勉強になりました。
本当にありがとうございました。

お礼日時:2015/08/11 21:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QVBAでオブジェクト変数にsetしたシートがactiveかどうかを調べるには?

標準モジュールの冒頭でワークシート用のオブジェクト変数を確保し、
あるタイミングで、あるシートをそのオブジェクト変数にSetしています。

で、そのシートに値をセットするときに、そのシートがActiveだった場合だけやりたい処理があるのですが、Setしてあるオブジェクト変数だけを見てそのシートがActiveか否かを判断する方法って、あるのでしょうか。

コード例)
Private oSheetA as Worksheet

Sub SetSheet(sName as String)
  Set oSheetA = worksheets(sName)
End Sub

Sub SetValue(nValue as integer)
  xxxxxx ←ここでoSheetAがActiveならやりたいことがある。
  oSheetA.Cells(nRow, nCol) = cValue
End Sub

具体的には、複数のBookを開いている状態で、Activeシートが何であるかはオペレータの操作次第なので固定化できない状態で、SetValueが呼び出されたとき、oSheetAがActiveだったら、値をセットするセルが見えるようにセルをActivateかスクロールさせたいんです。

標準モジュールの冒頭でワークシート用のオブジェクト変数を確保し、
あるタイミングで、あるシートをそのオブジェクト変数にSetしています。

で、そのシートに値をセットするときに、そのシートがActiveだった場合だけやりたい処理があるのですが、Setしてあるオブジェクト変数だけを見てそのシートがActiveか否かを判断する方法って、あるのでしょうか。

コード例)
Private oSheetA as Worksheet

Sub SetSheet(sName as String)
  Set oSheetA = worksheets(sName)
End Sub

Sub SetValue(nVa...続きを読む

Aベストアンサー

Option Explicit

Private oSheetA As Worksheet

Sub SetSheet(sName As String)
Set oSheetA = Worksheets(sName)
End Sub

Sub SetValue(nValue As Integer)
If oSheetA Is ActiveSheet Then
MsgBox ("hoge")
End If
oSheetA.Cells(1, 1) = nValue
End Sub

Sub Main()
SetSheet ("Sheet1")
SetValue (5)
End Sub

'実行できるようにソースは変更していますが,
'こんな感じでIs演算子で同じオブジェクトか比較してみるってのはどうでしょう?

QWeb Browserに表示したWebページのボタンを押下したい[VBA]

こんにちは。
Web Browserで、表示したWebページ上のボタンを押下したいと思っています。
どのようにプログラミングすればよいのか教えて下さい。
下記のように、組んでみたのですがダメでした。

    ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

'WebブラウザにHPを表示する
ActiveXコントロール0.Navigate ("http://~)

'Webブラウザが終わるまで待つ
Do Until ActiveXコントロール0.Busy = False
DoEvents
Loop

'Webブラウザにフォーカスをあてる
ActiveXコントロール0.SetFocus

'既定のボタンのフォーカスを移動する
SendKeys "{TAB}"

'エンターキーを押下する
SendKeys "{ENTER}

    ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

ボタンにフォーカスを移動するまでは、できたんですが、
エンターキー押下では、ボタンをクリックしたことにならないようです。
IEでは、エンターキーでボタンクリックできるですが、
Web Browserではダメなんでしょうか・・・?
ACCESS2000を使用しています。

なにかボタンを押下する方法を教えて下さい。
よろしくお願いします。

こんにちは。
Web Browserで、表示したWebページ上のボタンを押下したいと思っています。
どのようにプログラミングすればよいのか教えて下さい。
下記のように、組んでみたのですがダメでした。

    ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

'WebブラウザにHPを表示する
ActiveXコントロール0.Navigate ("http://~)

'Webブラウザが終わるまで待つ
Do Until ActiveXコントロール0.Busy = False
DoEvents
Loop

'Webブラウザにフォーカスをあてる
ActiveXコントロール0.SetFocus

'既定のボタンのフォ...続きを読む

Aベストアンサー

過去ログ見て

QExcel: SetステートメントでRangeオブジェクトに名前付きセルを指定したい

Excel VBAです。
RangeオブジェクトにSetステートメントで名前付きセルを指定したのですが、結果、RangeオブジェクトはEmpty値になってしまいます。名前付きではない別のセルでやってみるとうまくいきます。

Dim sSheet as Worksheet
Dim wRange as Range

Worksheets("Sheet1").Select

【失敗する例:名前付きセルを指定】
Set wRange=Range("c_ControlNo")

【うまくいく例:セルA1を指定】
Set wRange=Range("A1")

名前付きセルは指定できないなんてことはない、と思うのですが、どこがおかしいのでしょうか?
アドバイスをお願いします。

Aベストアンサー

Set wRange = Names.Item("c_ControlNo").RefersToRange

と指定します.
必要であれば,Namesプロパティの前にActiveWorkbook等を付加してください.

基本的に名前付きのセルはNameオブジェクトを経由して処理します.

QJavaScriptで動くページの実行結果をVBで取得する方法

JavaScriptで動くページの実行結果をVBで取得する方法を教えて頂きたいです。

現在WebBrowserやIEを別途起動して、それに対象のページを表示して
コントロールに数字なり文字を入力、送信で
返ってきた結果をHTMLのDocument内から探し出しているのですが、
直接、HTTP?を送受信するなどの方法でやり取りすることは出来ないでしょうか?
VB.NET2003+FrameWorks1.1+WindowsXP-PRO環境です。
よろしくお願い致します。

Aベストアンサー

どんなページかによりますが
単純なページなら DOMを直接操作することはできないでしょうか

Set myIE = CreateObject("InternetExplorer.Application")
myIE.Visible = True
For Each myTAG In myIE.Document.getElementsByTagName("td")
Msgbox myTAG.innerText
Next

Javascriptがやっていることを 代わりに処理できれば
送受信する必要はありません

QVBAで既に開いている別アプリケーションのオブジェクトを得る

 VBAで別のアプリケーションにアクセスするには、CreateObject関数を使ってアプリケーションのオブジェクトを作るようにすると思います。例えば、ワード文書にアクセスするなら次の構文になると思います。
  Set appWord = CreateObject("Word.Application")
  appWord.Visible = True
 しかしこれだと新しいワード文書を作ったり、既存のワードファイルを開いて扱うことしかできません。GetObject関数を用いても同様のようです。既に別ウィンドウで開いているワード文書があって、そこへアクセスするにはどうしたらよいのでしょうか。
 また、同じアプリで複数のファイルを開いている場合には、どうやって目的のファイルへのオブジェクトを得るのでしょうか。(ファイル名などを参照して判断?)

Aベストアンサー

Internet Explorerで開いているWindowを取得することはできますよ。

そのためには、まず開いているWindowを順番に取得し、それがInternet Explorerならばそれをオブジェクトに代入し、ひとつもIEウィンドウが存在しない場合は新規作成(CreateObject)すればいいのです。
Windowを取得するにはShell.Applicationというのを使います。

Dim ObjIE As Object
Dim ObjShell As Object
Dim ObjWindow As Object
Dim WinExist As Boolean

WinExist = False
Set ObjShell = CreateObject("Shell.Application")
For Each ObjWindow In ObjShell.Windows
If TypeName(ObjWindow.Document) = "HTMLDocument" Then
 WinExist = True
 Set ObjIE = ObjWindow
End If
Next
Set ObjShell = Nothing

If Not WinExist = True Then
Set ObjIE = CreateObject("InternetExplorer.Application")
End If

ObjIE.Navigate "http://nantokakantoka.html"
ObjIE.Visible = True


というような感じです。
Wordの場合はわからなくてすみません。
独学なのでもっといい方法があるかもしれないですが。

Internet Explorerで開いているWindowを取得することはできますよ。

そのためには、まず開いているWindowを順番に取得し、それがInternet Explorerならばそれをオブジェクトに代入し、ひとつもIEウィンドウが存在しない場合は新規作成(CreateObject)すればいいのです。
Windowを取得するにはShell.Applicationというのを使います。

Dim ObjIE As Object
Dim ObjShell As Object
Dim ObjWindow As Object
Dim WinExist As Boolean

WinExist = False
Set ObjShell = CreateObject("Shell.Applicatio...続きを読む

QEXCEL VBAをWEB上で実行した場合の終了方法

EXCEL VBAをWEB上で実行し終了する(EXCELを表示しているブラウザを閉じる)方法はありますか?
ローカルでEXCELを直接実行した場合は、以下の方法で出来るのですが、Web上では動作しません。

Application.DisplayAlerts = False
Application.Quit

また、×ボタンでブラウザを閉じようとすると「変更を保存しますか・・・」の確認ウィンドウが表示されてしまいます。
内容を参照させるだけなので、終了ボタンを押したら、変更を保存せずに終了したいのですが、ご存知の方いらっしゃいましたらご教授お願いします。

Aベストアンサー

Application.Quitはエクセルを終了するメソッドです。
ブラウザが何か書かれていませんが、
IEオブジェクトのQuitメソッドではどうでしょう?

objIE.Quit

試した事がありませんので、後はご自分でお調べ下さいm(__)m

QExcel VBA グラフオブジェクトの使用方法について

Excel2003のVBAについて教えて下さい。
以下の(1)~(4)のコードを用いて セル"A1"に設定された値をグラフスケール(最大値)に設定しようとしています。

(1) scaleData = Worksheets("シート1").Range("A1").Value
(2) Set chartObj = ActiveSheet.ChartObjects(1)
(3) Set chart1 = chartObj.Chart
(4) chart1.Axes(xlValue).MaximumScale = scaleData

グラフオブジェクト単体(グループ化しない)時は問題なく、グラフスケールの設定が行えたのですが、グラフオブジェクトやラベル、ボタンなどを結合すると、(3)で、以下のエラーメッセージが出て、グラフスケールの設定が行えません。

「WorksheetクラスのChartObjectsプロパティを取得できません。」

グループ化することにより、グラフオブジェクトの指定方法が異なるのでしょうか?
解決方法をご存知の方、教えて下さい。宜しくお願い致します。

Excel2003のVBAについて教えて下さい。
以下の(1)~(4)のコードを用いて セル"A1"に設定された値をグラフスケール(最大値)に設定しようとしています。

(1) scaleData = Worksheets("シート1").Range("A1").Value
(2) Set chartObj = ActiveSheet.ChartObjects(1)
(3) Set chart1 = chartObj.Chart
(4) chart1.Axes(xlValue).MaximumScale = scaleData

グラフオブジェクト単体(グループ化しない)時は問題なく、グラフスケールの設定が行えたのですが、グラフオブジェクトやラベル、ボタンなどを結合...続きを読む

Aベストアンサー

#1さんと、表現が異なりますが、同じ事ですね。おまけ付きです。XL2000用です。
'シートモジュールの場合
Sub test()
Me.Shapes("Group 4").GroupItems("Chart 1").DrawingObject.Chart.Axes(xlValue).MaximumScale = 2
End Sub

'おまけ グループ化された図形も含め、図形の名前リストアップ
Sub test2()
Dim shp As Shape
For Each shp In Me.Shapes
Debug.Print Me.Name & ":" & shp.Name
If shp.Type = msoGroup Then Call test3(shp)
Next shp
End Sub

Sub test3(shp As Shape)
Dim shp2 As Shape
For Each shp2 In shp.GroupItems
Debug.Print shp.Name & ":" & shp2.Name
If shp2.Type = msoGroup Then Call test3(shp2)
Next shp2
End Sub

#1さんと、表現が異なりますが、同じ事ですね。おまけ付きです。XL2000用です。
'シートモジュールの場合
Sub test()
Me.Shapes("Group 4").GroupItems("Chart 1").DrawingObject.Chart.Axes(xlValue).MaximumScale = 2
End Sub

'おまけ グループ化された図形も含め、図形の名前リストアップ
Sub test2()
Dim shp As Shape
For Each shp In Me.Shapes
Debug.Print Me.Name & ":" & shp.Name
If shp.Type = msoGroup Then Call test3(shp)
Next shp
End Sub

Sub test3(shp As Shape)
Dim shp2...続きを読む

Q「Excel VBA」 Webクエリ マクロ「実行時エラー"1004"ファイルにアクセスできませんでした」

Webクエリを使って、「Yahooファイナンス」から日経平均株価の時系列データを取得したいのですが、うまくいきません。(TT)
下記に全コードを記載しますので、ご回答よろしくお願いします。

Dim url As String
Dim lastrow As Integer
Dim i As Integer

Sub Calc()
'価格データを取得するマクロ

'このマクロ内で用いる各変数を宣言
Dim code As String
Dim day_s As Integer, month_s As Integer, year_s As Integer
Dim day_e As Integer, month_e As Integer, year_e As Integer
Dim row_length As Integer

'変数に各値を代入
code = "998407.o" '株価コード
day_e = 31 '取得終了日
month_e = 12 '取得終了月
year_e = 2005 '取得終了年
day_s = 1 '取得開始日
month_s = 1 '取得開始月
year_s = 2005 '取得開始年

'価格データを取得
For i = 0 To 365 * 0.65 Step 50

'変数にURLを代入
url = "URL;http://table.yahoo.co.jp/t?s=" & code & "&a=" & month_s & "&b=" & day_s & "&c=" & year_s & "&d=" & month_e & "&e=" & day_e & "&f=" & year_e & "&g=d&q=t&y=" & i & "&z=" & code & "&x=.csv"

'1回目の繰り返しの場合
If i = 0 Then
lastrow = "4"
Call Get_Data

'価格データが取得できなかった場合、マクロを終了させる
    If Range("B4") = "" Then
Exit Sub
End If

'2回目以降の繰り返しの場合
Else
lastrow = Range("B4").End(xlDown).Row + 1
Call Get_Data

'見出しのセルを削除
Range("B" & lastrow, "H" & lastrow).Delete
row_length = Range("B4").End(xlDown).Row

'価格データが取得期間分存在していなかった場合、その時点で繰り返しを終了させる
If row_length - lastrow < 49 Then
Exit For
End If
End If
Next
End Sub

Sub Get_Data()

With ActiveSheet.QueryTables.Add(Connection:=url, Destination:=Cells(lastrow, 2))
.Name = "t?s=998407.o&g=d"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "22"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With

Range("B5:F54").Select
Selection.Sort Key1:=Range("B5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub

Calcマクロを実行すると、 
「実行時エラー"1004"ファイルにアクセスできませんでした。次のいずれかを行ってください。」 というエラーが出て止まってしまいます。

デバッグをすると、「Get_Dataマクロ」内の、
.Refresh BackgroundQuery:=False が黄色になります。

ステップインしても、やっぱり、
.Refresh BackgroundQuery:=False の所でエラーが出ます。(TT)

どうしても解決したい内容なので、
少しでも「解決の可能性」があれば、なんでも試してみたいと思っていますので、どうぞお気軽に回答お願いします。

力を貸しください。よろしくお願いします。

Webクエリを使って、「Yahooファイナンス」から日経平均株価の時系列データを取得したいのですが、うまくいきません。(TT)
下記に全コードを記載しますので、ご回答よろしくお願いします。

Dim url As String
Dim lastrow As Integer
Dim i As Integer

Sub Calc()
'価格データを取得するマクロ

'このマクロ内で用いる各変数を宣言
Dim code As String
Dim day_s As Integer, month_s As Integer, year_s As Integer
Dim day_e As Integer, month_e As Integer, year_e As Integer...続きを読む

Aベストアンサー

試したところ、ちゃんと動作しましたのでコードの問題ではないでしょう。

で、検索したところ同じような質問があり、
インターネット一時ファイル、履歴を削除したら解決したようです。
下記URLを覗いてみてください。

http://okwave.jp/qa2884378.html

外しましたらご容赦願います。
 

QVBAのオブジェクトの値を保持しておくには

ExcelのVBAにおいて、Deleteメソッドを使用して、
オブジェクトを削除する場合に、削除前に保持データを丸々待避させる
よい方法はないでしょうか。

例)グラフタイトルのフォントスタイルを書き戻す。
1. ActiveChart.ChartTitle.Fontの内容を待避させる。
2. Deleteでタイトルを消す。
ActiveChart.ChartTitle.Delete
3. 間に種々処理を行う。
4. 新しいタイトルをつける。
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Characters.Text = "foo"
5. ActiveChart.ChartTitle.Fontの内容を新しいタイトルに適用する。
プロパティーを列挙して変数に格納する方法を試したましたが、
プロパティーの数だけコードを書かなければならないので断念しました。

通常の変数であれば、
1. 規定値をセット(A=1)
2. 退避用の変数にAを保持させる(B=A)
3. Aに対して操作を行う
4. 待避した値をAに書き戻す(A=B)
というようなことができるのですが。
オブジェクトにSet等を試しましたが、Setを使ってオブジェクトを入力した場合、
もとオブジェクトの変化に対して動的に値が変化するため、待避できませんでした。

どなたか、わかる方がいらっしゃいましたら、よろしくお願いいたします。

使用環境
WindowsXP SP2
Excel 2002 SP3

ExcelのVBAにおいて、Deleteメソッドを使用して、
オブジェクトを削除する場合に、削除前に保持データを丸々待避させる
よい方法はないでしょうか。

例)グラフタイトルのフォントスタイルを書き戻す。
1. ActiveChart.ChartTitle.Fontの内容を待避させる。
2. Deleteでタイトルを消す。
ActiveChart.ChartTitle.Delete
3. 間に種々処理を行う。
4. 新しいタイトルをつける。
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Characters.Text = "foo"
5. ActiveChart.ChartTitle.Fon...続きを読む

Aベストアンサー

>Setを使ってオブジェクトを入力した場合、もとオブジェクトの変化に対して動的に値が変化

 そうなんですよね~。オブジェクトの代入は、オブジェクト・アドレスの参照渡しになって、値コピーを行ってくれません。これがVB.NETであれば、CopyやCloneメソッドがあるので、値コピーを行えますが、VBAはVB6仕様なので、恐らくCopyやCloneメソッドの類はありません。
(でも調べて下さいね。そして見つかったら、教えて下さい^^)

>プロパティーを列挙して変数に格納する方法を試したましたが、プロパティーの数だけコードを書かなければならないので断念しました

 私は今まで、これでやって来ました。ただしプロパティーCopy用のClassをつくり、一回作れば、目的のObjectを与えるだけで、Copyから再Copyまで全てやってくれるようにしています。またCopyするプロパティーは必要最小限に抑えています。Classであれば、拡張も容易ですし、ExcelのClassを部品として再利用できます。
 注意点としては、Excel Objectのプロパティーには、それ自体Objectであるものも多数含まれるので、Copyを行う際には、Objectの最下層プロパティーまで遡って、値型(StringやInteger,Singleなど)のプロパティーを退避させる必要のある事です。

>Setを使ってオブジェクトを入力した場合、もとオブジェクトの変化に対して動的に値が変化

 そうなんですよね~。オブジェクトの代入は、オブジェクト・アドレスの参照渡しになって、値コピーを行ってくれません。これがVB.NETであれば、CopyやCloneメソッドがあるので、値コピーを行えますが、VBAはVB6仕様なので、恐らくCopyやCloneメソッドの類はありません。
(でも調べて下さいね。そして見つかったら、教えて下さい^^)

>プロパティーを列挙して変数に格納する方法を試したましたが、プロパティー...続きを読む

QWEBページからのメッセージをVBAで

いつもお世話になっております。
エクセルVBAでIE制御についてです。
環境はWIN7、IE 9or11とエクセル2010です。

あるページのリンクをクリックすると、
WEBからのメッセージというダイアログボックスが出てきて、
続行しますか? はい いいえ を聞かれます。

その「はい」をVBAで押したいのですが、
sendkeysメソッドで押そうとしてもうまくいきません。

以下に記載したサイトのOKボタンを押すと出てくるものです。
http://kamicha1.web.fc2.com/Excel/Test20090726.html


以下が書いたコードです。


Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)


Sub test()

Dim ie As Object

Set ie = CreateObject("InternetExplorer.Application")

ie.Visible = True
ie.navigate "http://kamicha1.web.fc2.com/Excel/Test20090726.html"
      
Do While ie.Busy Or ie.readyState < 4
DoEvents
Loop

ie.document.getElementsByClassName("bt2")(0).Click '-ここで止まる

Sleep 2000

SendKeys "{Enter}"

End Sub

ステップ実行していくと、ここで止まると書いた所で、
IE上にダイアログは表示されるのですが、
それ以上ステップ実行ができなくなってしまいます。

ダイアログを自分でOKかキャンセルで消すと続きが動くようになります。
その間はVBEはビジー状態となり操作できません。

そのためそれ以降のsendkeysメソッドに
たどり着けない状況かと思われます。

いろいろ調べたところIE8以降はダイアログボックスは
IEから出ているのではなくOS?から出ているとの事でした。

上記のサイトはHTML本体にjavaスクリプトが記載されており、
それをVBAから操作すればどうにかOKボタンが押せるらしいのですが、
自分が操作したいページにはそれらしき記載がありませんでした。

対象のアンカータグは
<a herl=URL 中略 data-comfirm=続行しますか? >
のような感じで記載がありました。

完全に煮詰まっております。
自動でOKをクリックするかEnterキーでOKを押すでも構いません。
どうかご教授お願いいたします。

いつもお世話になっております。
エクセルVBAでIE制御についてです。
環境はWIN7、IE 9or11とエクセル2010です。

あるページのリンクをクリックすると、
WEBからのメッセージというダイアログボックスが出てきて、
続行しますか? はい いいえ を聞かれます。

その「はい」をVBAで押したいのですが、
sendkeysメソッドで押そうとしてもうまくいきません。

以下に記載したサイトのOKボタンを押すと出てくるものです。
http://kamicha1.web.fc2.com/Excel/Test20090726.html


以下が書いたコードです。


Dec...続きを読む

Aベストアンサー

ご参考
https://gist.github.com/kumatti1/4028479


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング