🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2281閲覧

VBA IE javascript要素をクリックしたい

tracky

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/18 12:13

前提・実現したいこと

VBAでjavascript要素をクリックしようとしていろいろ調べたのすが、うまくできなくて投稿しました。
ご教授宜しくお願い致します。

#発生している問題・エラーメッセージ
該当箇所に

該当箇所
<a href="#" onclick="return execproc('Main.jsp');"

試したコード
objIE.navigate "JavaScipt:return execproc('Main.jsp');"

selecter
body>form>table:nth-child(2)>tbody>tr:nth-child(2)>td:nth-child(1)>a

xpath
/html/body/form/table[1]/tr[2]/td[1]/a

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

onclickの処理なので、.navigateでは無理でしょう。
「execproc('Main.jsp')」 というプロシージャを動かしたいなら、直接
その関数を呼んだほうがてっとり早いです。具体的には

objIE.document.parentWindow.execScript ("execproc('Main.jsp')")

でよいかと。

【参考】

Webページのスクリプトを実行するVBAコード
https://officevba.info/vbaexecscript/

投稿2021/03/19 02:09

h.horikoshi

総合スコア505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tracky

2021/03/19 11:06

ご返事ありがとうございます。 試したところ、「エラー 80020101のため操作を完了できませんでした」となり実行できませんでした。エラーについて調べて月曜に再度試してみたいと思います。
tracky

2021/03/22 06:08

このエラーについてネットで出ているコメントアウトは使われておらず、対応できずにいます。もう少し調べてみようと思います。
guest

0

アドバイスありがとうございました。
UWSCを使って処理をすることにしました。

投稿2021/04/25 05:17

tracky

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

MSXML2.DOMDocumentなりでXMLパースしても、
それを生のObjectと結びつける手段がないとClickできないんですよね。
とりあえず自力でXPathのElementを取り出すFunctionを作ってみました。
これでどうでしょう? (ただしエラー処理など一切なしです テストでGoogle検索は成功)

VB

1Sub ボタン1_Click() 2 Dim objIE As Object 3 Dim elemTarget As Object 4 Dim sURL As String 5 Dim sXPath As String 6 7 sURL = "http://..." 8 sXPath = "/html/body/form/table[1]/tbody/tr[2]/td[1]/a" '※ tbodyが必要 9 10 'テスト用 Googleで検索ワード'teratail'をいれるまでのURL 11 sURL = "https://www.google.com/?q=teratail" 12 ' Googleの検索ボタンXPath 13 sXPath = "/html/body/div[1]/div[3]/form/div[1]/div[1]/div[3]/center/input[1]" 14 15 'ページ読込 16 Set objIE = CreateObject("Internetexplorer.Application") 17 objIE.Visible = True 18 objIE.navigate sURL 19 20 '読込待機 21 Do 22 If Not objIE.Busy Then Exit Do 23 If objIE.readyState = tagREADYSTATE.READYSTATE_COMPLETE Then Exit Do 24 Application.Wait Now() + TimeValue("00:00:01") 25 Loop 26 27 'XPathでElementを取得 28 Set elemTarget = getElementByXPath(objIE.document.body, sXPath) 29 If Not elemTarget Is Nothing Then 30 elemTarget.Click 31 End If 32End Sub 33 34'注意! Body配下限定:信頼性&汎用性=おそろしく低い(テストゼロ同然で不明) 35Function getElementByXPath(elemParent As Object, sXPath As String, Optional sHerePath As String = "") As Object 36 Dim sSibling As String 37 Dim sTag As String 38 Dim sNewPath As String 39 Dim elem As Object 40 41 If sHerePath = "" Then 42 sHerePath = "/html/body" 43 sXPath = Replace(sXPath, "[1]", "") 44 End If 45 For Each elem In elemParent.Children 46 sTag = LCase(elem.tagName) 47 sSibling = sSibling & "<" & sTag & ">" 48 sNewPath = sHerePath & "/" & sTag & getSiblingIdxStr(sSibling, sTag) 49 If sNewPath = sXPath Then 50 Set getElementByXPath = elem 51 Exit Function 52 End If 53 Set getElementByXPath = getElementByXPath(elem, sXPath, sNewPath) 54 If Not getElementByXPath Is Nothing Then Exit Function 55 Next 56 Set getElementByXPath = Nothing 57End Function 58 59Function getSiblingIdxStr(sSibling As String, sSelfTag As String) As String 60 Dim iCount As Integer 61 iCount = (Len(sSibling) - Len(Replace(sSibling, sSelfTag, ""))) / Len(sSelfTag) 62 If iCount > 1 Then getSiblingIdxStr = "[" & CStr(iCount) & "]" 63End Function

投稿2021/03/19 07:32

FromMZ1500

総合スコア496

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tracky

2021/03/19 11:26

ご回答ありがとうございます。 あいにく、本日確認することができませんしたので月曜に確認致します。
tracky

2021/03/22 06:08

残念ながらクリックできませんでした。他のサイトでは動作しておりますので特有の問題かと思います。 コードを拝見しもう少し勉強してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問