Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3396 / 13645 ツリー ←次へ | 前へ→

【36315】Sendで送信する際に・・・ いつもすみません。 06/3/28(火) 16:24 質問[未読]
【36316】Re:Sendで送信する際に・・・ inoue 06/3/28(火) 18:07 発言[未読]
【36337】Re:Sendで送信する際に・・・ いつもすみません。 06/3/29(水) 10:55 質問[未読]
【36343】Re:Sendで送信する際に・・・ inoue 06/3/29(水) 12:34 発言[未読]
【38531】Re:Sendで送信する際に・・・ H. C. Shinopy 06/6/6(火) 0:20 回答[未読]
【38543】Re:Sendで送信する際に・・・ いつも 06/6/6(火) 11:32 お礼[未読]
【39106】メール送信処理 修正 H. C. Shinopy 06/6/17(土) 22:34 回答[未読]
【62518】Re:Sendで送信する際に・・・ T-K 09/7/28(火) 14:51 質問[未読]
【62522】Re:Sendで送信する際に・・・ neptune 09/7/28(火) 15:26 発言[未読]
【62523】Re:Sendで送信する際に・・・ T-K 09/7/28(火) 17:21 お礼[未読]

【36315】Sendで送信する際に・・・
質問  いつもすみません。 E-MAIL  - 06/3/28(火) 16:24 -

引用なし
パスワード
   いつも大変お世話になっております。
複数人数分繰り返す自動メール送信マクロを作っておりますが、
送信するたびに、「プログラムが自動的にメールを送信しようと
しています・・・よろしいですか?」という画面が出てきます。
その画面を出さない方法はありますか?

教えて頂けると大変助かります。

【36316】Re:Sendで送信する際に・・・
発言  inoue E-MAILWEB  - 06/3/28(火) 18:07 -

引用なし
パスワード
   ▼いつもすみません。 さん:
>複数人数分繰り返す自動メール送信マクロを作っておりますが、
>送信するたびに、「プログラムが自動的にメールを送信しようと
>しています・・・よろしいですか?」という画面が出てきます。
>その画面を出さない方法はありますか?
メールソフトを経由する方法では、メールソフト側のセキュリティ機能で
そのようなメッセージが出てしまいます。

最初からメールソフトを経由させない方法があるので
そのような方法にされてはいかがでしょう。
本文も編集できるし、メールソフトから再度送信する必要もありません。

[CDOでメール送信]
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html

【36337】Re:Sendで送信する際に・・・
質問  いつもすみません。 E-MAIL  - 06/3/29(水) 10:55 -

引用なし
パスワード
   ▼inoue さん:
早速のアドバイスありがとうございます。
設定が難しそうですが、試させて頂きます。

また、少し違う質問ですが(別投稿のほうが良いでしょうか?)
データ(添付ファイルにしてあります)の1部分が特別値の場合
メールを送らないように設定するにはどのようにすれば
良いでしょうか?
IF文を使い、その値だったらそのデータだけ無視するという
ように設定したいのです。
プログラムを停めるのではなく、そのデータ以外は継続
といったような感じです。
質問が下手で申し訳ありませんが、アドバイス頂けると
大変助かります。

【36343】Re:Sendで送信する際に・・・
発言  inoue E-MAILWEB  - 06/3/29(水) 12:34 -

引用なし
パスワード
   >データ(添付ファイルにしてあります)の1部分が特別値の場合
>メールを送らないように設定するにはどのようにすれば
>良いでしょうか?
よく解りませんが、
>[CDOでメール送信]
>http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html
では、送信機能を「SendMailByCDO」という別プロシ−ジャにして
転用しやすいように提供したつもりです。

この「SendMailByCDO」を呼び出せば送信されるし、
呼び出さなければ送信されません。

例えば、アドレスの一覧表から順に送信させるなら、
行を変数にしたループ処理を作成して、
行ごとに「SendMailByCDO」を引数をセットして呼び出せば良いわけですが、
何かの判断において送信しないなら、その呼び出し部分に
Ifステートメントなりで判断すれば良いだけです。

【38531】Re:Sendで送信する際に・・・
回答  H. C. Shinopy  - 06/6/6(火) 0:20 -

引用なし
パスワード
   御質問から日にちが経っておりますので、
取り敢えず参考までにということで…
どういうやり方での送信だったのか判りませんが…
下記のマクロは開いたシートのデータを本文に貼り付けて送信する処理です。
Office XP(Word / Excel / Outlook 2002)で動作を確認しましたが、
2000あるいは2003では動作するかどうか判りません。
(このマクロは参照設定なしでも動作するようにしています。)

Sub MyXlMail()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem Excelシートデータ電子メール送信処理
 Rem 言語:Excel VBA
 Rem 機能...
 Rem  Excelのシート上にあるデータをコピーして、
 Rem  電子メールの本文に貼り付け送信する。
 Rem 注記...
 Rem  1. Microsoft Outlookで[電子メールの編集にMicrosoft Wordを使用する]を指定しておくこと。
 Rem   Microsoft Outlookのメニューバーの[ツール]から[オプション...]をクリックし、
 Rem   [メール形式]タブの[電子メールの編集にMicrosoft Wordを使用する]チェックボックスを
 Rem   オンにする。
 Rem  2. Microsoft Wordの標準コマンドバーに<送信>コマンドボタンを追加しておくこと。
 Rem   Microsoft Wordのメニューバーの[ツール]から[ユーザー設定...]をクリックし、
 Rem   [ユーザー設定]ダイアログボックスから[コマンド]タブを選択し、
 Rem   [分類]の[すべてのコマンド]を選択して、[コマンド]の[EmailSend]を
 Rem   <標準>コマンドバーにドラッグし、<送信>コマンドボタンを追加する。
 Rem  3. Microsoft Outlookが起動している場合、すぐに電子メールが送信される。
 Rem   起動してない場合は、これを起動して[送受信]ボタンを押して送信する必要がある。
 Rem  4. 警告なしに送信する。
 Rem 履歴...
 Rem  第1版:2006/06/05:作成。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 参照設定する場合...
 Rem  Microsoft Outlook 10.0 Object Library
 Rem  Microsoft Word 10.0 Object Library
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myOutlook As Variant ' Outlook.Application
 Dim myMail As Variant ' MailItem
 Dim myWord As Variant
 Dim myCmmdBar As CommandBar
 Dim myCtrl As CommandBarControl
 '
 ActiveSheet.UsedRange.Select
 Selection.Copy
 '
 On Error Resume Next
 Set myOutlook = GetObject(, "Outlook.Application")
 If Err.Number <> 0 Then
  Set myOutlook = CreateObject("Outlook.Application")
 End If
 On Error GoTo 0
 '
 Set myMail = myOutlook.CreateItem(0) ' = myOutlook.CreateItem(olMailItem)
 Rem ↓なぜか、本文の末尾に件名の文字が挿入されるため、3文字の空白を件名の先頭に付ける。
 myMail.Subject = "  " & "このメールはテストです。"
 myMail.To = "xxxxxx@msn.com"
 myMail.BCC = "xxxxxx@xxxx.ne.jp"
 myMail.Body = "下記の通り、お知らせ致します。" & vbCrLf & vbCrLf
 myMail.FlagRequest = "凄い!"
 myMail.Importance = 2 ' = olImportanceHigh
 Rem olImportanceHigh olImportanceLow olImportanceNormal
 myMail.Display
 '
 Set myWord = GetObject(, "Word.Application")
 myWord.Selection.EndKey Unit:=6, Extend:=0 ' Unit:=wdStory, Extend:=wdMoveEnd
 myWord.Selection.Paste
 '
 Application.CutCopyMode = False
 Range("A1").Select
 '
 Set myCmmdBar = myWord.CommandBars("Standard") ' 標準
 Set myCtrl = myCmmdBar.FindControl(ID:=3708) ' 送信 ' WordBasic.EmailSend
 myCtrl.Execute
 '
 Set myOutlook = Nothing
 Set myMail = Nothing
 Set myWord = Nothing
 Set myCmmdBar = Nothing
 Set myCtrl = Nothing
End Sub ' MyXlMail *----*----*  *----*----*  *----*----*  *----*----*

【38543】Re:Sendで送信する際に・・・
お礼  いつも  - 06/6/6(火) 11:32 -

引用なし
パスワード
   ▼H. C. Shinopy さん:
ありがとうございます。

早速試してみます。
取り急ぎ、お礼申し上げます。


>>下記のマクロは開いたシートのデータを本文に貼り付けて送信する処理です。

添付ファイルでは、
>Office XP(Word / Excel / Outlook 2002)で動作を確認しましたが、
>2000あるいは2003では動作するかどうか判りません。
>(このマクロは参照設定なしでも動作するようにしています。)
>
>Sub MyXlMail()
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> Rem Excelシートデータ電子メール送信処理
> Rem 言語:Excel VBA
> Rem 機能...
> Rem  Excelのシート上にあるデータをコピーして、
> Rem  電子メールの本文に貼り付け送信する。
> Rem 注記...
> Rem  1. Microsoft Outlookで[電子メールの編集にMicrosoft Wordを使用する]を指定しておくこと。
> Rem   Microsoft Outlookのメニューバーの[ツール]から[オプション...]をクリックし、
> Rem   [メール形式]タブの[電子メールの編集にMicrosoft Wordを使用する]チェックボックスを
> Rem   オンにする。
> Rem  2. Microsoft Wordの標準コマンドバーに<送信>コマンドボタンを追加しておくこと。
> Rem   Microsoft Wordのメニューバーの[ツール]から[ユーザー設定...]をクリックし、
> Rem   [ユーザー設定]ダイアログボックスから[コマンド]タブを選択し、
> Rem   [分類]の[すべてのコマンド]を選択して、[コマンド]の[EmailSend]を
> Rem   <標準>コマンドバーにドラッグし、<送信>コマンドボタンを追加する。
> Rem  3. Microsoft Outlookが起動している場合、すぐに電子メールが送信される。
> Rem   起動してない場合は、これを起動して[送受信]ボタンを押して送信する必要がある。
> Rem  4. 警告なしに送信する。
> Rem 履歴...
> Rem  第1版:2006/06/05:作成。
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> Rem 参照設定する場合...
> Rem  Microsoft Outlook 10.0 Object Library
> Rem  Microsoft Word 10.0 Object Library
> Rem *----*----*  *----*----*  *----*----*  *----*----*
> Dim myOutlook As Variant ' Outlook.Application
> Dim myMail As Variant ' MailItem
> Dim myWord As Variant
> Dim myCmmdBar As CommandBar
> Dim myCtrl As CommandBarControl
> '
> ActiveSheet.UsedRange.Select
> Selection.Copy
> '
> On Error Resume Next
> Set myOutlook = GetObject(, "Outlook.Application")
> If Err.Number <> 0 Then
>  Set myOutlook = CreateObject("Outlook.Application")
> End If
> On Error GoTo 0
> '
> Set myMail = myOutlook.CreateItem(0) ' = myOutlook.CreateItem(olMailItem)
> Rem ↓なぜか、本文の末尾に件名の文字が挿入されるため、3文字の空白を件名の先頭に付ける。
> myMail.Subject = "  " & "このメールはテストです。"
> myMail.To = "xxxxxx@msn.com"
> myMail.BCC = "xxxxxx@xxxx.ne.jp"
> myMail.Body = "下記の通り、お知らせ致します。" & vbCrLf & vbCrLf
> myMail.FlagRequest = "凄い!"
> myMail.Importance = 2 ' = olImportanceHigh
> Rem olImportanceHigh olImportanceLow olImportanceNormal
> myMail.Display
> '
> Set myWord = GetObject(, "Word.Application")
> myWord.Selection.EndKey Unit:=6, Extend:=0 ' Unit:=wdStory, Extend:=wdMoveEnd
> myWord.Selection.Paste
> '
> Application.CutCopyMode = False
> Range("A1").Select
> '
> Set myCmmdBar = myWord.CommandBars("Standard") ' 標準
> Set myCtrl = myCmmdBar.FindControl(ID:=3708) ' 送信 ' WordBasic.EmailSend
> myCtrl.Execute
> '
> Set myOutlook = Nothing
> Set myMail = Nothing
> Set myWord = Nothing
> Set myCmmdBar = Nothing
> Set myCtrl = Nothing
>End Sub ' MyXlMail *----*----*  *----*----*  *----*----*  *----*----*

【39106】メール送信処理 修正
回答  H. C. Shinopy  - 06/6/17(土) 22:34 -

引用なし
パスワード
   すみません。マクロを少し修正しました

一時的に「Zzz」というコマンドバーを追加し、
そこに[送信]コマンドボタンを追加して実行します。
これで、Wordでの事前設定は不要です。

注記1.について:
事前に、手作業でOutlookの [電子メールの編集にMicrosoft Wordを使用する]をオンにして下さい。マクロでやろうとして、
「myMail.FormDescription.UseWordMail = True」とすると、
なぜか[送信]ボタンが機能しなくなります。
(たぶん、セキュリティ上そうなっているのでしょう。)

注記2.について:
「起動済みの状態」とは、Outlookを起動して使っているという意味ですが、
会社などでOutlookを使用する場合、パソコンに電源を入れて動いている間、
Outlookを常に動かしていると思います。(メールの受信待ちのため、
大抵はOutlookのウインドウを最小化した状態にしているはずです。
これも、「起動済みの状態」です。)
処理後にOutlookのフォルダを確認して頂ければ、未送信の場合、メールが[送信トレイ]に残っています。無事に送信済みであれば、[送信済みアイテム]にメールが移っています。

Office 2002で動作することを確認しています。
2000あるいは2003をお使いの方がいらしたら、
このマクロの動作可否をお知らせ頂けたらと存じます。

Sub MyXlMail()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem Excelシートデータ電子メール送信処理
 Rem 言語:Excel VBA
 Rem 機能...
 Rem  Excelのシート上にあるデータをコピーして、
 Rem  電子メールの本文に貼り付け送信する。
 Rem 注記...
 Rem  1. Microsoft Outlook上で、下記の手作業による事前設定が必要。
 Rem   Microsoft Outlookのメニューバーの[ツール]から[オプション...]をクリックし、
 Rem   [メール形式]タブの[電子メールの編集にMicrosoft Wordを使用する]チェックボックスを
 Rem   オンにする。
 Rem  2. Microsoft Outlookが起動済みの状態である場合、すぐに電子メールが送信される。
 Rem   起動してない場合は、これを起動して[送受信]ボタンを押して送信する必要がある。
 Rem  3. 警告なしに送信する。
 Rem 履歴...
 Rem  第1版:2006/06/05:作成。
 Rem  第2版:2006/06/11:Microsoft Wordでの手作業による事前設定が不要になるよう修正した。
 Rem  第3版:2006/06/16:シートに何も入力されていない場合に対処するよう修正した。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 参照設定する場合...
 Rem  Microsoft Outlook 10.0 Object Library
 Rem  Microsoft Word 10.0 Object Library
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myOutlook As Variant ' Outlook.Application
 Dim myMail As Variant ' MailItem
 Dim myWord As Variant ' Word.Application
 Dim myCmmdBar As CommandBar
 Dim myCtrl As CommandBarControl
 '
 ActiveSheet.UsedRange.Select
 Selection.Copy
 '
 On Error Resume Next
 Set myOutlook = GetObject(, "Outlook.Application")
 If Err.Number <> 0 Then
  Set myOutlook = CreateObject("Outlook.Application")
 End If
 On Error GoTo 0
 '
 Set myMail = myOutlook.CreateItem(0) ' = myOutlook.CreateItem(olMailItem)
 Rem ↓なぜか、本文の末尾に件名の頭3文字が挿入されるため、3文字の空白を件名の先頭に付ける。
 myMail.Subject = "  " & "このメールはテストです。"
 myMail.To = "xxxxxxx@msn.com"
 myMail.BCC = "xxxxxx@xxxx.ne.jp"
 myMail.Body = "下記の通り、お知らせ致します。" & vbCrLf & vbCrLf
 myMail.FlagRequest = "凄い!"
 myMail.Importance = 2 ' = olImportanceHigh
 Rem  olImportanceHigh olImportanceLow olImportanceNormal
 Rem メッセージ形式...
 Rem  テキスト形式の場合、書式設定(文字色・蛍光ペン書式など)は無効になる。
 myMail.BodyFormat = olFormatPlain ' olFormatHTML
 myMail.Display
 '
 Set myWord = GetObject(, "Word.Application")
 myWord.Selection.EndKey Unit:=6, Extend:=0 ' Unit:=wdStory, Extend:=wdMoveEnd
 On Error Resume Next ' シートに何も入力されていない場合に対処。
 myWord.Selection.Paste
 On Error GoTo 0
 '
 Application.CutCopyMode = False
 Range("A1").Select
 '
 On Error Resume Next
 myWord.CommandBars("Zzz").Delete
 On Error GoTo 0
 '
 Set myCmmdBar = myWord.CommandBars.Add(Name:="Zzz", Position:=msoBarPopup, Temporary:=True)
 With myCmmdBar.Controls
  Set myCtrl = .Add(Type:=msoControlButton, ID:=3708)
  With myCtrl
   .Caption = "送信"
   .DescriptionText = "電子メールの送信コマンドを実行します。"
   .Execute
  End With
 End With
 '
 Set myOutlook = Nothing
 Set myMail = Nothing
 Set myWord = Nothing
 Set myCmmdBar = Nothing
 Set myCtrl = Nothing
End Sub ' MyXlMail *----*----*  *----*----*  *----*----*  *----*----*

【62518】Re:Sendで送信する際に・・・
質問  T-K  - 09/7/28(火) 14:51 -

引用なし
パスワード
   ▼inoue さん:
こんにちは。
ファイルをメール送信する、で検索しここにたどり着きました。
サンプルは以下です。
これですと、宛てにしか送信されません。
CC(写し)にも送信するには、どうしたらよいでしょうか。
いろいろ調べてみたのですが・・・
他にも
1→arg1:=の「:=」の意味??
2→arg3:=Trueになぜ、Trueを入れるのか??

'ブックをメールで送信する
Sub SmpDialogs()
  'ブックをメールで送信する

  Application.Dialogs(xlDialogSendMail).Show _
  arg1:="ABC@abc.co.jp";, arg2:= "添付ファイル確認",arg3:=True
End Sub

VBA始めたばかりで恐縮ですが、ご指導よろしくお願い致します。

【62522】Re:Sendで送信する際に・・・
発言  neptune  - 09/7/28(火) 15:26 -

引用なし
パスワード
   ▼T-K さん:
他人の古いスレッドに書くのは止めましょう。
新規にスレッドを立て、参考スレッドを書いておけば良いです。

Mailは作ったことないのでわかることだけ。

>1→arg1:=の「:=」の意味??
名前は忘れましたが、左辺が名前付引数、右辺がその値である事を示す記号。

>2→arg3:=Trueになぜ、Trueを入れるのか??
とりあえずわかるところだけ
xlDialogSendMail の引数は以下のように定義されているから。
recipients(受取人)、subject(主題)、return_receipt (受取を通知)
(カッコ内は私が感じで書きました。)

多分受信した事を返す設定でしょう。

>CC(写し)にも送信するには、どうしたらよいでしょうか。
多分、Application.Dialogs(xlDialogSendMail)
では無理。ccの方法はinoue さんのサイトにでも行って探せば書いているかも
Mailの送受信の方法もいろいろありますから。
多分OutLookが入っていれば、多少は楽かも(サンプルもあるだろうから???)
ここなんかやさしく書いてくれてそう。
ht tp://www.red.oit-net.jp/tatsuya/vb/Outlook.htm

【62523】Re:Sendで送信する際に・・・
お礼  T-K  - 09/7/28(火) 17:21 -

引用なし
パスワード
   ▼neptune さん:
>他人の古いスレッドに書くのは止めましょう。
→たいへん、失礼しました。以後気をつけます。
 指摘下さってありがとうございます。
 過去にも同じようなことを・・・
 みなさんに迷惑かけていました(汗)。

>ht tp://www.red.oit-net.jp/tatsuya/vb/Outlook.htm
→早速、見てみました。これは助かりました。
 ありがとうございます!

3396 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free