>>905 自力で 出来たかな?
出来たのなら良いんで 下記は無視してくれていい
※>新しく追加される画像のurlは予め分かるので、それをキーにして
この判断基準が示されてないので下記コードは適当に判断させてるのでそこは変えて
For Each ImgTag In ObjIE.Document.all.tags("IMG")
'画像のURL(ImgTag.src)をチェックして 処理対象か判断
If ImgTag.src Like "*123*" Then
'その親(Aタグになる)を参照する
Set Atag = ImgTag.parentElement
'クリック
Atag.Click
Exit For
End If
Next
上がダメなら
Atag.Click
↓
objIE.Navigate Atag.href
に変更してみるといいかも
変更してもダメなら 実際のURL(又はソース) 晒してくれんと難しいかも
>>911 ありがとございます。
ネットにまとめられてる物をコピペしてどうにかならないかなと思って始めたんだけど、
ちょっと無理そうなので、あと後この本買って読んでたんです。
http://www.amazon.co.jp/dp/B00CPGWYRE/ いろいろ新しい事も分かったんだけど、parentElementっていうので指定したIMGタグの前のタグの内容参照
できるっていうのは載ってなかったし、それ私のやりたかったことそのままズバリなのでうれしいです。
じゃ、がんばってみます。
返信くれた方みなさんありがとう。
VBAよりさきにHTMLの本買ってくるべきだったんじゃないか
あとDOM回りはJavaScriptの本が参考になるかもしれん
つか、ブラウザオブジェクト専用スレだれか立ててくれよと
>>913 HTMLはなんとなく分かってるつもりだったから必要ないかなって思ってたんですよね。
CSSとかそういうの分からないけどどうにかなるだろうって思ってて。。
結局その辺でうまく動かせなかったみたいだけど。
HTMLを操作するのはDOMっていうんですね。
DOMのプロパティ、メソッド一覧を検索したら色々出てきたんで参考になりそうです。ありがとう。
どうしても分からないので教えてください。
環境:Windows Vista SP2、Excel2007、IE9
参照設定:Microsoft Internet Controls、Microsoft HTML Object Library
これで、
Sub Test()
Dim ie As InternetExplorer
Dim doc As HTMLDocument
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.Navigate "
http://www.google.co.jp/"
Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE
DoEvents
Loop
Set doc = ie.Document
End Sub
を実行すると
Set doc = ie.Document の所で実行時エラー13「型が一致しません。」に
なってしまうのですが、原因が分かりません。
どうしたらエラーを解消できるのでしょうか。
>>915 うちでは、そのプログラムをそのままコピペして問題なく動いた
どっかで名前が被ってるんじゃない?
試しにOption Explicit入れてみるとか、ほかのプロシージャがまったくない環境で試してみるとか
完了判定があまい。
' WindowsAPIのSleep関数を使える様にする
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) ' 64ビットの場合
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
'IEの処理完了を待つ
'objIE = 対象のIEオブジェクト
Sub waitIE(ByRef objIE As Object)
Dim timeout As Date
timeout = Now + TimeSerial(0, 0, 10)
Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop
timeout = Now + TimeSerial(0, 0, 10)
Do Until objIE.Document.ReadyState = "complete"
DoEvents
Sleep 100
If Now > timeout Then
objIE.Refresh
timeout = Now + TimeSerial(0, 0, 10)
End If
Loop
End Sub
918 :
915:2014/11/09(日) 20:33:29.05 ID:bYYOkq7I
返信ありがとうございます。
とりあえずOption Explicitを入れ、他のプロシージャが無い環境で試しましたが、
エラーになりました。
917さんのwaitIEも組み込んでみたのですが、やはりエラーになってしまいます。
パソコンに問題があるんですかね・・・
919 :
デフォルトの名無しさん:2014/11/09(日) 21:11:53.48 ID:9syGSjJ1
>>918 型が違うんかね
Set doc = ie.Document
ここのところを
Dim d As Variant
Set d = ie.Document
Debug.Print TypeName(d)
こうして型を出力してみるのがいいと思います!
イミディエイトウィンドウには、HTMLDocumentと表示されます。
何か単純な見落としがあるのでしょうか。
うちでもそのコードのままならちゃんと動くな
OSとオフィスは全部32ビット?
なにかほかの参照設定があるとか?
922 :
915:2014/11/09(日) 23:19:47.10 ID:CuiATemi
OSはVista SP2 64bit版です。
Excelは2007なので、32bitかと。
お手数をおかけします・・・
>>915 "どっかで名前が被ってるんじゃないか?" ぐらいしか原因が思いうかばんよな
これでどうなります?
下は
>>915から変数定義を
@ie → x_Ie
Adoc → x_Doc
BAs HTMLDocument → As MSHTML.HTMLDocument
にしただけ(変数名が 変なのは あえてそうしてます)
Option Explicit
Sub test()
Dim x_Ie As InternetExplorer
Dim x_Doc As MSHTML.HTMLDocument
Set x_Ie = CreateObject("InternetExplorer.Application")
x_Ie.Visible = True
x_Ie.Navigate "
http://www.google.co.jp/"
Do While x_Ie.Busy Or x_Ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Set x_Doc = x_Ie.Document
End Sub
これでもしOKなら
1つずつ元に戻してテストして
エラーになったらそれが原因かな?
たぶん Navigate2 を使うとうまくいくような気がする。
>>922 64ビットOSだと、IEも32ビットと64ビット両方あったはずだけど
CreateObject("InternetExplorer.Application") だとどっちのIE上がってるんだろうな
>>923 だったら
As InternetExplorer も
As SHDocVw.InternetExplorer
にしてみればいいんじゃないかと
926 :
915:2014/11/10(月) 06:20:59.45 ID:gPwXD5b/
923は相変わらずエラーになります。
Navigate2でもエラーでした。
As SHDocVw.InternetExplorerにしてもダメでした。
IEは32bitが上がってます。
ネットにはちゃんとつながってるの?
テスト用のURLをGoogle以外にしてない?
MSHTMLとSHDocVwの細かいバージョン違いかな?
COMで使うHTMLDocument って結構怪しくて、IHTMLDocument2だったり4だったりにしないとダメな時もあったり
ie.DocumentはObject型で定義されてるんだよな
docをObjectで宣言しとけば動くとおもうけど
929 :
915:2014/11/10(月) 23:10:11.52 ID:9JtejioH
ネットには繋がっています。
テスト用URLはGoogleにしてますし、Googleも表示されます。
Objectにすると、とりあえずは動くのですが、後工程で
書き込みできません。とエラーが出てしまいます・・・
とりあえずIEやHTML関係の知識が足りてないことが分かりましたので、
諦めます。
皆さまありがとうございました。
VISTAを投げ捨てろ。たぶんこれ。
VBAを投げ捨てろ。たぶんこれ
人生を投げ捨てろ。たぶんこれ
933 :
デフォルトの名無しさん:2014/12/12(金) 18:13:07.94 ID:7Cw2fker
人生投げ捨てた末路が
>>932だと思うと
その効果の程は疑わしい
■――――――――――――――――――――――――――――■
そもそも“マクロ”とは何か?
■――――――――――――――――――――――――――――■
“マクロ”とは、パソコンで仕事や、何かビジネスをされている方
にとってはとても便利なものです。マクロを使うと、これまで何時
間も掛けてやっていた大量データのパソコン作業が一瞬で終わりま
す。しかも、一度マクロを組んでしまえばマクロは決して人間のよ
うなミスは一切しないというスグレモノなのです。
ですから、自分でマクロを組めるようになると、早くて正確な仕事
のできる人になれますし、当然、ミスも無くなります。
また、企業が求める人材となり、転職・再就職が断然有利になると
いうことは言うまでもありません。
■――――――――――――――――――――――――――――■
“マクロ”(=プログラミング)は勝ち組の共通スキルだ!
■――――――――――――――――――――――――――――■
将来のためにも「プログラミング」のスキルを身に付けておく、
ITで勝利する為の武器を備えておく、これは今時の成功者には皆
共通するスキルです。
あのアップルのスティーブ・ジョブスも、マイクロソフトのビル・
ゲイツも、Facebookのマーク・ザッカーバーグも、ソフトバンクの
孫社長も、mixiの笹原社長も、グリーの田中社長も…皆さんそこを
通って来ました。彼らが大富豪になるために共通して持っていたス
キル、それが「プログラミング」なのです。
自分の意思で自由にパソコンに仕事をさせる「自分のアイデアを実
現する手段を手にする」これこそが重要、且つ、必修なワケです。
それがあって、且つ、何かよいアイデアを思いついた人だけが、そ
れこそ数千億円の資産を手にする大金持ちの成功者となって行くの
です。アイデアだけではダメなのです。その実現手段であるスキル
を持っているということが非常に重要になるのです。
あなたはパソコンをただ“使うだけ”の人でいいのですか?
うぜえ
>>934-935 いきなりどうした?
どこかのスレでマクロ云々でボコられて悔しかったのか? w
VBA程度のモノを崇高なモノと崇めすぎw
VBAなんてスキーとかバイクみたいなものだよ
現時点で全ての人が出来るわけじゃないし、極めるのはそれなりに難しいが
本気でやろうと思って尚、全く出来ない奴など殆ど居ないような程度のもの
それに、マクロは仕様に対してはミスはしないが、やりたいことに対しての錯誤は起り
それは目的に対してはミスと同じもの
だってマクロは人間が組むものだから、マクロはミスしなくてもマクロを組む人間がミスしたら
マクロが返す結果にもミスが起るし、マクロがいくら仕様に忠実でも、小数誤差のように
仕様自体が人間の一般的な要求と一致してない場合、その仕様を把握して対策をしなければ
結局目的に対して結果が錯誤することになる
それに、大事なのは言語知識よりも発想発案能力で、その出力先がプログラムコードじゃなく
芸術だったり経営計画だったりしても、優れた発想発案能力を持つものは成功するし
いくら言語知識に精通していても、与えられた仕様を忠実にコード化するだけで
自分で優れた発想発案が出来ない奴は、プログラミングが出来てもTI奴隷、IT家畜留まりだよ
と、夢見すぎなアフォに、つい熱く語ってしまったw
レスの長さと内容が反比例してる典型例だな
普段から錯誤なんて言ってるんだろうか?
残念な人はわざわざこういう言葉使いたがる
TexusInstruments怖い。
942 :
デフォルトの名無しさん:2015/02/01(日) 10:32:17.89 ID:Yfq6qaDG
まじゅうこわい
943 :
デフォルトの名無しさん:2015/02/01(日) 10:32:43.44 ID:Yfq6qaDG
まんじゅうこわい
最初に無があった
無から有が生まれた
これが全ての真理
まとめてうぜぇ
否定は出来ても反論は出来ずに食って掛かるだけの奴って虚しいなw
ていうかこんなんでどう話を膨らませろと言うんだ?
AddressOf ってイミディエイトウィンドウからは使えないんでしょうか?
Excel2007なんだけど、モジュール内で普通に使えてるものがイミディエイトからだと
「AddressOf オペレーターの使い方が適切ではありません。」というメッセージが出ます。
foo(arg, AddressOf fun)
foo(arg, VBA.CLng(AddressOf fun) )
モジュール内で上が正しく動く状態で、イミディエイトではどちらもダメ。
>>948 イミディエイトで動かないのはAddressOfの仕様っぽい
インスタンスの関係かなと思ってブレークポイント設定してみたけどダメだったし
>>949 どうもありがとう
諦めることにします。
ぐぐってもなんの情報も出てこなかったし、これではまった人が誰もいないのかな?
>>950 どうしても知りたいなら直前で変数に入れとけばいいしな
そもそもそんな状況になったことないけど
OutlookのVBAって使ってる?
>>953 メールの振り分けにだけ使ってる
標準の振り分け機能が貧弱で糞すぎるからな
家ではOutlook自体使ってないが、会社ではOutlookが指定なので仕方なく
定期的なメール送信とかは、OutlookではなくExcelのVBAからCDO.Messageを使ってる
特にExcelのファイルを添付してメールを送るようなものはね
ウチも自社製からoutlookに変わるしかも2010w
使い方覚えるために自宅用に買おうとしても
もう怪しげな通販ぐらいしか売っているところがねーよ。
365契約すれば古いバージョンも入れられるのか?
365は最新だけ
今なら2013だし、新しいのが出たらすぐに切り替わる
なんで今さら2010
とりあえずオクで売ってるのはバンドルの横流しだから認証は通るよ
ライセンス的にはアウトだけど
957 :
560:2015/03/06(金) 06:53:28.40 ID:n9/U+gAr
>>956 > なんで今さら2010
会社だと動作確認(特に Excel VBA)とかも必要だし、ホイホイ最新版にはできなかったりする
うちも標準は 2010 だし、半年前までは 2007 も新規インストールできた(一応 EA 契約してるから 2013 も使えるけど)
もののできとしては 2010 は結構最悪の部類なので、でかい会社ならダメ元で情シスとかに 2013 はダメなの? って聞いてみるのもいいかも
今さらジロー
959 :
デフォルトの名無しさん:2015/03/09(月) 23:48:59.02 ID:7i5N+fBw
エクセルの最後の行の次の業を選択するマクロというかコードってありますかね?
例えば、
1:あいうえを
2:かきくけこ
3:さしすてそ
4:
とあって、4行目にたちつてとと入力するようなマクロを組みたい場合に
使えるようなマクロなのですが・・・
>>959 Cells(Rows.Count, "A").End(xlUp).Select
If Selection.Text <> "" Then Selection.Offset(1).Select
Selection = "たちつてと"