• 締切済み

Outlook2007送信前の宛先確認のVBAにて

Outlook2007 送信前の宛先確認のマクロを設定したいと考えています。 Option Explicit Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) On Error GoTo Ex ception Dim strCC strCC = vbCrLf Dim objRec As Recipients For Each objRec In Item.Recipients strCC = strCC & objRec.Name & vbCrLf Next Dim strMsg As String strMsg = "件名:" & Item.Subject & vbCrLf & _ _ strCC & vbCrLf & _ _ "上記の宛先に、メールを送信してもよろしいですか?" If MsgBox(strMsg, vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then Cancel = True End If On Error GoTo 0 Exit Sub Exception: MsgBox CStr(Err.Number) & ":" & Err.Description, vbOkOnly + vbCritical Cancel = True Exit Sub これだけだと、End subが必要ですというポップアップがあがり、付加すると『型が一致しません』というポップアップがあがってしまいます。 どうすれば良いか教えていただけますか? あと、宛先をグループ登録してる場合、グループ登録している宛先を氏名で表示する方法はありますでしょうか??

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

OutlookVBAもそんなに詳しいわけではないですが試してみた感じだと以下のような。 Option Explicit Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)   Dim objRec As Recipient   Dim strCC As String   Dim strMsg As String   Dim s   As String    '■変数追加   Dim a   As AddressEntry '■変数追加   On Error GoTo Exception   strCC = vbCrLf   For Each objRec In Item.Recipients     If objRec.AddressEntry.Members Is Nothing Then       s = objRec.Name     Else       s = ""       For Each a In objRec.AddressEntry.Members         s = s & a.Name & vbCrLf       Next     End If     strCC = strCC & s & vbCrLf   Next   strMsg = "件名:" & Item.Subject & vbCrLf & strCC & vbCrLf & _        "上記の宛先に、メールを送信してもよろしいですか?"   If MsgBox(strMsg, vbExclamation + vbYesNo + vbDefaultButton2) <> vbYes Then     Cancel = True   End If   On Error GoTo 0   Exit Sub Exception:   MsgBox CStr(Err.Number) & ":" & Err.Description, vbOKOnly + vbCritical   Cancel = True End Sub >『型が一致しません』 これは >Dim objRec As Recipients 変数 objRec の 型の間違い。 正しくは Recipient です。 >For Each objRec In Item.Recipients ここで Recipients コレクション をLoopして個々の Recipient オブジェクトに対して処理するわけだから それに合った型を用意してあげないといけません。 >グループ登録している宛先を氏名で表示する方法 Typeで分岐できるのかもしれないけど取り合えず Recipient オブジェクト の AddressEntry.Members をLoopして取得すれば良さそうでした。

関連するQ&A

  • VBAの構文

    Access2002を使用しています。 VBAにて、クエリの結果をメール本文に書き出したいのですが 宜しくお願いします。 【使用するクエリ】 クエリ名:果物クエリ(選択クエリ) フィールド項目:日付、注文者、発送先、電話番号、品名、数量 【現在の内容】 Private Sub コマンド1_Click() On Error GoTo Err_コマンド1_Click Dim stDocName As String Dim strsubject As String Dim strmailto As String Dim strmailto2 As String Dim strtext0 As String Dim strText1 As String Dim strText2 As String Dim strText3 As String Dim strText4 As String Dim strText5 As String Dim strtext6 As String Dim strtext7 As String Dim strtext8 As String Dim strtext9 As String strmailto = Me.電子メール_アドレス strsubject = "商品発送のお知らせ" strText1 = Me.氏名 & " 様" strText2 = "いつもお世話になります、第一青果です。" strText3 = "以下の商品を発送致しましたのでご確認下さいませ。 " strtext0 = "---------------------------------" strText4 = "何でも新鮮!" strText5 = "第一青果" strtext6 = "担当:山田 太郎" strtext7 = "mailto:info@808yaoya.net" strtext8 = "http://808yaoya.net" strtext9 = ★ここからクエリ内の「品名」と「数量」を書き出したい!★ ★以下、現在はレポートをエクセルファイルにして添付するようにしている★ stDocName = ChrW(32013) & ChrW(21697) & ChrW(12524) & ChrW(12509) & ChrW(12540) & ChrW(12488) DoCmd.SendObject acReport, stDocName, , strmailto, , , strsubject, strText1 & vbCrLf & vbCrLf & strText2 & _ vbCrLf & strText3 & vbCrLf & vbCrLf & strtext0 & vbCrLf & strText4 & vbCrLf & strText5 & vbCrLf & strtext6 & vbCrLf & _ strtext7 & vbCrLf & strtext8 & vbCrLf & strtext0 & vbCrLf & strtext9, True Exit_コマンド1_Click: Exit Sub Err_コマンド1_Click: MsgBox Err.Description Resume Exit_コマンド1_Click End Sub

  • エクセルをVBAでOUTLOOKで送信したい(再)

    数年前にエクセルをPDFにして添付ファイルとしてOUTLOOKで送信するコードを教えてもらって毎日のように便利に使っているのですが、今回は元のマクロ付きエクセルのまま同じことがしたく、試行錯誤でpdfをxlmsに変えてみたら、メールは起動して来るのですが 「ファイルが見つかりません」とエクセルが添付されません。 どなたかどこを修正すれば良いのかHELPお願いします。 Option Explicit Sub Saveaspdfandsend() Dim xSht As Worksheet 'Dim xFileDlg As FileDialog Dim xFolder As String 'Dim xYesorNo As Integer Dim xOutlookObj As Object Dim xEmailObj As Object Dim xUsedRng As Range Const PdfDir = "\\XXXX\TEST報告書成績表" 'PDFを保存するフォルダー Set xSht = ActiveSheet 'Set xFileDlg = Application.FileDialog(msoFileDialogFolderPicker) ' 'If xFileDlg.Show = True Then '  xFolder = xFileDlg.SelectedItems(1) 'Else '  MsgBox "You must specify a folder to save the PDF into." & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Must Specify Destination Folder" '  Exit Sub 'End If xFolder = PdfDir & "\" & xSht.Cells(22, 5).Value & " " & xSht.Cells(1, 1).Value & ".pdf" 'Check if file already exist 'If Len(Dir(xFolder)) > 0 Then '  xYesorNo = MsgBox(xFolder & " already exists." & vbCrLf & vbCrLf & "Do you want to overwrite it?", _ '           vbYesNo + vbQuestion, "File Exists") '  On Error Resume Next '  If xYesorNo = vbYes Then '    Kill xFolder '  Else '    MsgBox "if you don't overwrite the existing PDF, I can't continue." _ '          & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Exiting Macro" '    Exit Sub '  End If '  If Err.Number <> 0 Then '    MsgBox "Unable to delete existing file. Please make sure the file is not open or write protected." _ '          & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Unable to Delete File" '    Exit Sub '  End If 'End If Set xUsedRng = xSht.UsedRange If Application.WorksheetFunction.CountA(xUsedRng.Cells) <> 0 Then 'Save as PDF file xSht.ExportAsFixedFormat Type:=xlTypePDF, Filename:=xFolder, Quality:=xlQualityStandard 'Create Outlook email Set xOutlookObj = CreateObject("Outlook.Application") Set xEmailObj = xOutlookObj.CreateItem(0) With xEmailObj .Display .To = "-----.co.jp" .CC = "----.co.jp" .Subject = "XXX報告書" & " " & Range("D10") .Body = "お疲れ様です。" & vbLf & "表題の件、添付の通りです。 " & vbLf & " " & vbLf & "営業部" .Attachments.Add xFolder 'If DisplayEmail = False Then '.Send 'End If End With Else MsgBox "The active worksheet cannot be blank" Exit Sub End If End Sub

  • VBAのキャンセル処理

    下記のVBAでファイルを出力することはできるようになったのですが、 出力するときに[キャンセル]を押しても"MsgBox :Excelファイルへの出力が完了しました。"が表示されてしまいます。 「キャンセル」した場合は、このメッセージが表示されないようにできないでしょうか? Private Sub Image_Export_Click() On Error GoTo Err_FileDialog_Click 'ファイル出力 Dim strFileName As String Dim ExpFileName As String ExpFileName = "T_master_" & Format(Now(), "yyyymmdd") strFileName = GetFileName(False, "MicrosoftExcel ブック (*.xls)|*.xls", "", ExpFileName & ".xls") If Len(strFileName) = 0 Then 'キャンセルボタンが押されたときの処理を記述 MsgBox "キャンセルが押されました。" Else DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "T_master", strFileName & ".xls", True End If MsgBox "Excelファイルへの出力が完了しました。", , "出力完了" Exit_FileDialog_Click: Exit Sub Err_FileDialog_Click: MsgBox "予期せぬエラーが発生しました" & Chr(13) & _ "エラーナンバー:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbOKOnly End Resume Exit_FileDialog_Click End Sub

  • エクセルVBAにて保存するとき

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("エクセルを終了してもよろしいですか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If Application.DisplayAlerts = False Application.Quit End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "そのボタンでは保存できません。" & vbCrLf & _ "雛形は残しておきましょう" & vbCrLf & _ "" & vbCrLf & _ "ツールバーの「マクロなし出力」から保存できます。" Cancel = True End Sub という二つのマクロをThisworkbookにいれてあるんですが、 この二つを有効(今は2つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?

  • vbaで、postgresqlアクセス問題

    vbaで、postgresqlアクセス問題:      データベースに、データは ***0000, でも、vbaで、取得したのは ****.四つの0が自動に、削除されました。      例: postgresqlに、 40000 ⇒ vbaで、取得した: 4   vbaソース:  Option Explicit Sub subPgGetData() Dim adoCn As New ADODB.Connection On Error GoTo ErrLogin: With adoCn .Provider = "PostgreSQL OLE DB Provider" .Properties("Data Source") = Range("B1").Value .Properties("Location") = Range("B2").Value .Properties("User ID") = Range("B3").Value .Properties("Password") = Range("B4").Value .Open End With On Error GoTo 0 Dim adoRs As New ADODB.Recordset On Error GoTo ErrSql: adoRs.Open Range("B6").Value, adoCn, adOpenForwardOnly, adLockReadOnly On Error GoTo 0 Workbooks.Add Cells.CopyFromRecordset adoRs Cells.Columns.AutoFit adoRs.Close: Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub ErrLogin: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoCn = Nothing Exit Sub ErrSql: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub End Sub わかる方はご指示ください。 よろしくお願いします。

  • Access2013で確認メッセージを消すには

    画像ファイルの管理データベースを作っています。 管理データベースには、ローカルファイルのフルパスのみ記録し ボタンをクリックしたとき、Windowsフォトビューアで プレビューするようにコードを書きました。 しかし、JPGファイルを開くときは問題ないのですが PNGファイルを開くとき、毎回Microsoft Officeの確認メッセージ ~を開いています。ファイルにはウイルスやコンピューターに問題を起こす 可能性のあるものが含まれていることがあります。 このファイルが信頼できる所からのものか確かめてください。 ファイルを開きますか? が表示されます。 メッセージを表示させない為にはどうしたら良いか、ご教授願います。 以下、ファイルを開く為に作ったコード2種です。 実行結果は同じです。 コード1 Private Sub OpenBotan_Click() Dim strInput As String On Error GoTo Error_GetUserAddress strInput = Me.パス Application.FollowHyperlink strInput, , True GetUserAddress = True Exit_GetUserAddress: Exit Sub Error_GetUserAddress: MsgBox Err & ": " & Err.Description GetUserAddress = False Resume Exit_GetUserAddress End Sub コード2 Private Sub イメージ21_Click() On Error GoTo エラー Dim myTextValue As TextBox Set myTextValue = Me.パス If IsNull(myTextValue) Then MsgBox "URLが未入力です。": Exit Sub Me.イメージ21.HyperlinkAddress = "" '--- A Me.イメージ21.HyperlinkAddress = myTextValue Exit Sub エラー: MsgBox Err.Number & " : " & Err.Description Exit Sub End Sub

  • AccessのVBAに関しての質問です。

    クエリで抽出したファイルをCSVで出力させ、出力したファイル名を「連番&ファイル名」の形にしたく 下記のコードを使用しました。 6ファイルは出力は成功したのですが、7ファイル目を出力しようとしたところ、「#6:オーバーフロウしました。」とエラーがでてきてしまいます。 原因やここのコードを変えれば直るというのが、お分かりになる方がいればご教示頂けますでしょうか。 初心者ですのでコードも書いて頂けると非常に助かります。 Private Sub コマンド4_Click() On Error GoTo ErrorTrap Dim varAccess As Variant Dim varCPass As Variant Dim strmsg As String varAccess = "ASN抽出" Dim FolderPass As String Dim FileName As String Dim CheckCount As Integer FolderPass = "C:¥Users¥エクスポート¥" FileName = "_STORE_ASN_TRN.csv" CheckCount = 0 Do Until Dir(FolderPass & FileName) = "" CheckCount = CheckCount + 1 FileName = Format(CheckCount, Len(CStr(CheckCount)) + 1) & "_STORE_ASN_TRN" & ".csv" Loop varTextPass = FolderPass & FileName strmsg = "csvファイルへ出力します。" & Chr(13) & _ "出力先は" & varTextPass & "です。" & _ "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferText acExportDelim, , varAccess, varTextPass, False MsgBox "データ出力は、正常に完了しました。" End If Exit Sub ErrorTrap: If Err.Number = 3044 Then ' MsgBox "パス指定が誤っています。", vbCritical Else MsgBox "予期せぬエラーが発生しました。(#" & Err.Number & " : " & Err.Description & ")", vbCritical End If End Sub

  • 二つのエラーを発生させたい

    ひとつのプロシージャー内で、 二つのエラートラップを仕掛ける事は出来ないのでしょうか? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description On Error GoTo Err2 i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub を行うと、 i = "b" で2回目のエラーが発生した時は、 実行時エラーになってしまいます。 i = "b" で2回目のエラーが発生した時に、 「Err2のエラー: 型が一致しません。」 と表示させるにはどうすればいいでしょう? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 On Error GoTo Err2 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub にすると、 i = "a" のエラーで、 「Err2のエラー: 型が一致しません。」 へ移動してしまいます。

  • エクセルVBA アクセスにインポート

    エクセルのデータ(列数、行タイトルは都度かわる)をアクセスにインポートしテーブルを作成したいと思っています。 VBAでこの処理をおこないたく、下記のコードで実行したのですがデバッグがはしってしまいます。 (DとEでデバッグ) 原因がお分かりになる方がおりましたら、教えていただけますでしょうか? 何卒、よろしくお願い申し上げます。 Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "T_TESTTABLE" ' --- A varxls = "C:\Users\AC\Desktop\ACTEST\RAWDATA.xlsx" ' ---B strrange = "TEST_RAWDATA" ' --- C strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" DoCmd.DeleteObject acTable, varac ' --- D If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange ' -- E MsgBox "データ入力は、正常に完了しました。" End If Exit Function エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & _ "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Function End Function

  • エクセル BVA メッセージボックスの作り方

    エクセルを開くと、メッセージボックスで、警告を出したいのですが 出来れば・・文字を2行目のみ中央寄せ。さらに1行と2行の間に行間を2つ程いれたいのですが・・やり方がわかりません。 一応、途中まで作りましたが、 アドバイスの程よろしくお願い致します。 ---------------------------------- Private Sub Workbook_Open() Dim strMsg1 As String Dim strMsg2 As String strMsg1 = "この ファイルは上書き保存できません " strMsg2 = "作成者: ○○" MsgBox strMsg1 & vbCrLf & strMsg2 End Sub ------------------------------------

専門家に質問してみよう