Excel VBA 質問スレ Part49©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/06/26(月) 02:15:14.60ID:T3ylemnb0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part48
http://mevius.2ch.net/test/read.cgi/tech/1494890685/

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/07/26(水) 18:33:38.33ID:+1cN/gIlH
>>541
オブジェクト指向の一切を封じられてるから使いづらいというのなら、それはそうでもないってことさ
機能が足りないというんなら、先人が作ったライブラリでも探せば?
https://github.com/rubberduck203/VBEX とか
547デフォルトの名無しさん (ササクッテロル Sp1b-8s/R)
垢版 |
2017/07/26(水) 18:41:04.50ID:VQAVDfi4p
>>545
設計と言語両方じゃね?
2017/07/26(水) 19:21:44.23ID:rbCQuCda0
>>540
自作クラスってどういう時に使うの?
excelが思いっきりオブジェクトだから、それに対する手続き的な操作しかしないわ
2017/07/26(水) 19:28:41.05ID:ecs8OXuXd
>>548
状態を持ったモノを扱いたいときじゃね?
状態を持たないんだったら関数の組み合わせで表現するのは簡単だ。
2017/07/26(水) 19:39:55.05ID:pjdGyN9QM
>>534
言語で仕事選べるとか無職の発送は素晴らしいな w
551デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/26(水) 19:42:18.93ID:W1HWCg900
>>549
状態を持つ⇒オブジェクトを使う
対偶は
オブジェクトを使わない⇒状態を持たない

対偶は必ず真とはいえなくない?
2017/07/26(水) 19:45:32.31ID:pjdGyN9QM
>>548
ログクラスとか作ってたな
書き込むシートと書き込む行を別々に管理するのは嫌だったから
でも継承もできないしコンストラクタの引数も持てない状況ではあまり使いやすくならないし結局クラスはほとんど使わない
そもそも俺がずっと保守するわけにもいかんから
2017/07/26(水) 19:45:44.80ID:19gyZHTT0
>>547
オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから、
言語によってオブジェクト指向が決まるわけではないし、言語に対する概念というと違うと思うなぁ。

>>550
募集要項に何の言語が出来るかとか普通書いてないか?
Javaで募集かけたけどC#での開発がメインですみたいなカオスな職場もあんまりないだろ。
2017/07/26(水) 19:46:32.77ID:+NZ2Dbuu0
>>544
オブジェクト指向をサポートしてるかって話だよ
なんとなく分かるべ
>>546
ことさ、じゃなくてさ
俺はそういうところがクソだと言ってるの
クソはクソでも使わなきゃいから使うだけで
ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん
2017/07/26(水) 19:52:11.21ID:rbCQuCda0
>>552
ログはfunctionだなぁ
コンストラクタ使えないと、わざわざNewしてクラス無いメソッド呼び出してって二度手間じゃね。
functionならいつでもどこでも一行で済む
2017/07/26(水) 19:53:00.06ID:ecs8OXuXd
>>551
⇒(ならば)とは言ってないけどな

まあ、オブジェクトを使わない⇒状態を持たせづらい(グローバル変数を使うはめになる)

あくまでVBAでの話だよ
2017/07/26(水) 19:53:37.44ID:rbCQuCda0
>>549
例えば、具体的にどういう時に使うの?
状態って言っても初期値とかExcelから拾ってくるから、それをわざわざclassにほーり込むのもなー
558デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/26(水) 19:56:29.43ID:W1HWCg900
>>553
オブジェクト指向言語は
オブジェクト指向設計したものを
そのまま実装し易い言語じゃないかな

言語の概念でもあると思うけどな

オブジェクト指向言語じゃなくても実装できるのは確かだけど
それならVBAでもオブジェクト指向設計を実装できるんじゃないかな
2017/07/26(水) 19:57:08.36ID:ecs8OXuXd
>>557
初期値より途中の経緯を記憶しておかないと次の計算ができないものとか?
「ワークシートに書き出す」じゃ再利用性に欠ける
2017/07/26(水) 20:08:20.48ID:rbCQuCda0
>>559
だから具体的にどんなことをするんだよw
ゲームとかはナシでね

ちと思いつかない
561デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/26(水) 20:09:21.78ID:W1HWCg900
>>556
グローバル変数を使わなくても状態を表現できるんじゃね?

例えば再帰関数みたいに状態を引数にするとか
2017/07/26(水) 20:11:22.90ID:pjdGyN9QM
>>553
> オブジェクト指向言語は「オブジェクト指向的な設計が可能な言語」の事だから
そんなことを言い出したらアセンブリ言語でもオブジェクト指向は可能だよ
そういう極端な話をしたい訳じゃないんだと思うよ

> >>550
> 募集要項に何の言語が出来るかとか普通書いてないか?
ああ、そういう働き方してるひとなのね
もっとでっかい案件レベルのつもりだったから話が噛み合わないのも無理ないな
2017/07/26(水) 20:12:48.62ID:pjdGyN9QM
>>555
書き込み行はどうやって覚えてるの?
複数のログを扱うとか面倒じゃね?
2017/07/26(水) 20:15:20.68ID:pjdGyN9QM
>>558
> それならVBAでもオブジェクト指向設計を実装できるんじゃないかな
関数ポインタがないから継承とか無理じゃね?
565デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/26(水) 20:15:48.34ID:W1HWCg900
状態を持つ必要がある入出力関係が
独立に多数ある場合は
クラスを使うと比較的実装が簡単になるのかな?
2017/07/26(水) 20:17:56.75ID:rbCQuCda0
>>563
ログはlogシート一つ、3列

時間 / タイプ / 内容
7/26 20:00 log 作業開始
7/26 20:05 success 作業成功
7/26 20:07 error err.discriptionの内容
7/26 20:10 log 作業終了

で、書き込む時に毎回A列の最終行を取得し、そこに記録してる
覚える必要はないと思う
2017/07/26(水) 20:24:18.05ID:+NZ2Dbuu0
表の検索とかsqlでやる人もいるんだろうけど自分としてはクラスにしちゃうのがしっくりくるわ
配列の操作もクラスにしてると楽
あと、似たような処理で操作する対象が違うメソッドなんかは同じ名前にしても問題ないところとかも地味に便利だよ
関数だと命名に困ることがよくある
2017/07/26(水) 20:30:27.76ID:ecs8OXuXd
>>560
さあ?いろいろあるでしょ
数値を放り込むとその度に回数をカウントアップし、最大値・最小値、合計、時刻を記録する、とか。
これくらいだったらワークシートでもできるけど、そういう対象が数多くなるとオブジェクト配列でやりたくなる。
どのワークシートのどこに?とか考える必要なくなるしエクセル以外のOfficeでも使えるし。
569デフォルトの名無しさん (ワッチョイ a791-8s/R)
垢版 |
2017/07/26(水) 20:51:20.79ID:W1HWCg900
>>564
一般的な形では難しいかもしれないけど
サブクラスに相当する関数から
スーパークラスに相当する関数を呼べばいいんじゃね?

逆にスーパークラスに相当する関数に
スイッチみたいな引数を付けて
サブクラスに相当する関数に分岐するとか
2017/07/26(水) 21:00:52.52ID:7P86XL9W0
>>567
SQLを使うのって速度的な理由。
自作クラスでSQL以上のスピードが出るなら、
みんなそうするわ。
2017/07/26(水) 21:20:54.79ID:19gyZHTT0
>>558
VBAで出来ないと思っているならオブジェクト指向を何か勘違いしているからオブジェクト指向設計の本を読むといいよ。
他の言語みたいな書き方が出来ないだけで、VBAでもオブジェクト指向プログラミングは普通に出来るから。
2017/07/26(水) 21:34:48.38ID:+NZ2Dbuu0
>>570
まあ、あんまり大きなデータは扱わんからな
別に検索する形式が決まってるなら内部的にsqlで値抜き出してもいいわけだし
データの塊をオブジェクトとして扱っちゃったほうが何かまとまり感あってしっくり来るって感じかな
2017/07/26(水) 21:36:24.28ID:+NZ2Dbuu0
>>571
できるできないの話じゃないんだって
あとオーバーライドはちょっと厳しくないか
どうやって実装する?
2017/07/26(水) 21:54:31.59ID:kYPrva630
>>564
AddressOf あるし使おうと思えば使える
2017/07/26(水) 22:02:04.56ID:19gyZHTT0
>>573
自身のメンバとして基底クラスを宣言して、基底クラスに自身を登録して、
基底クラスのメソッドを実行すると基底クラス側で自身の特定のメソッドが呼ばれるとかかな。
2017/07/26(水) 22:05:43.16ID:gz+R3HSW0
>>569
さすがにそれはないわ...
2017/07/26(水) 22:09:54.70ID:gz+R3HSW0
>>574
アドレス取るのはいいけどどうやって使うつもり?
2017/07/26(水) 22:32:43.94ID:kYPrva630
>>577
ごめんVBAから直接には使えなかった
2017/07/26(水) 23:08:50.27ID:+wB1yzpw0
>>511
officeも何もなくてもc#書けるけど。
コンパイラ初めからあるから。
2017/07/26(水) 23:11:34.30ID:+wB1yzpw0
vbaでオブジェクト指向とか中級者がやることだな。
初心者よりタチ悪いこともある。
2017/07/26(水) 23:58:17.75ID:kYPrva630
上級者はなにするんだ?
582デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 00:50:19.96ID:Gu8HEug70
>>576
なぜ?
で、どうするの?
583デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 01:05:44.74ID:Gu8HEug70
>>571
VBAと言う言語にクラスとかオブジェクト指向の概念が入っている
つまりオブジェクト指向の概念は言語にもつながる
と言う主張

一方でオブジェクト指向は設計にのみ関わる概念と言う主張もある

オブジェクト指向の概念を取り入れた言語でオブジェクト指向設計したものを実現するのと
オブジェクト指向の概念がない言語で実現するのでは
生産性とかに差が生じるだろう
2017/07/27(木) 01:36:25.07ID:Ddw23w1u0
>>581
上級者はvbaは大人しく手続き型的にやるよ。

オブジェクト指向しようとして、これできないかなーあれできないかなーとか悩むだけ無駄。
585デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 01:54:44.40ID:Gu8HEug70
>>584
各シートの統計情報を取りたい時はどうする?
例えば、セルを更新した回数、最大値、最小値、平均値
を各シート毎に知りたい時

後から分散とか標準偏差とかも知りたくなったらどうする?
586(ワッチョイ 0fcf-GNib)
垢版 |
2017/07/27(木) 02:24:19.55ID:lqCZB24a0
Youtuberヒカルが月収を明らかに!!おはよう朝日です出演
https://www.youtube.com/watch?v=RLZGrqQnnZc
第1回案件王ランキング!YouTuberで1番稼いでるのは誰だ!
https://www.youtube.com/watch?v=asF2wQ2xhjY&;t=61s
ユーチューバーの儲けのカラクリを徹底検証!
https://www.youtube.com/watch?v=FUSb4erJSXE&;t=504s
【給料公開】チャンネル登録者4万人突破記念!YouTuberの月収公開!
https://www.youtube.com/watch?v=Y7DAQ0RKilM&;t=326s
誰も言わないなら俺がYouTuberのギャラ相場を教えます
https://www.youtube.com/watch?v=E4q-vaQh2EQ&;t=118s
YouTuberになりたいのは馬鹿じゃない!YouTuberになる方法
https://www.youtube.com/watch?v=Fr0WXXZRMSQ

最高月収5000万円だとさ。年収じゃなくて「月収」な
おまえらもyoutubeに動画投稿したほうがいい
顔出したくないならラファエルみたいに仮面かぶればいい
手っ取り早く視聴数稼ぐには有名ユーチューバーへの物申す系動画がオススメ
2017/07/27(木) 04:56:34.97ID:Ddw23w1u0
>>585
クラスやらユーザ定義型を作るね。
2017/07/27(木) 05:41:33.30ID:8/6stQ5Xr
>>584
つ 上級者の定義
589デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 06:25:09.17ID:Gu8HEug70
>>587
クラスってオブジェクト指向じゃないの?

上級者的に手続き型でやらないの?
2017/07/27(木) 06:47:24.74ID:P1js1uXhM
>>582
> なぜ?

> 逆にスーパークラスに相当する関数に
> スイッチみたいな引数を付けて
> サブクラスに相当する関数に分岐するとか
サブクラスを増やす度にスーパークラスに手を入れるつもりなの?
真顔で言ってるなら単なるアホだろ w

> で、どうするの?
無理じゃね?
って書いてあるんだが...
2017/07/27(木) 07:00:09.74ID:P1js1uXhM
>>585
> 各シートの統計情報を取りたい時はどうする?
要件次第

> 例えば、セルを更新した回数、最大値、最小値、平均値
> を各シート毎に知りたい時
更新回数以外は全セルなめて計算することもあるしイベント毎に合計、最大、最小を更新していくのもあるだろうな

> 後から分散とか標準偏差とかも知りたくなったらどうする?
そういう機能を実装するだけ
イベント以外はオブジェクト指向関係ないと思うぞ
592デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 07:12:45.05ID:Gu8HEug70
>>590
でいちいち同じ処理をコピペするの?
593デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 07:13:37.01ID:Gu8HEug70
>>591
生産性が違うんじゃね?
594デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 07:15:00.43ID:Gu8HEug70
>>591
全セルなめるとか性能要件を満たせなくなる可能性が高いだろ
2017/07/27(木) 07:17:39.18ID:mlaDFoVL0
>>594
それはその時に考えたほうが良いと思う
大体
> 例えば、セルを更新した回数、最大値、最小値、平均値
> を各シート毎に知りたい時
こんな状態がまずないw
596デフォルトの名無しさん (ワッチョイ db91-ntdb)
垢版 |
2017/07/27(木) 07:17:56.55ID:Gu8HEug70
>>590
サブクラスからスーパークラスを呼ぶ方は?
2017/07/27(木) 07:37:59.47ID:P1js1uXhM
>>592
どこからコピペが出てきたのか意味不明

>>593-594
だから「要件次第」って書いてあるんだが
最初に一度はなめないといけないから一回しか呼ばれないと言う要件ならその方が効率的だし

>>596
それになんの意味があるんだ?
マジでオブジェクト指向の基礎からやり直した方がいいレベルだぞ
2017/07/27(木) 07:40:20.87ID:Ddw23w1u0
>>589
そうだよ。
データ構造だけ定義するんだよ。
2017/07/27(木) 08:16:42.60ID:LMuXn2N9a
>>575
結局それだと要らんもんまで呼び出したり不便なんだよ
やれんことはないけど不便
オーバーロードもやれんことはないけど実装がめんどくさい
使いたい場面は結構出てくると思うけどね
インターフェースもなんかスマートじゃないし
2017/07/27(木) 08:50:43.35ID:f8l+azOG0
お前らスレタイ読んで他所へ行け
2017/07/27(木) 09:44:44.74ID:cQuO+1bD0
【IT】10代のネット環境「スマホのみ」が7割、「PCのみ」は25%にとどまる [無断転載禁止]©2ch.net
http://egg.2ch.net/test/read.cgi/bizplus/1500900491/
2017/07/27(木) 09:49:36.92ID:yI2DKD3yd
>>600
クラスモジュールがある以上、このスレの話題として守備範囲内
2017/07/27(木) 10:22:34.31ID:ZNB0F0Q0H
>>554
> ライター、チャッカマン、バーナーが他所であるのにマッチでも火をおこせるしこれはこれで良いもんだぞって言ってるようなもん
マッチだけでも十分OOできる
それにWithEventsもあるしね
https://github.com/rubberduck203/VBEX のソース読んだか?以外といろいろできるぞ
2017/07/27(木) 10:40:17.72ID:yI2DKD3yd
>>603
これはあなたが作者さんなの?

興味深いが手っ取り早く知りたい
VBEX /testから読めばいいのかな?
2017/07/27(木) 10:55:11.44ID:ZNB0F0Q0H
>>604
> これはあなたが作者さんなの?
いや、俺じゃないよ
コードサンプルとして読んでみたらってこと

あとこれとか
https://github.com/jpimbert/VBAToolKit/tree/master/Source/VbaUnit

OOの知識があって、いわゆる「インターフェース継承」を視野に入れれば、かなりのことができる
さらに、WithEventsを使えば双方向データバインディングなんかも実装できる
2017/07/27(木) 11:24:49.36ID:698/A489M
インタフェースなんかvbaで使うなボケ
2017/07/27(木) 11:56:09.26ID:yI2DKD3yd
>>605
うーん、、、
日本語のないかな?(ボソッ
2017/07/27(木) 12:01:06.07ID:SAqwCo2Mx
>>606
ほーわーいー
2017/07/27(木) 12:17:23.37ID:yI2DKD3yd
チンリン山脈
2017/07/27(木) 13:24:05.39ID:LMuXn2N9a
>>603
いやだからさ
俺の言いたいこと伝わらないし理解する気無いよね
こっちはマッチしか無いから仕方なくマッチ使ってんの
不満だからって努力を放棄してるわけじゃないからな?
ただどう考えても手間だろ
そんだけの話
2017/07/27(木) 14:02:53.37ID:ZNB0F0Q0H
>>610
君も俺の言いたいこと1ミリも理解しようとしてないから、お互い様だね
612デフォルトの名無しさん (ササクッテロル Spb3-ntdb)
垢版 |
2017/07/27(木) 14:43:39.94ID:DPiXNUUHp
>>597
意味がわからない?
学びなおした方が良いぞ
2017/07/27(木) 16:09:11.81ID:P1js1uXhM
>>612
> サブクラスに相当する関数から
> スーパークラスに相当する関数を呼べばいいんじゃね?
そこまで言うならなんの意味があるのか説明してみな
614デフォルトの名無しさん (ワッチョイ ea06-HJpE)
垢版 |
2017/07/27(木) 16:44:21.21ID:7xCZa4oD0
だからさぁお前らは雑談したいだけだろ?スレ立ててそこでやれっつーの
クソうぜぇ
2017/07/27(木) 16:44:34.77ID:uf/My/5wa
>>611
使い方によってはvbaだってoopできるよ!って言いたいんでしょ?
2017/07/27(木) 17:00:44.58ID:ZNB0F0Q0H
>>615
さいしょから言ってるでしょ
> オブジェクト指向にドップリしてたら使いにくいことこの上ないと思う
なことないよ
2017/07/27(木) 17:11:23.71ID:yI2DKD3yd
使いたいときに便利な機能を自由につまみ食いできるのがいいライブラリだと思っているんだが、
オブジェクト指向のライブラリって少しおせっかいというか世界観を押し付けてくるところがある。
会員にならないと利用できないサービスみたいな感じ。
自分で作ったものを自分で利用する分には当然問題ないんだけどね。
VBAの言語機能の弱さを考えると、クラス間の関連のある体系的な使い方を実現するのは厳しいだろう。
2017/07/27(木) 17:44:10.44ID:uf/My/5wa
>>616
俺は工夫を強いられてる時点でうんちだと言っている
以上です
2017/07/27(木) 17:59:09.25ID:ZNB0F0Q0H
経験不足だね
言語10個くらいマスターしてこい
620デフォルトの名無しさん (アウーイモ MM9f-k5Qo)
垢版 |
2017/07/27(木) 19:42:01.40ID:xCwJ4jCdM
某サイトを参考にメールを一括作成するVBAを書いています。
createitemfromtemplateの行で「実行時エラー13 型が一致しません」というエラーが出ます。
どうやらcreateitemfromtemplateがうまく機能していないようなのですが、解決方法を教えていただけませんでしょうか。
よろしくお願いいたします。
※「Microsoft Outlook 14.0 Object Library」の参照設定はONになっています。
-----------------------------------
Sub main()

Dim OL As New Outlook.Application
Dim M As MailItem

Dim MaxRow: MaxRow = Range("A1").End(xlDown).Row

For i = 2 To MaxRow
Set M = OL.createitemfromtemplate("D:\本文.msg")

M.To = Cells(i, 列.件名).Value
M.Subject = Cells(i, 列.件名).Value
M.Attachments.Add "D:\" & Cells(i, 列.添付ファイル).Value
M.HTMLBody = Replace(M.HTMLBody, "●●", Cells(i, 列.氏名).Value)
M.SaveAs "D:\" & Cells(i, 列.企業名).Value & "_" & Cells(i, 列.氏名).Value & ".msg"
Next

End Sub
-----------------------------------
2017/07/27(木) 20:32:44.20ID:60P4ZjAM0
>>620
msdnのリファレンスをみると
Outlookテンプレート(.oft)を指定しろって書いてあるので
怒られているとおり、型がちがうのでしょう。

CreateItemメソッドを使えばいいんじゃないでしょうか。
2017/07/27(木) 21:59:25.00ID:aAe8+IMH0
オブジェクト指向がどうこうって語りたいなら

オブジェクト指向
って言葉と
オブジェクト指向言語
って言葉をちゃんと区別して発言して下さい
623620 (アウーイモ MM9f-k5Qo)
垢版 |
2017/07/27(木) 22:07:28.99ID:xCwJ4jCdM
>>621
返信ありがとうございます!!
すみません、CreateItemでも変わらずエラーでした・・。
ちなみに下記のように.oftを指定しても同じでした。
これは本当に不思議です・・・。

---------------------------------------
Sub test03()

Dim OL As New Outlook.Application
Dim M As MailItem
Set M = OL.CreateItemFromTemplate("D:\本文.oft")

M.To = "aaaa@bbb.co.jp"
M.SaveAs "D:\test03.msg"

End Sub
---------------------------------------
2017/07/27(木) 22:19:54.50ID:eHKEweRs0
関西のお笑いと関西のお笑い芸人も区別して語るべきなのか?
2017/07/27(木) 22:40:28.48ID:SAqwCo2Mx
>>624
そうよ
2017/07/27(木) 22:46:54.67ID:e65zqkX+0
俺予想だと、2023年くらいに.NETと統合されるので、大丈夫じゃないの。
2017/07/27(木) 23:04:48.75ID:60P4ZjAM0
>>623
Sub test()

Dim ol As New Outlook.Application
Dim mi As MailItem
Set mi = ol.CreateItem(olMailItem)
mi.Display

End Sub

この最小構成でメール編集画面がでるかお試しを。
出なかったら参照設定が変なのかも。
Excelのバージョンが変わると勝手に参照設定のバージョンも
変わるという罠に引っかかったことがあるので。
実行時バインディングでやってみると言う手もあり。
2017/07/27(木) 23:18:55.37ID:xCwJ4jCdM
>>627
最小構成でやってみると、やはり同じエラーでした!
これは、参照ができていないのですか??
2017/07/27(木) 23:25:30.12ID:8/6stQ5Xr
'// 1行目の項目名が、A列から順に
'//[アドレス][件名][添付ファイルパス][本文]
'// のとき、

Dim dataSet
Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row
dataSet = Range(Cells(2, 1), Cells(lastRow, 4)).Value

With CreateObject("Outlook.Application")
  .GetNamespace("MAPI").GetDefaultFolder(16).Display
  For i = 1 To lastRow - 1
    With .CreateItem(olMailItem)
      .To = dataSet(i, 1)
      .Subject = dataSet(i, 2)
      .Attachments.Add dataSet(i, 3)
      .Body = dataSet(i, 4)
      .Save
    End With
  Next i
End With
2017/07/27(木) 23:27:06.45ID:60P4ZjAM0
>>628
よく考えたら、参照ならその前にエラーを吐きそう。
ためしに

Sub test()

Dim ol As Object
Set ol = CreateObject("Outlook.Application")
Dim mi As Object
Set mi = ol.CreateItem(olMailItem)
mi.Display

End Sub
これをOption Explicitを無効にして実行したら
どうなるでしょうか?

だめならOS再起動してみる。
どうにも理解不能なエラーがこれで直ったことがあるw。
2017/07/27(木) 23:56:32.00ID:aAe8+IMH0
>>628
まず、そのユーザーでOutlookはちゃんと動いてメールの送受信できるのか?
2017/07/28(金) 00:24:24.58ID:EJW5hZGgM
>>630
試しましたが同じエラーでした。

>>631
問題なくできています。


みなさん、ご協力ありがとうございます。ご迷惑おかけしてすみません。
今気づいたのですが参照先が14.0でした。最新は15.0なんですよね?これが原因でしょうか?
2017/07/28(金) 04:23:09.57ID:Kx1QSHwna
皆様ありがとうございました! 
理由はわかりませんが突然できるようになりました!
本当にご迷惑おかけしました!
2017/07/28(金) 04:32:44.73ID:ccATQH/dr
>>632
ごめん。コード間違ってた。orz

参照設定をoffにし、↓のコードで試してみて。

'// olMailItemを直値(0)に変えた
Dim dataSet
Dim lastRow As Long
Dim i As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row
dataSet = Range(Cells(2, 1), Cells(lastRow, 4)).Value

With CreateObject("Outlook.Application")
  .GetNamespace("MAPI").GetDefaultFolder(16).Display
  For i = 1 To lastRow - 1
    With .CreateItem(0)
      .To = dataSet(i, 1)
      .Subject = dataSet(i, 2)
      .Attachments.Add dataSet(i, 3)
      .Body = dataSet(i, 4)
      .Save
    End With
  Next i
End With
2017/07/28(金) 04:34:16.17ID:ccATQH/dr
一歩遅かったか…orz
2017/07/28(金) 06:49:10.86ID:Kx1QSHwna
>>635
おはようございます!
ありがとうございます!
2017/07/28(金) 23:02:57.85ID:+oxMyCi10
win10
excel2016で
MSXML2.XMLHTTPを使って
responseTextでgoogle検索結果のページを取得しようとすると、
responseTextで返ってきたものが、今までwin7 excel2007などで返ってきたものと全然違うんですが、win7の時のように受け取る方法ってありませんか?

win7の時はhtmlそのものが返ってきてましたがwin10では最初の方が判読困難です。

やろうとしていることは、vbaでgoogle画像検索の結果の画像をセルに表示しようと思ってます。
2017/07/30(日) 10:16:32.82ID:WZc9I6Vq0
そういえば responseBody しか使ったことないなあ
(adTypeBinary な ADODB オブジェクトに Write するために)
2017/07/30(日) 12:41:33.40ID:ND/Yhbfk0
すみません、いろいろ試してたんですが、google以外ではちゃんと同じようなものを受け取れてました。
googleでは環境によって返すものが違うのかもしれません。
その先はスレ違いになるので自分でいろいろやってみます。ありがとうございました。
2017/07/30(日) 15:24:50.24ID:LIjBkUDz0
api以外でgoogleの検索結果を取得しないほうがいい
すぐにアクセス禁止になる
641デフォルトの名無しさん (アウーイモ MM9f-GszO)
垢版 |
2017/08/02(水) 00:57:39.97ID:O3oN8G+MM
Function Name2Adr(str As String)
Dim Cts As Folder, Ct As ContactItem
Set Cts = CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderContacts)
Set Ct = Cts.Items.Find("[Email1DisplayName] = '" & str & "'")

If Ct Is Nothing Then Name2Adr = "不明" Else Name2Adr = Ct.Email1Address

Set Cts = Nothing: Set Ct = Nothing
End Function
↑ローカルのアドレス帳から表示名を検索しメアドを返す関数です。これはうまくいくのですが、
↓下のグローバルアドレス帳を検索するものがうまくいきません。エラーメッセージは「オブジェクトはこのプロパティまたはメソッドをサポートしていません」です。
どなたか解決法をご教示ください。よろしくお願いします。
Function gName2Adr(str As String)
Dim olApplication As Outlook.Application
Dim olNameSpace As Outlook.Namespace
Dim olAddressLists As Outlook.AddressLists
Dim olAddressList As Outlook.AddressList
Dim olAddressEntries As Outlook.AddressEntries

Set olApplication = New Outlook.Application
Set olNameSpace = olApplication.Session
Set olAddressLists = olNameSpace.AddressLists
Set olAddressList = olAddressLists.Item(2)
Set olAddressEntries = olAddressList.AddressEntries

Dim olAddressEntry As Outlook.AddressEntry
Set olAddressEntry = olAddressEntries.Items.Find("[Email1DisplayName] = '" & str & "'") '←この行でエラー
If olAddressEntry Is Nothing Then gName2Adr = "不明" Else gName2Adr = olAddressEntry.Email1Address
End Function
2017/08/02(水) 02:57:39.31ID:9fnjiac4a
>>641
名前長いな
2017/08/02(水) 06:22:21.40ID:Yub86NHXr
少々長くてもわかりやすい名前をつけるのが基本だからね。
ハンガリアンよりは全然いい。
2017/08/02(水) 06:31:28.66ID:SLRN4nNP0
少々長くても分かりやすい名前を付ける、それがハンガリアン記法

想像してるのはたぶんシステムハンガリアン記法
2017/08/02(水) 07:20:47.27ID:Mrcj6vwlM
変数はAddressなのにメソッド名はAdrで統一してないのは理由あるの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況