質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

JavaScript

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

Q&A

2回答

693閲覧

VBAからのIE操作:WEB上のPDMシステムのアイコンボタンをクリックしたい

qazqaz

総合スコア0

VBA

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

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

JavaScript

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

0グッド

0クリップ

投稿2021/05/26 15:34

前提・実現したいこと

VBAのIE操作について質問致します。
社内PDMシステムの検索機能をVBAのユーザフォームから操作したいのですがうまくいきません。
パスワード入力してPDMシステムにログインするところまでは行けたのですが、
そこからアイコンをクリックして検索ワード入力画面へのページ遷移が実行できません。
ネットで調べて色々試してみましたが特にエラー等も出ず無理でした。
何かヒントをご教示いただければと思い投稿いたしました。
当方プログラムの知識及び経験はほぼ皆無です。
下記ソースコードはすべて手入力していますので書式にご無礼がありましたらご容赦ください。
追加情報が必要であれば可能な限り迅速に対応いたします。
何卒宜しくお願い致します。

###当該アイコンのHTML要素

<a href="javascript":openWindow('/pdm/cozy/showFindDialog','content','',1,false,false,false,false,false,'','')" shape="">
<img width="10" height="10" title="検索" class="icon_button" alt="検索" src="/pdm/ematrix/images/icons/search.gif" border="0" />
</a>

もっと上位タグからだと

<frameset rows="26,*,0" border="0" frameBorder="NO" frameSpacing="0" onunload="removeState()"> <frame name="topFrame" src="/pdm/cozy/showNavigatorTopFrame?cozy_state_id=1234567890& frameBorder="1" noresize="noresize" scrolling="no"> <!--DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"-->  <html>ih <body> <form name="menuForm" action="/pdm/cozy/applyVisuals" encType="application/x-www-form-urlencoded" method="post" target="_parent"> <table width="100%" class="main_head" border="0" cellSpacing="0" cellPadding="0"> <tbody> <tr> <td noWrap="nowrap" rowSpan="1" colSpan="1"> <img width="10" height="10" alt="" src="/pdm/images/space.gif" /> <img width="10" height="10" alt="Login User" src="/pdm/ematrix/images/login_user_jp.gif" border="0" /> <img width="10" height="10" alt="" src="/pdm/images/space.gif" />

となっており、これ以降、前述の

<a href="javascript":openwindow('/pdm/cozy/***************************************

となり各アイコン要素の記述が続きます。

###VBAソースコード

Private Sub btnZ_Click

'ページ呼び出し&待機

Dim objIE as InternetExplorer
Set objIE = New InternetExplorerMedium

With objIE
.Visible = True
.navigate "http://pdmweb.aaaaaaaa/pdm/"
End With

Call waitIE(objIE)

'システムログイン&待機

Dim htmlDoc As HTMLDocument
Set htmlDoc = objIE.document

With htmlDoc
.getElementsByName("mx_username")(0).Value = aaaaa
.getElementsByName("mx_password")(0).Value = 12345
.forms(0).submit
End With

Set htmlDoc = Nothing
Call waitIE(objIE)
Set htmlDoc = objIE.document

Application.Wait [now()+"00:00:03"]

'ここからアイコンクリック用のコード

'試した事その1(javascript直接実行)

Dim aaa As Object
Set aaa = objIE

aaa.document.Script.setTimeout"javascript:openWindow('/pdm/cozy/showFindDialog','content','',1,false,false,false,false,false,'','')"

Application.Wait [now()+"00:00:03"]

'試した事その2(javascript直接実行)

Dim aaa As Object
Set aaa = objIE

aaa.navigate"javascript:openWindow('/pdm/cozy/showFindDialog','content','',1,false,false,false,false,false,'','')"

'試した事その3(class属性から探す)

With htmlDoc
.getElementsByClassName("icon_button")(0).Click
End With

'試した事その4(alt属性から探す)

Dim objTag As Object
Set objTag = objIE.document
For Each objTag In htmlDoc.getElementsByTagName("a")
If objTag.alt = 検索 Then
objTag.Click
Exit For
End If
Next

'試した事その5(alt属性から探す)

'省略
For Each objTag In htmlDoc.getElementsByTagName("a")
If InStr(objTag.outerHTML,"/pdm/ematrix/images/icons/search.gif") > 0 Then
objTag.Click
'省略

'試した事その6(alt属性から探す)
Dim inputTags As IHTMLElementColection
Set inputTags = htmlDoc.getElementsByTagname("a")
Dim inputTag As IHTMLElement
For Each inputTag in inputTags
If inputTag.alt = 検索 Then
inputTag.Click
Exit For
End If
Next

'試した事その7(alt属性から探す)

'省略
If InStr(inputTag.src,"/pdm/ematrix/images/icons/search.gif") > 0 Then
inputTag.Click
'省略

補足情報(FW/ツールのバージョンなど)

PDMシステムに関する情報が不明です
WEB上で操作できるものなのは間違いないですが・・

以上、長文になり申し訳ありませんが宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

javascript の一般的な Window.open() を呼び出すのではなく openWindow() という一風変わったメソッド?を使っていますが... これは、何か理由があるのでしょうか?

aaa.navigate"javascript:openWindow('/pdm/cozy/showFindDialog','content','',1,false

一般的な javascript で新しいウィンドウを開くようにしたければ、このような Window.open() を使った javascript になるはずです。

<a href="javascript:void(window.open('/pdm/cozy/showFindDialog', 'content', 'width=400, height=300, menubar=no, toolbar=no, scrollbars=yes'));">テスト3</a>

もし記述ミスなら、こ検索ワードのページが別ウインドウで開かない原因は記述ミスということになります

しかし、記述ミスではないなら、openWindow() は、おそらくその PDM システムの独自の?ものなのでプログラムとして動作が成立する条件を把握した上で、それにあわせた VBA のコードが必要になります。

投稿2021/05/27 13:41

Yoshi88

総合スコア623

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

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

Yoshi88

2021/05/27 13:44

すみません。よくみたら 当該アイコンのHTML要素 というところに、<a href="javascript":openWindow('/pdm/cozy/showFindDialog','content','',1,false,false,false,false,false,'','')" shape=""> が書いてありましたね。 openWindow() で動いているのですね。失礼しました。m(_ _)m
qazqaz

2021/05/28 09:37

Yoshi88様、ご回答いただきありがとうございます。 ご指摘の箇所は私も気になっておりましたので、ダメもとでwindow.openに書き換えて試してみたりしましたが無反応でした。 色々試した結果、どれもエラーが出ないということはご指摘の通りPDMシステム独自のものということが関係しているのでしょうか。 一度システムについて調べてみます。 ご教示頂きありがとうございました。
guest

0

Dim objTag As MSHTML.IHTMLDocument2
Set objTag = objIE.document
objTag.parentWindow.execScript "openWindow('/pdm/cozy/showFindDialog','content','',1,false,false,false,false,false,'','')"

じゃだめでしょうか?

投稿2021/05/27 09:45

hodagiri

総合スコア21

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

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

qazqaz

2021/05/28 09:42

hodagiri様、ご回答いただきありがとうございます。 確認が遅れてしまいましたので週明け早速試して結果報告させていただきます!
qazqaz

2021/05/31 09:49

hodagiri様、本日提案いただきましたコードを試してみたところ、 ”実行時エラー’-2147352319(80020101)’: オートメーションエラーです” となりました。 本件については、ほかの回答者様が仰っていたようにシステム特有のコードを理解しないとVBAからは操作できないような気がするので、今回はあきらめようと思います。 アドバイス頂きまして、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問