🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

1回答

6943閲覧

Excel for Mac のVBAにてメール送信したい

UniverseMove

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

2クリップ

投稿2019/09/14 06:31

前提・実現したいこと

Windows版 Excel VBAにて自動メール送信するツール使っています。
これを今度Macに移植する作業の中で問題にぶつかりました。
WindowsではCDO(Microsoft CDO for Windows 2000 Library)を利用しています。
Macではこれが標準で準備されておらず、実行できません。

質問は、
Macにもこのライブラリを追加することができるのか?
追加できるのであればどうしたら良いのか?
追加できない場合には、Excel for MacのVBAにて自動メール送信する代替方法はあるのか?
です。

色々と探したのですが、非力ながら情報を見つけることができませんでした。

どなたかわかる方がいましたらご教示頂けましたら幸いです。

どうぞ宜しくお願い致します。

発生している問題・エラーメッセージ

コンパイル エラーです。: ユーザー定義型は定義されていません。

該当のソースコード

VBA

1'******************************************************************************* 2' CDOでメールを送信する 3'******************************************************************************* 4' [参照設定] 5' ・Microsoft CDO for Windows 2000 Library 6'******************************************************************************* 7Option Explicit 8 9 'CDO Const 10 Const cdoSendUsingMethod = _ 11 "http://schemas.microsoft.com/cdo/configuration/sendusing" 12 Const cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver" 13 Const cdoSMTPServerPort = _ 14 "http://schemas.microsoft.com/cdo/configuration/smtpserverport" 15 Const cdoSMTPConnectionTimeout = _ 16 "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout" 17 Const cdoSMTPAuthenticate = _ 18 "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" 19 Const cdoSendUsingPort = 2 20 Const cdoAnonymous = 0 21 Const cdoLanguageCode = _ 22 "http://schemas.microsoft.com/cdo/configuration/languagecode" 23 24 'Font Code 25 Const cdoShift_JIS = "shift-jis" 26 Const cdoEUC_JP = "euc-jp" 27 Const cdoISO = "iso-2022-jp" 28 Const cdoUTF_7 = "utf-7" 29 Const cdoUTF_8 = "utf-8" 30 31 'kitei 32 Private Const cnsConfiguration = "http://schemas.microsoft.com/cdo/configuration/" 33 Private Const cnsSendUsing = 2 34 35'******************************************************************************* 36' メール送信テストプログラム 37'******************************************************************************* 38Sub TEST() 39 Dim MailSmtpServer As String 40 Dim MailFrom As String 41 Dim MailTo As String 42 Dim MailSubject As String 43 Dim MailBody As String 44 Dim strMSG As String 45 46 ' 送信確認 47 If MsgBox("メールを送信します。", vbYesNo) <> vbYes Then Exit Sub 48 MailSmtpServer = Cells(1, 2).Text ' SMTPサーバ 49 MailFrom = Cells(2, 2).Text ' 発信者 50 MailTo = Cells(3, 2).Text ' 宛先 51 MailSubject = Cells(4, 2).Text ' 件名 52 MailBody = Cells(5, 2).Text ' 本文 53 ' メール送信(CC,BCCはブランク) 54 strMSG = SendMailByCDO(MailSmtpServer, MailFrom, MailTo, "", "", _ 55 MailSubject, MailBody) 56 If strMSG <> "OK" Then MsgBox Mid(strMSG, 3) 57End Sub 58 59 60'******************************************************************************* 61' メール送信(CDO) 62'******************************************************************************* 63' [引数] 64' ①MailSmtpServer : SMTPサーバ名(又はIPアドレス) 65' ②MailFrom : 送信元アドレス 66' ③MailTo : 宛先アドレス(複数の場合はカンマで区切る) 67' ④MailCc : CCアドレス(複数の場合はカンマで区切る) 68' ⑤MailBcc : BCCアドレス(複数の場合はカンマで区切る) 69' ⑥MailSubject : 件名 70' ⑦MailBody : 本文(改行はvbCrLf付加) 71' ⑧MailAddFile : 添付ファイル(複数の場合はカンマで区切るか配列渡し) ※Option 72' ⑨MailCharacter : 文字コード指定(デフォルトはShift-JIS) ※Option 73' [戻り値] 74' 正常時:"OK", エラー時:"NG"+エラーメッセージ 75'******************************************************************************* 76Private Function SendMailByCDO(MailSmtpServer As String, _ 77 MailFrom As String, _ 78 MailTo As String, _ 79 MailCc As String, _ 80 MailBcc As String, _ 81 MailSubject As String, _ 82 MailBody As String, _ 83 Optional MailAddFile As Variant, _ 84 Optional MailCharacter As String) 85 Const cnsOK = "OK" 86 Const cnsNG = "NG" 87 'Dim objCDO As New CDO.Message 88 Dim objCDO As Object 89 Dim vntFILE As Variant 90 Dim IX As Long 91 Dim strCharacter As String, strBody As String, strChar As String 92 93 On Error GoTo SendMailByCDO_ERR 94 SendMailByCDO = cnsNG 95 96 ' 文字コード指定の確認 97 If MailCharacter <> "" Then 98 ' 指定ありの場合は指定値をセット 99 strCharacter = MailCharacter 100 Else 101 ' 指定なしの場合はShift-JISとする 102 strCharacter = cdoShift_JIS 103 End If 104 105 ' 本文の改行コードの確認 106 ' Lfのみの場合Cr+Lfに変換 107 strBody = Replace(MailBody, vbLf, vbCrLf) 108 ' 上記で元がCr+Lfの場合Cr+Cr+LfになるのでCr+Lfに戻す 109 MailBody = Replace(strBody, vbCr & vbCrLf, vbCrLf) 110 111 #If Mac Then 112 Set objCDO = New CDO.Message 113 #Else 114 Set objCDO = CreateObject("CDO.Message") 115 #End If 116 117 With objCDO 118 With .Configuration.Fields ' 設定項目 119 .Item(cdoSendUsingMethod) = cdoSendUsingPort ' 外部SMTP指定 120 .Item(cdoSMTPServer) = MailSmtpServer ' SMTPサーバ名 121 .Item(cdoSMTPServerPort) = 25 ' ポート№ 122 .Item(cdoSMTPConnectionTimeout) = 60 ' タイムアウト 123 .Item(cdoSMTPAuthenticate) = cdoAnonymous ' 0 124 .Item(cdoLanguageCode) = strCharacter ' 文字セット指定 125 .Update ' 設定を更新 126 End With 127 .MimeFormatted = True 128 .Fields.Update 129 .From = MailFrom ' 送信者 130 .To = MailTo ' 宛先 131 If MailCc <> "" Then .CC = MailCc ' CC 132 If MailBcc <> "" Then .BCC = MailBcc ' BCC 133 .Subject = MailSubject ' 件名 134 .TextBody = MailBody ' 本文 135 .TextBodyPart.Charset = strCharacter ' 文字セット指定(本文) 136 ' 添付ファイルの登録(複数対応) 137 If ((VarType(MailAddFile) <> vbError) And _ 138 (VarType(MailAddFile) <> vbBoolean) And _ 139 (VarType(MailAddFile) <> vbEmpty) And _ 140 (VarType(MailAddFile) <> vbNull)) Then 141 If IsArray(MailAddFile) Then 142 For IX = LBound(MailAddFile) To UBound(MailAddFile) 143 .AddAttachment MailAddFile(IX) 144 Next IX 145 ElseIf MailAddFile <> "" Then 146 vntFILE = Split(CStr(MailAddFile), ",") 147 For IX = LBound(vntFILE) To UBound(vntFILE) 148 If Trim(vntFILE(IX)) <> "" Then 149 .AddAttachment Trim(vntFILE(IX)) 150 End If 151 Next IX 152 End If 153 End If 154 .Send ' 送信 155 End With 156 Set objCDO = Nothing 157 SendMailByCDO = cnsOK 158 Exit Function 159 160'------------------------------------------------------------------------------- 161SendMailByCDO_ERR: 162 SendMailByCDO = cnsNG & Err.Number & " " & Err.Description 163 On Error Resume Next 164 Set objCDO = Nothing 165End Function 166 167'-----------------------------<< End of Source >>------------------------------- 168 169

試したこと

Windows のCDOライブラリである、
cdosys.dll
をそのままExcel for Mac のVBAの参照設定に追加しようとしたが、
当然ながら追加できなかった。
それ以外の方法を思いつくことや、情報を得ることができず、立ち往生しています。

補足情報(FW/ツールのバージョンなど)

***開発環境
MacBook Pro Mid 2015
macOS Mojave (バージョン10.14.16)
Excel for Mac (バージョン16.28)
Microsoft Visual Basic for Applications 7.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imihito

2019/09/16 13:24

AppleScript について調べられてみてはどうでしょう?
UniverseMove

2019/09/18 06:51

コメントありがとうございます。 AppleScriptですね。調べてみます。 ありがとうございます。
UniverseMove

2019/09/18 08:58

コメントありがとうございます。 Answer中のリンクにはExcel for Mac 2011のケースに関する記述もありとても参考になりそうです。後ほど解決できるか試したいと思います。 貴重な情報ありがとうございます。
guest

回答1

0

はじめまして。
やりたいことはよくわかりましたので、参考までにURLを記載しますので、試してみてください。
https://www.fastclassinfo.com/entry/vba_gmail_sendmail

これにより、問題が解決することを祈ります。

投稿2019/09/16 04:36

nico99

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imihito

2019/09/16 13:28

質問に「CDOでは出来なかった」とあるのにCDOを使った記事を勧めるのは適当ではないと思われます。
UniverseMove

2019/09/18 06:54

回答ありがとうございます。 ですが、imihitoにもありますように、CDOでできないのをどうしたらよいか、という質問でしたので申し訳ございませんが不要情報でございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問