2016-12-07 6 views
-1

100行以上のデータを持つExcelワークシートがあります。ユーザーがその行の情報を入力すると、その行の最後に、その行の情報を含む特定の電子メールアカウントに電子メールを自動的に送信するコマンドボタンがあります。ExcelでコマンドボタンとVBAコードを区切る

私は電子メールを送信するためのVBコードでいくつかのコマンドボタンを挿入し、それは素晴らしい動作します!私が抱えている問題は、コマンドボタンを分けることができないということです。つまり、各ボタンのコードは、そのボタンの行に固有でなければなりません。そのコマンドボタンの情報を含むセルの場所でコードを変更すると、すべてのコマンドボタンがその情報に変更されます。

私は答えが本当にシンプルでなければならないことを知っていますが、完全な空白を描きました。何か助けていただければ幸いです!ここ

は私が持っているコードである。

Option Explicit 

Private Sub CommandButton2_Click() 

On Error GoTo ErrHandler 

    ' SET Outlook APPLICATION OBJECT. 
    Dim objOutlook As Object 
    Set objOutlook = CreateObject("Outlook.Application") 

    ' CREATE EMAIL OBJECT. 
    Dim objEmail As Object 
    Set objEmail = objOutlook.CreateItem(olMailItem) 

    With objEmail 
     .to = "[email address].com" 
     .Subject = Range("A3") 
     .Body = "[Message]" 
     .Send  ' SEND THE MESSAGE. 
    End With 

    ' CLEAR. 
    Set objEmail = Nothing: Set objOutlook = Nothing 

ErrHandler: 
    ' 
End Sub 

各行のみ変更コマンドボタン番号と.Subject =レンジエントリ変えて同じコマンドを有するべきです。

私は何か間違っていますが、それは動作しないためです。

+5

を追加したい場合は、コマンドボタンのいずれかのいくつかのサンプルコードを投稿することができ[C4:C8]をしてください更新することができますか? – finjo

+0

http://stackoverflow.com/questions/6242605/excel-vba-getting-row-of-clicked-buttonを参照してください。 –

+0

コマンドボタンとポストコードでシートのスクリーンショットを投稿します。 – harun24hr

答えて

1

私はコメントの中で、セルをボタンのように見せて、ユーザーがセルをクリックして電子メールを送信させるのはおそらく簡単だと言いました - そして、特定の行のオフセットを使用するだけですが、コマンドボタンを使うと非常に簡単です。

現在のコードをとり、範囲パラメータを受け入れる新しいサブルーチンに置きます。

ボタンを追加し、それぞれのコードを異なる範囲でリンクします。

Option Explicit 

Private Sub CommandButton3_Click() 
SendEmail Range("A3") 
End Sub 

Private Sub CommandButton4_Click() 
SendEmail Range("A4") 
End Sub  

Private Sub CommandButton5_Click() 
SendEmail Range("A5") 
End Sub 

`... 

Sub SendEmail(TheRange as Range) 
    On Error GoTo ErrHandler 
    ' SET Outlook APPLICATION OBJECT. 
    Dim objOutlook As Object 
    Set objOutlook = CreateObject("Outlook.Application") 
    ' CREATE EMAIL OBJECT. 
    Dim objEmail As Object 
    Set objEmail = objOutlook.CreateItem(olMailItem) 
    With objEmail 
     .to = "[email address].com" 
     .Subject = TheRange 'Change this line 
     .Body = "[Message]" 
     .Send  ' SEND THE MESSAGE. 
    End With 
    ' CLEAR. 
    Set objEmail = Nothing: Set objOutlook = Nothing 
ErrHandler: 
End Sub 

あなたがSelectionChangedイベントを使用する代わりに、希望する場合、あなたはこのようにそれを行うことができます。

その後、あなたはちょうどあなたが任意のより多くの「ボタン」

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.CountLarge > 1 Then Exit Sub 
If Not Intersect(Target, [C4:C8]) Is Nothing Then 
    SendEmail Range("A" & Target.Row) 
    'Optionally select the subject we sent so we can re-click 
    'You can choose any other cell not in our event range 
    Range("A" & Target.Row).Select 
End If 
End Sub 

Email Sending

関連する問題