前提・実現したいこと
マクロを使って一斉送信できるようにしたいです。
作成の際に参照しておりますのは下記のサイトです。
https://excel-excel.com/letsmake8/step0.html
作成はサイトに従って行っております。
各人のデスクトップにファイルを保管し、実行できるようにしたいです。
発生している問題・エラーメッセージ
コードのFunctionの箇所にセルが移動して下記のエラーが出ます。 コンパイルエラー このプロジェクトのコードは64ビットシステムで使用するために更新する 必要があります。 Declareステートメントの確認および更新を行い、次にDeclareステートメント にPtrSafe属性を設定してください。
そして下記のコードは全て赤色になっております。 Private Declare Function SendMail Lib "bsmtp" _ (szServer As String, szTo As String, szFrom As String, _ szSubject As String, szBody As String, szFile As String) As String
該当のソースコード
Option Explicit Private Declare Function SendMail Lib "bsmtp" _ (szServer As String, szTo As String, szFrom As String, _ szSubject As String, szBody As String, szFile As String) As String Private Function ExSendMail() As Boolean Dim sret As String Dim szServer As String 'SMTPサーバー名 Dim szFrom As String '送信元 Dim szTo As String '宛先 Dim szSubject As String '件名 Dim szBody As String '本文 Dim szFile As String '添付ファイル ExSendMail = False szServer = Range("H6") szFrom = Range("H7") szTo = Range("H7") szSubject = Range("H9") szBody = Range("H11") szFile = "" On Error GoTo ErrEnd sret = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile) ' 送信エラーの場合 If Len(sret) <> 0 Then MsgBox "送信エラー: " & sret, , "一斉メール送信" Else ExSendMail = True End If Exit Function ErrEnd: MsgBox "送信中にエラーが発生しました。" & vbCrLf & Err.Description, , "一斉メール送信" End Function Private Sub CommandButton1_Click() If ExSendMail Then MsgBox "正常に送信できました。", , "一斉メール送信" End If End Sub
'送信設定値のチェック Private Function ExDataCheck() As Boolean ExDataCheck = False If Range("I7") = "" Then MsgBox "SMTPサーバー名を入力してください。", , "一斉メール送信" Exit Function End If If Range("L7") = "" Then MsgBox "ポート番号を入力してください。(通常は「25」になります)", , "一斉メール送信" Exit Function End If If Range("I8") = "" Then MsgBox "送信元アドレスを入力してください。", , "一斉メール送信" Exit Function End If If Range("I10") = "" Then MsgBox "件名を入力してください。", , "一斉メール送信" Exit Function End If If Range("I11") = "" Then MsgBox "本文を入力してください。", , "一斉メール送信" Exit Function End If ExDataCheck = True End Function Private Sub CommandButton2_Click() Dim lrow As Long '送信設定値のチェック If ExDataCheck = False Then Exit Sub End If '送信先アドレスの最終行を調べる lrow = ActiveSheet.Range("D65536").End(xlUp).Row If lrow = 6 Then MsgBox "送信先アドレスは最低1件は入力してください。", , "一斉メール送信" End If End Sub '下記のVBAコードに変更してください。 Private Function ExSendMail() As Boolean Dim sret As String Dim szServer As String 'SMTPサーバー名 Dim szFrom As String '送信元 Dim szTo As String '宛先 Dim szSubject As String '件名 Dim szBody As String '本文 Dim szFile As String '添付ファイル ExSendMail = False szServer = Range("I7") & ":" & Range("L7") If Range("I6") = "" Then szFrom = Range("I8") Else szFrom = Range("I6") & "<" & Range("I8") & ">" End If szTo = Range("I8") szSubject = Range("I10") szBody = Range("I11") szFile = "" On Error GoTo ErrEnd sret = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile) ' 送信エラーの場合 If Len(sret) <> 0 Then MsgBox "送信エラー: " & sret, , "一斉メール送信" Else ExSendMail = True End If Exit Function ErrEnd: MsgBox "送信中にエラーが発生しました。" & vbCrLf & Err.Description, , "一斉メール送信" End Function Private Sub CommandButton1_Click() If ExDataCheck = False Then Exit Sub End If If ExSendMail Then MsgBox "正常に送信できました。", , "一斉メール送信" End If End Sub`
Private Sub ExAllSendMail(lrow As Long) Dim sret As String Dim szServer As String 'SMTPサーバー名 Dim szFrom As String '送信元 Dim szTo As String '宛先 Dim szSubject As String '件名 Dim szBody As String '本文 Dim szFile As String '添付ファイル Dim i As Long szServer = Range("J7") & ":" & Range("M7") If Range("J6") = "" Then szFrom = Range("JI8") Else szFrom = Range("J6") & "<" & Range("J8") & ">" End If szSubject = Range("J10") szBody = Range("J11") szFile = "" On Error GoTo ErrEnd For i = 7 To lrow '送信マークとアドレスの確認 If Cells(i, 2) = 1 And Cells(i, 4) <> "" Then Cells(i, 5) = "" Cells(i, 6) = "送信中!!" Cells(i, 6).Font.Color = RGB(255, 0, 0) '宛名 If Cells(i, 3) = "" Then szTo = Cells(i, 3) Else szTo = Cells(i, 3) & "<" & Cells(i, 4) & ">" End If sret = SendMail(szServer, szTo, szFrom, szSubject, szBody, szFile) Cells(i, 6).Font.Color = RGB(0, 0, 0) '送信エラーの場合 If Len(sret) <> 0 Then Cells(i, 5) = "Error" Cells(i, 6) = sret Else Cells(i, 5) = Format(Now, "yyyy/mm/dd hh:nn:ss") Cells(i, 6) = "" End If End If Next Exit Sub ErrEnd: Range("E2") = "" MsgBox "送信中にエラーが発生しました。処理を中止します。" _ & vbCrLf & Err.Description, , "一斉メール送信" End Sub '下記のVBAコードに変更してください。 Private Sub CommandButton2_Click() Dim lrow As Long '送信設定値のチェック If ExDataCheck = False Then Exit Sub End If '送信先アドレスの最終行を調べる lrow = ActiveSheet.Range("D65536").End(xlUp).Row If lrow = 6 Then MsgBox "送信先アドレスは最低1件は入力してください。", , "一斉メール送信" End If '一斉メール送信 ExAllSendMail lrow End Sub
補足情報(FW/ツールのバージョンなど)
参照設定はMicrosoft office 16.0 Object Libraryにチェックが入っております。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/09 05:07