• ベストアンサー

指定のWORKBOOKを前面表示する方法(エクセル:VBA)

いつもお世話になっております。 エクセルにて処理が終了した時点で、VBAを使い自動的にメールを送るマクロを組みました。しかし、ユーザーからのリクエストにより、自動送信する前にメール内容を確認したいとのことで、一度このメール内容でOKかどうか聞いてから、送信するように書き換えました。そのMsgBoxは当然エクセル上に現れるのですが、特にシングルディスプレイユーザーの場合、送信用のメールが前面に出てしまい、エクセル上に表示されたMsgBoxに気が付かない人もいますので、送信用メールが作成されたら、エクセルを前面に出してMsgBoxの指示に従わせたいのですが、どう書けばいいのか分かりません。とりあえず、私がトライしてみた文字ールは下記のとおりですが、エクセルは前面には出ません(ただし、エクセルプログラム全体が点滅?しますが)。 ~前略~ With myMail .To = "abc@xxxxx.com" .Cc = "123@xxxxx.com" .Subject = Filename '指定済みです .Body = strBody '指定済みです .display '.sendの代わりにいったんここで表示させました End With Windows("XYZ.xls").Activate 'このワークブックで作業をしてます。全面にはでてきません。 mymsg = MsgBox("このメール内容で送信してもよろしいですか?"~中略~,vbYesNo + vbQuestion, "送信確認") If mymsg = 6 Then myMail.send ~後略~

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

Windows("XYZ.xls").Activate のところに VBA.AppActivate Excel.Application.Caption を追加してみてください。

TENSAW
質問者

お礼

xls88さん、 即答感謝いたします。先ほどユーザー(と言っても同僚ですが)からのOKの返事がきました。 ありがとうございます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは >Windows("XYZ.xls").Activate 'このワークブックで作業をしてます。全面にはでてきません。          ↓ 通常は、AppActivate("Microsoft Excel") の引数は、Application.Caption を使います。 しかし、うまくいかないこともありますので、その場合は、このようにします。 '----------------------------------- Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Sub Test()   Dim hwnd As Long   Const FCLASSNAME As String = "XLMAIN"   hwnd = FindWindow(FCLASSNAME, vbNullString)   If hwnd > 0 Then     SetForegroundWindow hwnd   End If End Sub なお、"XLMAIN" は、Excelのクラス名 Outlook は、"rctrl_renwnd32" です。

TENSAW
質問者

お礼

Wendy02さん、 本当にいつもありがとうございます。 私にはとても思いつかない、モジュールです。。。 おっしゃる通り、Application.Captionでうまくいきました。 これでうまくいかなかったときには、上記を使わせていただきます。 システム上残念ながら、お二人に20Pを差し上げることができません。 今回は、ご回答順でPを付することにいたしますことを、ご了承ください。 ありがとうございました。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

先に確認メッセージを表示させて、OKをクリックしてから送信動作(With myMail以降)を行うようにしたら良いだけじゃないのでしょうか?

TENSAW
質問者

お礼

それはProcedure上無理なんですよ。 ありがとうございました。

関連するQ&A

  • VBA エクセル メール送信 ハイパーリンクの貼り方

    お世話になります。 首題の通り、エクセルに記述したマクロを使いメールを送りたいのですが、その際に文章の記述にハイパーリンクを張りたいのです。 例えば下記のモジュールですと、文章のBODYの部分には「OKWAVE」とだけ表示されますが、これをクリックすると[http://okwave.jp/]が開くようにしたいのですが、どのように記述すればよろしいのでしょうか?よろしくご指南くださいませ。 Sub test() Dim strBody As String Filename = "ハイパーリンクの貼り方???" strBody = "OKWAVE" Set myOL = CreateObject("Outlook.Application") Set myMAIL = myOL.CreateItem(0) With myMAIL .to = "123@123.GOM" .Subject = Filename .body = strBody .display '.send End With Set myMAIL = Nothing Set myOL = Nothing End Sub

  • ★エクセルVBAでOutlookのメールをチェックしたいのですが…

    エクセルVBAでOutlookのフォルダを検索して、ある送信者(メルアド)の メールを削除したいのですが、 送信者(メルアド)を取得するプロパティ(又はメソッド)と指定方法が分かりません。 受信時間や件名などの取得までは分かっています どなたかご教授お願いします。 <コーディング> With objItem dteCreateDate = .CreationTime strSubject = .Subject strAddr = ??????????   ←←← 不明箇所 strItemType = TypeName(objItem) strBody = .Body End With

  • エクセルVBAでメール本文中に画像を挿入する方法

    エクセルVBAを使ってアウトルックメールにてメール送信するマクロを作っています。 本文中に画像を挿入する方法をググってますがなかなか出てきません。添付ファイルではなく、本文と本文の間に画像を差し込むイメージです。 メール送信先、本文は同じエクセルのContentsシート、画像はPictシートに格納しています。 Option Explicit Sub SendMail_HTML() Dim contents As Worksheet Dim maillist As Worksheet Dim mailaddress As String, honbun1 As String, honbun2 As String, mailbody As String, strstyle As String Dim i As Long Set contents = ThisWorkbook.Worksheets("Contents") Set maillist = ThisWorkbook.Worksheets("List") ' Picture Dim pict_sheet As Worksheet Set pict_sheet = ThisWorkbook.Worksheets("pict_sheet") 'プログラム3|Outlookアプリケーションを起動 Dim outlookObj As Outlook.Application Dim myMail As Outlook.MailItem Set outlookObj = CreateObject("Outlook.Application") For i = 2 To 3 ' Email and name setting from Content Sheet client_name = maillist.Range("B" & i).Value mailaddress = maillist.Range("C" & i).Value Set myMail = outlookObj.CreateItem(olMailItem) 'Mail content setting myMail.BodyFormat = 2 myMail.To = mailaddress myMail.Subject = contents.Range("B3").Value honbun1 = Replace(contents.Range("B6").Value, vbLf, "<br>") Dim insp As Outlook.Inspector Set insp = myMail.GetInspector If insp.EditorType = olEditorWord Then Dim doc As Word.Document 'Microsoft Wordを参照 Set doc = insp.WordEditor Dim wrange As Word.Range Set wrange = doc.Range(0, 0) 'カーソルを先頭に 'wrange.Text = honbun1 wrange.MoveEnd Word.WdUnits.wdStory 'カーソルを最後に wrange.Start = wrange.End pict_sheet.Shapes("pict1").Copy 'Pict sheetに入っているpict1を指定 wrange.Paste End If honbun2 = Replace(contents.Range("B8").Value, vbLf, "<br>") myMail.HTMLBody = honbun1 & hoonbun2 myMail.Display 'Send mail 'mymail.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない) myMail.Save '下書き保存 myMail.Send maillist.Range("D" & i).Value = "Sent:" & Now() ' Release object Set myMail = Nothing Next 'プログラム12|オブジェクト解放 Set myMail = Nothing Set outlookObj = Nothing End Sub

  • Excel VBA Outlook送信済メール削除

    お世話になります。 現在、Excel VBA(Excel2010)で、Outlook2010を立ち上げて、添付のExcelの表のE列【GL承認日】に日付を入れると、日付書式を確認して、メールが送信されるVBAを作成しています。 そこで、下記のVBAの下の方にある「myMail.Send」でメールが送信されるようになっていて、メールが送信された後、Outlookの【送信済みフォルダ】に送信済みメールが入ります。 その送信済みメールを【送信済みフォルダ】に入ったら、完全に削除するようにしたいのですが、どのようにVBAを追加すれば宜しいでしょうか? ご存知の方、是非ご教示宜しくお願い致します。 ↓該当のExcel VBAです。 ---------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim myOL As Object Dim myMail As Object Dim myBody As String Dim n As Long Dim mDate As Variant On Error Resume Next 'GL承認日の列の日付書式指定 mDate = Array("yyyy/mm/dd") 'GL承認日の該当セルの日付書式を確認 For Each wz In mDate 'GL承認日の該当セルが空白でない場合は以下を処理 If Cells(Target.Row, Target.Column).Value <> "" Then If InStr(Cells(Target.Row, Target.Column).NumberFormatLocal, wz) > 0 Then 'メールアプリケーションをOutlookに指定 Set myOL = GetObject(, "Outlook.Application") On Error GoTo 0 If myOL Is Nothing Then Set myOL = CreateObject("Outlook.Application") myOL.getnamespace("MAPI").GetDefaultfFolder(6).display End If Set myMail = myOL.CreateItem(0) 'B、C行のセル位置を数値で取得 n = Cells(Target.Row, Target.Column).Row 'メール本文 myBody = "振替伝票入力のGL承認が " & Format(Cells(Target.Row, Target.Column).Value, "yyyy/mm/dd") _ & " に完了しました。" & vbNewLine & vbNewLine _ & "●振替伝票No: " & Range("C" & n).Value & vbNewLine & vbNewLine _ & "================================" & vbNewLine _ & " ▲▲部 ××グループ" & vbNewLine _ & "================================" If Range("B" & n).Value = "ooo" Then myMail.to = "ooo@***.co.jp" 'ElseIf Range("B" & n).Value = "qqq" Then ' myMail.To = "qqq@***.co.jp" End If 'メールのタイトル、本文、本文の形式を指定 myMail.Subject = "【振替伝票 GL承認完了通知】" myMail.Body = myBody myMail.BodyFormat = 1 'テキスト形式 'メールを送信 myMail.Send        (↑此処でメールが【送信済みフォルダ】に入りますが、このタイミングで【送信済みフォルダ】に入ったメールを完全削除したいです。) '変数をリセット Set myMail = Nothing Set myOL = Nothing Else Exit Sub End If End If Next Exit Sub End Sub

  • 初心者ですが、Excelファイル(AAA.xls)の、A1セルの情報を

    初心者ですが、Excelファイル(AAA.xls)の、A1セルの情報を Outlookの本文に入力したいと思っています。 そこで、下記プログラムを組んだのですが、間違いだらけのようで 起動しません。どなたか教えていただけませんか? Sub メール自動送信() Dim my01App As Outlook.Application Dim mymail As Outlook.MailItem Dim body As String Set my01App = CreateObject("Outlook.Application") Set tgtdb = CreateObject("Excel.Application") Set mymail = my01App.CreateItem(olMailItem) With mymail mymail.body = "C:\Users\tomohide\Desktop\AAAA.xls".cells(1,1) End With mymail.Display End Sub

  • アウトルックvba 差出人を指定したい

    vbaでメールを送信したいのですが、 アウトルックに二つのアカウントを登録しています。 その時 Sub メール作成() Dim OlApp As Outlook.Application Dim mItem As Outlook.MailItem Set OlApp = New Outlook.Application Set mItem = OlApp.CreateItem(olMailItem) With mItem .To = "test2@docomo.ne.jp" .Subject = "メモ" .Display End With End Sub は、問題なくできるのですが、 差出人(送信者)の部分をどうすればいいかわからないです。 差出人(送信者)の部分とは、画像の部分です。 .Sender = "test@.co.jp" にすると "test@.co.jp"が、コンパイルエラー 型が一致しません。になります。 ヘルプを見ると、 MailItem の送信元のアカウントのユーザーに対応する AddressEntry オブジェクトを取得または設定します。 と書いてあります。 何を言ってるかよくわかりませんが、差出人(送信者)の指定ではないようです。 なので、 .SenderEmailAddress = "test@.co.jp" にしてみましたが、 値の取得のみ可能とのことなので、エラーになりました。 どうやって差出人の指定をすればいいのでしょうか? バージョンは2010です。 よろしくお願いします。

  • VBAメール添付ファイル付送信

    VBAメール添付ファイル付送信 Win2000 Access2000 添付ファイル付メールの送信を以下の様に組んでおります 以下の組み方ですと本文の下か、上かにしか添付ファイルを付ける事ができません 本文の中間に添付ファイルを付ける事は可能なのでしょうか? 希望する内容↓ ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 本文○○○○○○○○○○○○ ここに添付ファイル 本文○○○○○○○○○○○○ ++++++++++++++++++++++++++++++++++++++++++++++++++++++ With myMail   .To = "メールアドレス"   .Subject = "例:メールタイトル"   .Attachments.Add("サーバに保存してあるEXCELのフルパス")   .Body = "本文 (メッセージ)"   .send End With 宜しくお願いします

  • エクセルVBA 赤ペン先生をお願いします

    皆さんこんにちは。 エクセル2013使用しているVBA初心者です。 エクセルVBAでコードをど根性&こちらで質問させていただいた時のご回答を元に 作成してみたのですが思うような動作になりません。 下記のコードが美しくないのも重々承知しておりますが 下記内容で修正するべき個所を教えていただけないでしょうか。 やりたい事は ・ユーザーフォーム5でフレームが2個あり  1個は作成書類を7個から1つ選択  もう1個は支社を7個から1つ選択  →「次へ」のボタンを押すと「○○と△△支社を選択しています。お客様情報に~」のメッセージ表示  →OK→処理を続行します→OKならユーザーフォーム4(お客様情報)を開く   キャンセル→処理を中断します→ユーザーフォーム5を再度表示して選択し直せるように・・・   という事をやりたいのですが知識不足の上いくら参考書等を探しても これだ!というものにたどりつけずに困っています。 「○○と△△支社が選択されています」の箇所も myMSG & vbCrLf & "と" & myMSG & だと「△△と△△支社が選択されています」に なってしまうのは理解出来ているのですが代わりにいれるコードも分かりません。 また、「メッセージ表示のOK」を押して「処理を続行しますのキャンセル」を押しても ユーザーフォーム5に戻ることはなくユーザーフォーム4に 進んでしまう始末です。 毎度拙い質問文で申し訳ございませんが どうか皆様のお知恵をお借りできないでしょうか。 ※コードはコマンドボタン1(次へ)に書いてあります。 ---------------------------------------------------------------------------------- Private Sub CommandButton1_Click() Dim myMSG As String Dim i As Integer For i = 1 To 14 If Me.Controls("OptionButton" & i).Value = True Then myMSG = Me.Controls("OptionButton" & i).Caption End If If (OptionButton1 Or OptionButton2 Or OptionButton3 Or OptionButton4 Or OptionButton5 Or OptionButton6 Or OptionButton7) = False Then MsgBox ("作成する書類を選択して下さい") Me.Hide UserForm5.Show End If If (OptionButton8 Or OptionButton9 Or OptionButton10 Or OptionButton11 Or OptionButton12 Or OptionButton13 Or OptionButton14) = False Then MsgBox ("支社を選択して下さい") Me.Hide UserForm5.Show End If Next i intRtn = MsgBox(myMSG & vbCrLf & "と" & myMSG & "支社" & vbCrLf & "が選択されています。" & vbLf & _ "お客様情報に移動します。", _ vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") If intRtn <> vbOK Then MsgBox ("処理をキャンセルしました。") Me.Hide UserForm5.Show End If intRtn = MsgBox("処理を続行します。", vbOKCancel + vbExclamation + vbDefaultButton2, _ "作成書類選択") Unload UserForm5 UserForm4.Show If intRtn <> vbOK Then MsgBox ("処理をキャンセルしました。") Me.Hide UserForm5.Show End If End Sub Private Sub UserForm5_QueryClose(Cancel As Integer, CloseMode As Integer) 'Formが閉じるとき If CloseMode = 0 Then '×ボタンを押された場合 End 'プログラムの実行を終了 End If End Sub

  • EXCEL VBA メール送信でファイル添付

    現在、使用しているVBAを利用したメンバー向け案内メール配信で、ファイルを添付できないかと考えております。 G列に入力したアドレスのファイルを添付して送信できればと思うのですが、ご教授願えませんでしょうか。 現在のVBAは企業名、宛先共に変えられるように下記のような形となっております。 添付ファイルも宛先毎に異なります。 B列:送信先メールアドレス C列:メール件名 D列:送信先所属名 E列:送信先宛名 F列:メール本文 コマンドボタンで一括配信となっております。 【以下記述】 Sub Mail_Send() Dim iMsg As Object Dim iConf As Object Dim strbody As String Dim Flds As Variant Dim i, LastRow As Integer ' CDOオブジェクト初期設定 Set iMsg = CreateObject("CDO.Message") Set iConf = CreateObject("CDO.Configuration") iConf.Load -1 ' CDO Source Defaults Set Flds = iConf.Fields With Flds .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Worksheets("Sheet1").Range("C2").Value .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = Worksheets("Sheet1").Range("C3").Value .Update End With ' 送信範囲設定 LastRow = Worksheets("Sheet1").Range("B7").End(xlDown).Row ' メール送信ループ For i = 8 To LastRow ' 送信状況メッセージクリア Worksheets("Sheet1").Range("F2").Value = "" ' メール本文作成 strbody = Worksheets("Sheet1").Range("D" & i).Value & vbCrLf & " " & _ Worksheets("Sheet1").Range("E" & i).Value & " 様" & vbCrLf & vbCrLf & _ Worksheets("Sheet1").Range("F" & i).Value ' 改行変換(送信環境によってはここの修正が必要かも) tmpstrbody = Replace(strbody, vbLf, vbCrLf) strbody = Replace(tmpstrbody, vbCr & vbCrLf, vbCrLf) ' メール送信 With iMsg Set .Configuration = iConf .From = Worksheets("Sheet1").Range("C4").Value .To = Worksheets("Sheet1").Range("B" & i).Value .BCC = Worksheets("Sheet1").Range("C5").Value .Subject = Worksheets("Sheet1").Range("C" & i).Value .TextBody = strbody .Send End With ' 送信状況メッセージ更新 Worksheets("Sheet1").Range("F2").Value = Worksheets("Sheet1").Range("B" & i).Value & " まで送信成功!" ' 3秒停止 Application.Wait [ NOW() + "0:00:03" ] Next i End Sub

  • マクロで携帯にメール送信

    いつもお世話になっております。 過去に何度か質問をさせていただき、今回のマクロまでたどり着くことが出来ました。 下記の内容にて、作成しました。 ここで、 (1)セルB1にあて先メアドを置いた場合に、メアドを載せる場合 (2)メールを送信する命令で、【myItem.Send】や【SendMail】ではメールが送信されている場合と送信待機の場合がはっせいしております。必ず、送信するまでの命令を、お教えいただきたいです。 PC環境は、XPです。 メールはMicrosoft Office Outlookです。 Sub CreateMail() '参照設定 : Miscosoft Outlook 9.0Object Library Const ShName = "MAIL送信" Const SbjAdd = "b2" Const BodyAdd = "b3:b14" Dim olApp As Outlook.Application Dim objMail As Outlook.MailItem Dim Rng As Range Dim StrBody As String Set olApp = Outlook.Application Set objMail = olApp.CreateItem(olMailItem) For Each Rng In Range(BodyAdd) StrBody = StrBody & Rng.Value & vbLf Next Rng With objMail .Subject = Worksheets(ShName).Range(SbjAdd).Value .Body = StrBody .Display End With End Sub

専門家に質問してみよう