VBAなんでも質問スレ

このエントリーをはてなブックマークに追加
911デフォルトの名無しさん:2014/11/03(月) 21:46:38.79 ID:Umtu/gcR
>>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(又はソース) 晒してくれんと難しいかも
912デフォルトの名無しさん:2014/11/04(火) 16:36:30.39 ID:NYEGko4A
>>911
ありがとございます。

ネットにまとめられてる物をコピペしてどうにかならないかなと思って始めたんだけど、
ちょっと無理そうなので、あと後この本買って読んでたんです。
http://www.amazon.co.jp/dp/B00CPGWYRE/

いろいろ新しい事も分かったんだけど、parentElementっていうので指定したIMGタグの前のタグの内容参照
できるっていうのは載ってなかったし、それ私のやりたかったことそのままズバリなのでうれしいです。

じゃ、がんばってみます。
返信くれた方みなさんありがとう。
913デフォルトの名無しさん:2014/11/04(火) 20:17:53.66 ID:v0C//jJN
VBAよりさきにHTMLの本買ってくるべきだったんじゃないか
あとDOM回りはJavaScriptの本が参考になるかもしれん

つか、ブラウザオブジェクト専用スレだれか立ててくれよと
914デフォルトの名無しさん:2014/11/05(水) 16:51:58.30 ID:8yVwR8VU
>>913
HTMLはなんとなく分かってるつもりだったから必要ないかなって思ってたんですよね。
CSSとかそういうの分からないけどどうにかなるだろうって思ってて。。

結局その辺でうまく動かせなかったみたいだけど。

HTMLを操作するのはDOMっていうんですね。
DOMのプロパティ、メソッド一覧を検索したら色々出てきたんで参考になりそうです。ありがとう。
915デフォルトの名無しさん:2014/11/09(日) 19:07:15.12 ID:bYYOkq7I
どうしても分からないので教えてください。

環境: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「型が一致しません。」に
なってしまうのですが、原因が分かりません。

どうしたらエラーを解消できるのでしょうか。
916デフォルトの名無しさん:2014/11/09(日) 19:20:12.35 ID:XD0yYqPY
>>915
うちでは、そのプログラムをそのままコピペして問題なく動いた
どっかで名前が被ってるんじゃない?
試しにOption Explicit入れてみるとか、ほかのプロシージャがまったくない環境で試してみるとか
917デフォルトの名無しさん:2014/11/09(日) 19:50:02.35 ID:l6xIdWWi
完了判定があまい。

' 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
918915: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)

こうして型を出力してみるのがいいと思います!
920デフォルトの名無しさん:2014/11/09(日) 22:15:08.14 ID:wHnpXD4s
イミディエイトウィンドウには、HTMLDocumentと表示されます。
何か単純な見落としがあるのでしょうか。
921デフォルトの名無しさん:2014/11/09(日) 22:17:43.11 ID:pLP/Mh4B
うちでもそのコードのままならちゃんと動くな

OSとオフィスは全部32ビット?
なにかほかの参照設定があるとか?
922915:2014/11/09(日) 23:19:47.10 ID:CuiATemi
OSはVista SP2 64bit版です。
Excelは2007なので、32bitかと。

お手数をおかけします・・・
923デフォルトの名無しさん:2014/11/10(月) 00:06:49.63 ID:z7aClQLS
>>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つずつ元に戻してテストして
エラーになったらそれが原因かな?
924デフォルトの名無しさん:2014/11/10(月) 00:16:31.19 ID:uecfPeMa
たぶん Navigate2 を使うとうまくいくような気がする。
925デフォルトの名無しさん:2014/11/10(月) 02:55:02.00 ID:+hnXo7v4
>>922
64ビットOSだと、IEも32ビットと64ビット両方あったはずだけど
CreateObject("InternetExplorer.Application") だとどっちのIE上がってるんだろうな

>>923
だったら
As InternetExplorer も
As SHDocVw.InternetExplorer
にしてみればいいんじゃないかと
926915:2014/11/10(月) 06:20:59.45 ID:gPwXD5b/
923は相変わらずエラーになります。
Navigate2でもエラーでした。
As SHDocVw.InternetExplorerにしてもダメでした。

IEは32bitが上がってます。
927デフォルトの名無しさん:2014/11/10(月) 07:18:20.31 ID:aSG9FVaj
ネットにはちゃんとつながってるの?
テスト用のURLをGoogle以外にしてない?
928デフォルトの名無しさん:2014/11/10(月) 13:24:06.01 ID:+hnXo7v4
MSHTMLとSHDocVwの細かいバージョン違いかな?
COMで使うHTMLDocument って結構怪しくて、IHTMLDocument2だったり4だったりにしないとダメな時もあったり
ie.DocumentはObject型で定義されてるんだよな
docをObjectで宣言しとけば動くとおもうけど
929915:2014/11/10(月) 23:10:11.52 ID:9JtejioH
ネットには繋がっています。
テスト用URLはGoogleにしてますし、Googleも表示されます。

Objectにすると、とりあえずは動くのですが、後工程で
書き込みできません。とエラーが出てしまいます・・・

とりあえずIEやHTML関係の知識が足りてないことが分かりましたので、
諦めます。

皆さまありがとうございました。
930デフォルトの名無しさん:2014/11/11(火) 20:22:58.57 ID:gCIP5OCR
VISTAを投げ捨てろ。たぶんこれ。
931デフォルトの名無しさん:2014/11/27(木) 10:24:11.52 ID:pN0lS+lX
VBAを投げ捨てろ。たぶんこれ
932デフォルトの名無しさん:2014/11/27(木) 20:53:43.99 ID:xl4clNpl
人生を投げ捨てろ。たぶんこれ
933デフォルトの名無しさん:2014/12/12(金) 18:13:07.94 ID:7Cw2fker
人生投げ捨てた末路が>>932だと思うと
その効果の程は疑わしい
934デフォルトの名無しさん:2015/02/01(日) 00:25:53.59 ID:kv5uaIu+
■――――――――――――――――――――――――――――■
そもそも“マクロ”とは何か?
■――――――――――――――――――――――――――――■
“マクロ”とは、パソコンで仕事や、何かビジネスをされている方
にとってはとても便利なものです。マクロを使うと、これまで何時
間も掛けてやっていた大量データのパソコン作業が一瞬で終わりま
す。しかも、一度マクロを組んでしまえばマクロは決して人間のよ
うなミスは一切しないというスグレモノなのです。
ですから、自分でマクロを組めるようになると、早くて正確な仕事
のできる人になれますし、当然、ミスも無くなります。
また、企業が求める人材となり、転職・再就職が断然有利になると
いうことは言うまでもありません。
935デフォルトの名無しさん:2015/02/01(日) 00:26:40.51 ID:kv5uaIu+
■――――――――――――――――――――――――――――■
“マクロ”(=プログラミング)は勝ち組の共通スキルだ!
■――――――――――――――――――――――――――――■
将来のためにも「プログラミング」のスキルを身に付けておく、
ITで勝利する為の武器を備えておく、これは今時の成功者には皆
共通するスキルです。
あのアップルのスティーブ・ジョブスも、マイクロソフトのビル・
ゲイツも、Facebookのマーク・ザッカーバーグも、ソフトバンクの
孫社長も、mixiの笹原社長も、グリーの田中社長も…皆さんそこを
通って来ました。彼らが大富豪になるために共通して持っていたス
キル、それが「プログラミング」なのです。
自分の意思で自由にパソコンに仕事をさせる「自分のアイデアを実
現する手段を手にする」これこそが重要、且つ、必修なワケです。
それがあって、且つ、何かよいアイデアを思いついた人だけが、そ
れこそ数千億円の資産を手にする大金持ちの成功者となって行くの
です。アイデアだけではダメなのです。その実現手段であるスキル
を持っているということが非常に重要になるのです。
あなたはパソコンをただ“使うだけ”の人でいいのですか?
936デフォルトの名無しさん:2015/02/01(日) 06:39:13.32 ID:Zdr4/0x6
うぜえ
937デフォルトの名無しさん:2015/02/01(日) 07:30:07.69 ID:Oy9MlKBG
>>934-935
いきなりどうした?
どこかのスレでマクロ云々でボコられて悔しかったのか? w
938デフォルトの名無しさん:2015/02/01(日) 07:45:38.16 ID:5BKa3ERO
VBA程度のモノを崇高なモノと崇めすぎw

VBAなんてスキーとかバイクみたいなものだよ
現時点で全ての人が出来るわけじゃないし、極めるのはそれなりに難しいが
本気でやろうと思って尚、全く出来ない奴など殆ど居ないような程度のもの

それに、マクロは仕様に対してはミスはしないが、やりたいことに対しての錯誤は起り
それは目的に対してはミスと同じもの
だってマクロは人間が組むものだから、マクロはミスしなくてもマクロを組む人間がミスしたら
マクロが返す結果にもミスが起るし、マクロがいくら仕様に忠実でも、小数誤差のように
仕様自体が人間の一般的な要求と一致してない場合、その仕様を把握して対策をしなければ
結局目的に対して結果が錯誤することになる

それに、大事なのは言語知識よりも発想発案能力で、その出力先がプログラムコードじゃなく
芸術だったり経営計画だったりしても、優れた発想発案能力を持つものは成功するし
いくら言語知識に精通していても、与えられた仕様を忠実にコード化するだけで
自分で優れた発想発案が出来ない奴は、プログラミングが出来てもTI奴隷、IT家畜留まりだよ


と、夢見すぎなアフォに、つい熱く語ってしまったw
939デフォルトの名無しさん:2015/02/01(日) 09:55:15.70 ID:MAX0CYaX
レスの長さと内容が反比例してる典型例だな
940デフォルトの名無しさん:2015/02/01(日) 10:00:00.48 ID:np8qOWbD
普段から錯誤なんて言ってるんだろうか?
残念な人はわざわざこういう言葉使いたがる
941デフォルトの名無しさん:2015/02/01(日) 10:05:09.75 ID:Gotp+xwX
TexusInstruments怖い。
942デフォルトの名無しさん:2015/02/01(日) 10:32:17.89 ID:Yfq6qaDG
まじゅうこわい
943デフォルトの名無しさん:2015/02/01(日) 10:32:43.44 ID:Yfq6qaDG
まんじゅうこわい
944 ◆cqxclbaQk/hG :2015/02/01(日) 15:27:08.28 ID:OUuPbdIp
最初に無があった
無から有が生まれた
これが全ての真理
945デフォルトの名無しさん:2015/02/01(日) 19:08:05.83 ID:Zdr4/0x6
まとめてうぜぇ
946デフォルトの名無しさん:2015/02/01(日) 20:15:27.83 ID:XIt3wRQF
否定は出来ても反論は出来ずに食って掛かるだけの奴って虚しいなw
947デフォルトの名無しさん:2015/02/01(日) 21:15:31.51 ID:Zdr4/0x6
ていうかこんなんでどう話を膨らませろと言うんだ?
948デフォルトの名無しさん:2015/02/02(月) 23:01:39.16 ID:Ky9zZXbI
AddressOf ってイミディエイトウィンドウからは使えないんでしょうか?
Excel2007なんだけど、モジュール内で普通に使えてるものがイミディエイトからだと
「AddressOf オペレーターの使い方が適切ではありません。」というメッセージが出ます。
foo(arg, AddressOf fun)
foo(arg, VBA.CLng(AddressOf fun) )
モジュール内で上が正しく動く状態で、イミディエイトではどちらもダメ。
949デフォルトの名無しさん:2015/02/10(火) 03:33:53.67 ID:XPNPmoVX
>>948
イミディエイトで動かないのはAddressOfの仕様っぽい
インスタンスの関係かなと思ってブレークポイント設定してみたけどダメだったし
950デフォルトの名無しさん:2015/02/10(火) 08:23:49.97 ID:YAJNRvh1
>>949
どうもありがとう
諦めることにします。
ぐぐってもなんの情報も出てこなかったし、これではまった人が誰もいないのかな?
951デフォルトの名無しさん:2015/02/10(火) 21:36:15.70 ID:lUQoznh3
>>950
どうしても知りたいなら直前で変数に入れとけばいいしな
そもそもそんな状況になったことないけど
952デフォルトの名無しさん:2015/02/12(木) 09:04:06.49 ID:N08fUAK5
>>951
イミディエイトをシェル的に使う
953デフォルトの名無しさん:2015/03/04(水) 19:05:41.38 ID:NvqfS5Cw
OutlookのVBAって使ってる?
954デフォルトの名無しさん:2015/03/05(木) 04:09:24.11 ID:vzxIr8j6
>>953
メールの振り分けにだけ使ってる
標準の振り分け機能が貧弱で糞すぎるからな
家ではOutlook自体使ってないが、会社ではOutlookが指定なので仕方なく

定期的なメール送信とかは、OutlookではなくExcelのVBAからCDO.Messageを使ってる
特にExcelのファイルを添付してメールを送るようなものはね
955デフォルトの名無しさん:2015/03/05(木) 23:29:19.30 ID:6KN3KVMD
ウチも自社製からoutlookに変わるしかも2010w
使い方覚えるために自宅用に買おうとしても
もう怪しげな通販ぐらいしか売っているところがねーよ。
365契約すれば古いバージョンも入れられるのか?
956デフォルトの名無しさん:2015/03/05(木) 23:51:42.89 ID:QdpryhrY
365は最新だけ
今なら2013だし、新しいのが出たらすぐに切り替わる

なんで今さら2010
とりあえずオクで売ってるのはバンドルの横流しだから認証は通るよ
ライセンス的にはアウトだけど
957560:2015/03/06(金) 06:53:28.40 ID:n9/U+gAr
>>956
> なんで今さら2010

会社だと動作確認(特に Excel VBA)とかも必要だし、ホイホイ最新版にはできなかったりする
うちも標準は 2010 だし、半年前までは 2007 も新規インストールできた(一応 EA 契約してるから 2013 も使えるけど)
もののできとしては 2010 は結構最悪の部類なので、でかい会社ならダメ元で情シスとかに 2013 はダメなの? って聞いてみるのもいいかも
958デフォルトの名無しさん:2015/03/07(土) 19:41:49.77 ID:G+snOoOp
今さらジロー
959デフォルトの名無しさん:2015/03/09(月) 23:48:59.02 ID:7i5N+fBw
エクセルの最後の行の次の業を選択するマクロというかコードってありますかね?
例えば、

1:あいうえを
2:かきくけこ
3:さしすてそ
4:

とあって、4行目にたちつてとと入力するようなマクロを組みたい場合に
使えるようなマクロなのですが・・・
960デフォルトの名無しさん
>>959
Cells(Rows.Count, "A").End(xlUp).Select
If Selection.Text <> "" Then Selection.Offset(1).Select
Selection = "たちつてと"