[[20181026115914]] 『マクロによるOutlookメール新規作成について』(たなか) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロによるOutlookメール新規作成について』(たなか)

Excelの表からOutlookの新規メール作成は何とかできましたが、
【表の中から一部の列だけメール作成】ができません。

1列目に見出しがあります。

A    B    C    D    E
番号  宛先   件名   本文  ステータス

AにはRow()-1のナンバリングをしてます。

ユーザーフォームを利用して、テキストボックスでAの番号を入力したら、
その列だけメール作成、
もしくは、Eのステータスが未送信のものだけコンボボックスに表示してそこから選択するようなマクロはできないのでしょうか。

わかりづらく申し訳ありませんが、ご教示ください。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


一部の列だけできないのなら、それはその列に何か問題があるのでしょう。(行の間違いではないですか?)

マクロもデータも何も判らない状態では、誰も答えられないです。 まずはステップ実行して、ご自分でデバッグし、エラーになる直前でどういう状態になっているのかを調べてみてください。(例えば、問題のデータを先頭に移動してからステップ実行するとか)

未送信のものだけ選択表示してから対象指定なんて、そんな作るのも使うのも面倒な機能を考えずとも、「未送信」なもの全部対象にしたコードにしておけば、「送信保留」とか違う文字列に変えるだけで送信しなくなるのでは?
(???) 2018/10/26(金) 12:58


 勝手な解釈もあるかもしれませんが、
 「Excelの表からOutlookでメールを作る部分はできているが、どの番号のものを作成するかを
 ユーザーフォームで指定してやりたい。
 指定はテキストボックスやコンボボックスから番号を指定したい。
 ただし、コンボボックスには未送信のものだけを列挙したい。」
 と受けとらえましたが合ってますかね?

 で、まずはユーザーフォーム(Userform1)にコンボボックス(ComboBox1)とコマンドボタン(CommandButton1)を1つずつ配置。

 コンボボックスはテキストボックスを兼ねてます(直接入力してもいいし、リストから選択してもいい)。

 フォームモジュールに
 Private Sub CommandButton1_Click()
    Dim i
    Dim n As Long
    If IsNumeric(Me.ComboBox1.value) Then
        n = Val(Me.ComboBox1.value)
        With ActiveSheet
            i = Application.Match(n, .Range("A:A"), 0)
            If IsError(i) Then
                MsgBox "該当番号が見つかりません", vbCritical
                Unload Me
                Exit Sub
            End If
            Call MakeMail(.Range("B" & i).value, .Range("C" & i).value, .Range("D" & i).value)
        End With
    End If
    Unload Me
 End Sub

 Private Sub UserForm_Initialize()
    Dim i As Long
    With ActiveSheet
        For i = 2 To .Range("E" & .Rows.Count).End(xlUp).Row
            If .Range("E" & i).value = "未送信" Then
                Me.ComboBox1.AddItem .Range("A" & i).value
            End If
        Next i
    End With
 End Sub

 標準モジュールに、
 Sub FormOpen()
    UserForm1.Show
 End Sub

 Sub MakeMail(toAddress As String, Subject As String, mailBody As String)

    On Error GoTo ErrHandler

    Dim outlookObj
    Dim mailItemObj

    'メール作成に必要なOutlookオブジェクトを生成する
    Set outlookObj = CreateObject("Outlook.Application")
    Set mailItemObj = outlookObj.CreateItem(olMailItem)

    'メール情報の設定
    mailItemObj.To = toAddress
    mailItemObj.Subject = Subject
    mailItemObj.Body = mailBody

    '下書き保存(保存したければコメントを外す)
    'mailItemObj.Save

    'メール表示
    mailItemObj.Display

    'オブジェクトの解放
    Set mailItemObj = Nothing
    Set outlookObj = Nothing

    Exit Sub

 ' 例外処理
 ErrHandler:
    Set mailItemObj = Nothing
    Set outlookObj = Nothing

    MsgBox "メール作成時に例外エラー発生"

 End Sub

 とはりつけてFormOpenを実行。
(ろっくん) 2018/10/26(金) 13:49

ろっくんさん

ありがとうございます。
無事に思い描いていたとおりのものができました。
とても助かりました。
(たなか) 2018/10/26(金) 16:14


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.