HOME技術ExcelExcel VBA:メールを送信する

Excel VBA:メールを送信する

Excel VBAからメールを送信するボタンをつくります。
パスワードロックをかけたブックを利用していて、パスワードがわからなくなったらメールを送信してパスワードを教える機能を付けようと思い、調べました。
調べた後に、パスワードロックをしても突破する方法がいくつもあることを知り、パスワードロックをかけること自体無意味なことかと考えています…

CDO(Microsoft Collaboration Data Objects)を使用可能にする

「開発」メニューよりデザインモードにして、「挿入」→「ActivXコントロール」→「コマンドボタン(ActiveXコントロール)」を設置します。
右クリックしてプロパティを開いて、オブジェクト名を「sendMail」、Captionを「メール送信」にします。

デザインモードのまま、配置したボタンをダブルクリックしてVBAのコード入力画面を開きます。

「ツール」→「参照設定」を指定します。

「参照可能なライブラリファイル」の一覧から「Microsoft CDO for Windows 2000 Library」にチェックを入れて、「OK」をクリックします。

コード

Dim sendMailObject As New CDO.Message
With sendMailObject
With .Configuration.Fields
.Item(cdoSMTPServer) = “xxx.xxx.xxx” ‘ SMTPサーバ
.Item(cdoSendUsingMethod) = “cdoSendUsingPort”
.Item(cdoSMTPServerPort) = 587 ‘ 送信ポート名
.Item(cdoSMTPConnectionTimeout) = 60 ‘ タイムアウト時間
.Item(cdoSMTPAuthenticate) = cdoBasic ‘ SMTP認証の種類
.Item(cdoSMTPUseSSL) = False ‘ SSL
.Item(cdoSendUserName) = “xxxxxxx” ‘ 送信ユーザアカウント名
.Item(cdoSendPassword) = “xxxxxx” ‘ 送信パスワード
.Item(cdoLanguageCode) = CdoCharset.cdoShift_JIS ‘ 文字コード
.Update
End With
With .Fields
.Item(“urn:schemas:mailheader:X-Priority”)= 1
.Item(“urn:schemas:mailheader:X-MsMail-Priority”)= “High”
.Update
End With
.MDNRequested = False ‘ 開封確認
.MimeFormatted = True ‘ MIMEを使った書式設定
.From = “xxx@xxx.xxx” ‘ 送信元メールアドレス
.To = “xxx@xxx.xxx” ‘ 宛先メールアドレス
.Subject = “xxxxxx” ‘ メール件名
.TextBody = “xxxxx” ‘ メール本文
.Send
End With
Set sendMailObject = Nothing
End Sub

メール送信をする際には、送信用のユーザアカウント、パスワード、SMTPサーバ名が必要です。
cdoSMTPUseSSLはSSLを使った送信をするか否かを指定するものです。
SSLを使う場合にはTrueを指定しますが、エラーが出る場合もあります。
送信元メールアドレスは、架空のメールアドレスでもいいので、xxx@xxx.xxxという形式の指定をします。指定がおかしいとエラーが出ます。

関連記事

Excelで開発タブを表示する

ExcelでVBAをつくるときに「開発」メニューを使いますが、最初は表示されていません。 「開発」を表示するには、Excelを起動して、「ファイル」→「オプション」→「リボンのユーザー設定」から、「リ…続きを読む

Excel:保存先の場所を常にデスクトップにする

Microsoft Excel2019で新規に保存をしようとするとOne Driveなどが最初に候補にあがってきてしまい、コンピュータ上に保存したいときに、いちいちデスクトップを指定するのに手間取りま…続きを読む

Excel VBA:特定のシートをコピーして別ブックを生成する

Excel VBAで、特定のシートの値をすべてコピーして、新しい別のExcelブックを生成してそのシートに貼りつけます。 なお、ブックを生成した後は、各自で保存します。 コード Worksheets(…続きを読む

Excel VBA:最終行番号を取得する

Excelでデータ管理をしていて、VBAでその全データに対して何らかの処理を行う場合、1行目から最終行までループさせて処理を1行ずつ行う場合には、最終行を取得する必要があります。 今回は、最終行を取得…続きを読む

Excelでセルに入力できる文字数制限を設定する

Excelで、セルに入力できる字数の制限を設定する方法です。 全角・半角問わず字数制限する メニューから「データ」を選択し「データの入力規則」をクリックします。 データの入力規則設定画面で、「設定」タ…続きを読む

Exdel VBA:グローバル変数の指定

Excel VBAでグローバル変数を設定する方法です。 プロシージャ内で宣言した変数は、そのプロシージャ内でしか通用しません。 すべてのプロシージャから参照するような定数を設定する場合には、以下のよう…続きを読む

Excelのフォームのタブオーダーを指定する

Excelでフォームを設定し、部品を複数配置していると、タブキーやEnterキーを押すと次の部品にフォーカスを飛ばすことができます。 この順序が意図したとおりでない場合に、自分で設定する方法を調べまし…続きを読む

Excelで数式のみをコピーする

Excelで数式だけをコピーして貼り付ける方法です。 以下のように、セルC6に入力されている数式を、セルD6にコピーしたい場合、セルの右下をドラッグしてD6に持っていくと枠線やセルの背景色などの余計な…続きを読む

Excelでワークシートを追加しようとすると「名前が変更されたか、移動や削除が行われた可能性があります」というエラーが表示される

Excelでワークシートを追加しようとしたら、「****\ワークシート.xlsxが見つかりません。名前が変更されたか、移動や削除が行われた可能性があります。」と表示されて、ワークシートを追加することが…続きを読む

Excel VBAで「はい」「いいえ」の条件分岐をする

Excel VBAでメッセージ(質問)を表示して、ユーザに「はい」「いいえ」の選択をさせて、その結果で処理を分岐させる方法です。 if文による条件分岐 条件分岐には以下のようなif文を使います。 If…続きを読む