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を見た人が検索しているワード

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

Qvisual basic 6.0 ⊂ Excel2003のVBA?

visual basic 6.0 ⊂ Excel2003のVBA?

visual basic 6.0 で出来ることは、Excel2003のVBAでも出来ますか?

visual basic 6.0 で出来ることと、
Excel2003のVBAで出来ることの違い(差分)について知りたいのですが、
どなたかご存知でしょうか。大雑把な回答でも結構です。
宜しくお願い致します。

Aベストアンサー

VB 6.0 は実行ファイル *.exe を作成できます。
Excel VBA は作成できません。

VB 6.0 で作成した実行ファイルは VB 6.0 のランタイムがインストールていないと実行できません。
Excel VBA で作成した Excel ファイルは Excel がインストールされていないと実行できません。

VB 6.0 は開発の手助けをするコンポーネントやコントロールが販売されています。(いました)
これらはの中には Excel VBA でも使用できるものもありますが、使用できないものの方が多いです。

VB 6.0 は COM オブジェクトを扱えます。したがって Excel をコントロールすることができます。
Excel VBA も COM オブジェクトを扱えます。

VB 6.0 はウィンドウを持つアプリケーション以外にもコンソール アプリケーションや、ユーザー コントロールが作成できます。
Excel VBA には作成できません。

VB 6.0 で作成したプログラムはコンパイルしてから配布します。
Excel VBA はコンパイル不要です。

VB 6.0 でコンパイルした配布物からソースコードを見破られることは (ほぼ) ありません。
Excel VBA はソースコード見放題ですので改変もすることができます。(パスワードを掛けてコードを保護することはできます)

VB 6.0 は実行ファイル *.exe を作成できます。
Excel VBA は作成できません。

VB 6.0 で作成した実行ファイルは VB 6.0 のランタイムがインストールていないと実行できません。
Excel VBA で作成した Excel ファイルは Excel がインストールされていないと実行できません。

VB 6.0 は開発の手助けをするコンポーネントやコントロールが販売されています。(いました)
これらはの中には Excel VBA でも使用できるものもありますが、使用できないものの方が多いです。

VB 6.0 は COM オブジェクトを扱えます。し...続きを読む

QEXCEL2002VBAのピクチャボック内に絵を描きたい

基本的な質問ですみません。
EXCEL2002のVBAで、Form内のピクチャボック内に
直線、四角、円などの絵を描きたいのですが、
やり方がわかりません。

またEXCEL2002のVBAとEXCEL2003のVBAはコマンドとか
かなり変わっているのでしょうか?

Aベストアンサー

こんにちは。Wendy02です。

>ImageBoxでした。
>ここには図形描画はできないのでしょうか?

単に読み込むだけのものですから、それは出来ないと思います。
Office VBAでは分かりません。

QExcel2000でVBAをやりたいのですが、お勧めの入門書は?

はじめまして。
現在Excel2000を使用しています。それで、VBAでプログラミングしたいと思い入門書を探しているのですが、どれもExcel2003対応になっています。Excel2000を使用してExcel2003対応の入門書でもVBAを学べるのでしょうか?もし
無理ならば、Excel2000対応のVBAの定評のある入門書をどなたかご存知でしょうか?ご教授お願いします。

Aベストアンサー

Excel 2007/2003/2002/2000
 VBA徹底活用テクニック とか
http://www.media-tech.co.jp/detail/VBAtetteikatsuyou.htm
2000だと、
リストオブジェクト、スマートタグとか使えないものがあるだけ。
図書館で2003対応とか10日間シリーズを借りることをお勧め。

QExcel 2003のVBAマクロデータをExcel 2007で見たい

Excel 2003のVBAマクロデータをExcel 2007で見たい。
Excel 2003でVBAマクロを登録したExcelファイルがありますが、今回、Excel 2007をインストールして、該当ファイルを開いたところ、「マクロデータを削除しました。」とメッセージが出て、VBEを起動してもマクロが見えなくなりました。OSはWindowsXP SP3です。Excel 2003で登録したVBAマクロをExcel 2007で削除されないで、次の2点について、可能にするにはどうすればよいか、ご教示願います。
(1)マクロデータを残す方法。
(2)マクロ起動する方法。

Aベストアンサー

インターネット検索ではヒットしませんね。

あまりはっきりした記憶ではないので、間違っているかもしれません。

前のVersion でも、通常はマクロありというダイアログ・メッセージで、マクロを有効にするか無効にするか出てくるはずです。それが出てこないで、マクロそのものが削除されるというのは、VBEditor 自体を使えるようにインストールしていないと、そういうことになったような気がしましたね。

そのExcelは、VBEditor は、開けるのですね。ただ、VBEditor を使えるようにしていますか。VBA は、特別のプログラムがインストールしていないと動きません。一応、VBAを使う予定だとして、一通りフルインストールしていますか?

QEXCELのVBAを用いたACCESSのデータベース操作の本について

VBAの初心者です。
EXCELのシート上にあるデータをACCESSのデータベースに蓄積したり、ACCESSのデータベースからEXCELにデータを飛ばして加工したりしたいと考えています。できれば、ACCESSにVBAを記述するのではなく、EXCELにVBAを記述し、データの蓄積などをEXCELから行う方法を勉強したいのです。
自分が本屋で見た限りでは、ACCESSにVBAを記述する方法であれば様々な本が出版されているのですが、EXCELに記述する方法が書いてある本が見当たりません(たくさんあるのかも知れませんが)。皆様お勧めの分本を教えてください。
なお、自宅でEXCEL2000とACCESS2000、会社でEXCEL97とACCESS97を使っていますので、どちらでもいける本がいいです。
よろしくお願いします。

Aベストアンサー

VBA関連の本ということですので、下記にご紹介しておきます。
(今も販売されているかどうかは不明ですが・・・)

「VBAプログラミング500の技」
発行所:株式会社技術評論社
ISBN4-7741-1003-5

これは、Windowsプログラミングシリーズのvol.3になります。
(ちなみにvol.1は「Access2000表現百科」、vol.2は、「データベースプログラミング300の技」です。)

ご参考になれば幸いです。m(__)m

QExcel VBAにてFFT

Excel VBAにておよそ5万点のデータをFFTする方法についての質問をさせてください。

いつもはあるソフトを用いて実験データのFFTを行っているのですが、作業効率を改善したいと考えExcel VBAにてFFTをしたいと考えています。

私はC言語を少しですが学習したことがあるので、FFTWのようなFFT を実装したフリーソフトウェアが存在しているのを知っています。
時間節約のためExcel VBAにてFFTのコードを位置から書くのではなく、FFTWのアルゴリズムでExcel VBAで利用できるプログラムを使いたいと考えています。
この場合、自分でFFTWのコードを見ながらExcel VBA用にコードを書きかえるしか手はないのでしょうか。私はC言語もExcel VBAも未熟であるため、この作業を行うことができそうにありません、、、
Excel VBAで利用することのできるFFTのコードはあるのでしょうか。

なお、FFTするためのデータ点数は約5万点、多いと10万点ほどで、データ点数が2の累乗に限定しないものを使いたいと考えています。

Aベストアンサー

今晩は。ちょっとお節介かもしれませんが、
大量のデータの処理をこれからもなされるのでしたら、No.3の回答と重なるところもありますが、
1) scilab, Octave, Rなどの科学計算に特化したソフトウエアの中からを1つ
2) Ruby, Python, Perlなどのテキスト処理と科学計算も可能なプログラム言語の中から1つ
を習得されることをお勧めします。

前者は、Excelに読み込める程度に整形されているのでしたら直接読むことができますし、行列計算やグラフ作成、統計計算などが簡単にできます。(PDFなどのファイルにグラフを直接書けます、また計算やグラフはかなり高速です)
http://hotic.blog129.fc2.com/blog-entry-10.html
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/40.html
1、2行のプログラムで読み込むことができます。

後者はというと、テキストデータから必要の部分を切り出したり、基本的な計算をしたりするのに使えます。
最近では行列計算ライブラリやGSLやFFTなどのC言語で書かれたライブラリを直接使うライブラリが提供されていますので、ほとんどの場合は2)だけ処理が可能です。行列計算ライブラリは結構強力で計算速度もかなりでます。最近回答したものですが、
http://oshiete1.nifty.com/qa7525007.html
のNo.7に100万個の128次元ベクトルの中から、特定の点にもっとも近いものを選び出すというプログラムを掲載していますが、計算部分は実質2行で2秒で結果を出してくれます。後でC言語で書き直して0.2秒と速くなりましたが、プログラムを書くエネルギーを比べるとCで書くのはとても引き合いませんでした。

Octave→scilab→Rと使うプログラムを変えてきましたが、初めてだったらscilabがとっつきやすいように思います。

私自身は最近ではruby+Rを直接呼び出すライブラリ+行列計算ライブラリを使っています。多量のテキストの中からデータ部分を取り出す必要が有るので基本的にはRubyでデータ処理をし、多変量解析やFFTなどの高度な計算やグラフはRを直接呼び出して使う方法をとっています。

今晩は。ちょっとお節介かもしれませんが、
大量のデータの処理をこれからもなされるのでしたら、No.3の回答と重なるところもありますが、
1) scilab, Octave, Rなどの科学計算に特化したソフトウエアの中からを1つ
2) Ruby, Python, Perlなどのテキスト処理と科学計算も可能なプログラム言語の中から1つ
を習得されることをお勧めします。

前者は、Excelに読み込める程度に整形されているのでしたら直接読むことができますし、行列計算やグラフ作成、統計計算などが簡単にできます。(PDFなどのファイルにグラフ...続きを読む

QEXCELのV4マクロをVBAに書き直せるか?

EXCEL2000にてV4マクロにて書かれたEXCELアドインがあります。
これをEXCEL2000のVBAに書き直して欲しいという依頼がありますが、
V4マクロよりVBAにて無理な事や注意点があれば教えてください。

よろしくお願いします

Aベストアンサー

>EXCEL2000にてV4マクロにて書かれたEXCELアドインがあります。
>これをEXCEL2000のVBAに書き直して欲しいという依頼がありますが、
他の人から依頼があった場合に、この様な簡単に説明したつもりの依頼があります。
このアドインが作業の中でどの様に使われているのかなど、
もっと本質の部分に戻って現在のPCの機能、エクセルの機能などから
総合的にアドバイスしてあげたほうが
良い結果がでます。
EXCEL2000にてV4マクロですので10年以上前のシステムだと思いますし!!

それと、依頼する側も、色々と説明するのが手間なので、手抜きの説明をしてくる場合も
結構あります。

QEXCEL VBAでACCESSのデータを扱いたい(初心者です)

EXCEL VBAを勉強している者です。VBAでコードを書いてACCESSのデータを抽出してEXCELでその抽出したデートを加工したい(すべてVBAでコードを書いて処理)のですが、よくわかりません。EXCEL VBAの書籍を数冊勉強したのでEXCELの中だけでデータを作ったり、加工したりは理解できているつもりです。ただ、今まで読んだ書籍には外部データベースに接続して、その後、処理をするといったことが書いてなかったので、まったく知識がありません。そこで、ACCESSへの接続の仕方、操作の仕方などについて、やさしく(私みたいな初心者でも理解できる)説明してあるサイトまたは書籍をご存知の方、お教えください。特に、今のところ、最初の接続のところがわからないので接続について詳しく説明してあるサイトなどお願いします。

Aベストアンサー

初めまして。
↓のサイトはいかがでしょうか?データベース操作という項目の中にデータを取得する方法が書かれています。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130.html

但し、ACCESS VBAとSQLの知識も必要になると思うので、下記のサイトを参考にしてみて下さい。
ACCESS VBA:http://www.accessclub.jp/vbakaisetu/index.html
SQL:http://www.accessclub.jp/sql/index.html

QWord vbaからexcel vbaへ値を渡すことができますか?

Word vbaからexcel vbaへ値を渡すことができますか?
現在Wordでvbaを組んでいますが、Wordで取得した値をexcel vbaで利用したいのに変数の値がnullになってしまい四苦八苦しています。Application間で値を渡すには何か特別な処理がいるのでしょうか?(参照は設定済みです)

やりたい事は、Wordで「ShipTo」文字列をsearch→後ろの番号を変数へ格納→excel vbaを起動→シートの表中からWordで取得した番号を元に文字列を検索しセルに入れる(VLOOKUPを使用)→セルの文字列をWord vbaへ返しWord側で利用、という処理です。excel vbaの起動は以下のように記述しています。

------------------excelVBAの起動
Sub getExcelTable()

Dim xLobj As Object, myObj As Object

Set xLobj = CreateObject("excel.application")
xLobj.Visible = True

Set myObj = xLobj: workbooks.Open (ThisDocument.Path & "\sample.xls")
myObj.Run ("'sample.xls'!getStr")

MsgBox strA ←これがでない
MsgBox strB ←これがでない
Set xLobj = Nothing
End Sub
-----------------excel vbaのコード
Option Explicit
Dim endRow As Integer, ShipTo As Variant
Dim strA As Variant, strB As Variant
Sub getStr()
endRow = Range("a65536").End(xlUp).Row
MsgBox ShipTo ←これがでない

Cells(endRow + 2, 1).Select
Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",3,0)"
strA = ActiveCell.Text

Cells(endRow + 2, 2).Select
Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",13,0)"
strB = ActiveCell.Text
End Sub

Word vbaからexcel vbaは起動します。Word側、excel側で使う関数はグローバル変数にし、variant型にしてみましたが値がわたりません(Wordでは取得できています)。Application間で値を渡す方法、もしくは根本的にもっとうまい方法があればご教示ください!

WinXP、Office2003を使用です。

Word vbaからexcel vbaへ値を渡すことができますか?
現在Wordでvbaを組んでいますが、Wordで取得した値をexcel vbaで利用したいのに変数の値がnullになってしまい四苦八苦しています。Application間で値を渡すには何か特別な処理がいるのでしょうか?(参照は設定済みです)

やりたい事は、Wordで「ShipTo」文字列をsearch→後ろの番号を変数へ格納→excel vbaを起動→シートの表中からWordで取得した番号を元に文字列を検索しセルに入れる(VLOOKUPを使用)→セルの文字列をWord vbaへ返しWord側で利用、という処理...続きを読む

Aベストアンサー

--Page Before continuing--

'Word VBAの中だけの処理
'Sub getExcelTable()
'で、
'Call getExcelTable3
'とします。

'**もうひとつの案。''Excel のファイルを開かない方法(=Excelはマクロを使わない)
''どちらが良いかというよりも、セキュリティや検索の速さで決めたほうがよいです。
''言い換えると、Excel のファイルのThisWorkbookのPropety のIsAddinをTrueにして他人には見せない方法も可能です。

Sub getExcelTable3()
Dim wb As Object
Dim mPath As String
Dim mFrm As String
Dim y As Long
Const FNAME As String = "[Sample.xls]"
mPath = ThisDocument.Path & "\"
 On Error Resume Next
 With CreateObject("Excel.Application")
  mFrm = "'" & mPath & FNAME & "Sheet1'!"
  If Not IsNumeric(ShipTo) Then ShipTo = """" & ShipTo & """"
  y = .ExecuteExcel4Macro("Match(" & ShipTo & "," & mFrm & "C1,0)") 'A列検索
  strA = .ExecuteExcel4Macro(mFrm & "R" & y & "C3") 'C列
  If IsError(strA) Then strA = "Na!"
  strB = .ExecuteExcel4Macro(mFrm & "R" & y & "C13") 'M列
  If IsError(strB) Then strB = "Na!"
 End With
 On Error Goto 0
 If Not IsNumeric(ShipTo) Then ShipTo = Replace(ShipTo, """", "") '""を取り去る(オプション)
End Sub

4)ページめくりについて。
Application.Browser.Target = wdBrowsePage これを入れているということですから、
SearchShipToのプロシージャで、Selection.HomeKey wdStory を入れて、最初の所に飛ばしたほうがよいと思います。本来、Do-Loopループで、"ship to" をさがすなら、ページめくりは不要なはずです。最初から検索させれば済むとは思います。

また、最初のほうに、
Application.ScreenUpdating = False
があるようですが、
Application.ScreenUpdating = True が見当たらないような気がしますが、必要に応じて、入れたほうが良いかもしれません。

p.s.やはり、昨日から、PCの問題ではなく私自身の調子がおかしいようです。だから、気をつけましたが、間違いがあるかもしれません。

--Page Before continuing--

'Word VBAの中だけの処理
'Sub getExcelTable()
'で、
'Call getExcelTable3
'とします。

'**もうひとつの案。''Excel のファイルを開かない方法(=Excelはマクロを使わない)
''どちらが良いかというよりも、セキュリティや検索の速さで決めたほうがよいです。
''言い換えると、Excel のファイルのThisWorkbookのPropety のIsAddinをTrueにして他人には見せない方法も可能です。

Sub getExcelTable3()
Dim wb As Object
Dim mPath As String
Dim mFrm As String
Dim y As Long
Co...続きを読む

Qexcel2003と他バージョンの違い(VBA)

エクセルのVBAをこれから学習しようと考えております。

学習の目的は仕事のためなのですが、
職場のバージョンはexcel2003です。

そのためexcel2003のvbaを学習しようと考えて
いるのですが・・・。

いづれは職場のexcelのバージョンも2013などの最新に
なることも頭の隅にあるため、どのバージョンでVBAを
学ぶべきか悩んでおります。

EXCEL2003でのVBAで覚えたスキルは、
EXCEL2007やEXCEL2013のVBAでもほとんど通用しますか?

宜しくお願い致します。

Aベストアンサー

無駄にはなりませんよ。

2003で出来ることは2010でも2013でも大体同様に出来ます。
なので、2003で動くものを作れたら以降のバージョンでも対応は出来ます。


ただし、エクセルのバージョンアップに伴って追加されていく機能に関しては
その都度、覚えていかなきゃいけません。

でもそれらは徐々に覚えていけば良いです。


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

人気Q&Aランキング

おすすめ情報