2017-03-28 17 views
2

現在、相対トグルボタンの真偽値に基づいて特定のセル値をメールで送信するVBAシートを作成しています。かなり大量のトグルボタンを使って作業していて、対応するトグルボタンの値でセル値の文字列を返す関数を追加する方法を検討していました。しかし、私の現在の文字列の戻り値は空白です。関数から変数文字列を返す方法とサブ文字列を参照する

は、私は現在、コマンドボタンを経由して呼び出された次の電子メールサブを持っている:

Public Sub Send_Email_Using_VBA() 
Dim Email_Subject, Email_Send_From, Email_Send_To, _ 
Email_Cc, Email_Bcc, Email_Body, First_Name, Second_Name, Third_Name As String 
Dim example As Range 
Dim callOutString As String 
Dim Mail_Object, Mail_Single As Variant 

Email_Subject = "Check Sheet Completed" 
Email_Send_From = "[email protected]" 
Email_Send_To = "[email protected]" 
Email_Cc = "" 
Email_Bcc = "" 
Email_Body = "" 
On Error GoTo debugs 
Set Mail_Object = CreateObject("Outlook.Application") 
Set Mail_Single = Mail_Object.CreateItem(0) 
With Mail_Single 
.Subject = Email_Subject 
.To = Email_Send_To 
.CC = Email_Cc 
.BCC = Email_Bcc 
.Body = Email_Body & bodyString 'trying to call/add resulting string from the below sub 
.Send 
End With 
debugs: 
If Err.Description <> "" Then MsgBox Err.Description 
End Sub 

そして私は/呼び出し、次のサブから「bodyString」の文字列値を返そうとしています:

'Checks sheet for true toggle boxes which need immediate attention or notice and adds those descriptors to the email body. 
Private Sub CommandButton5_Click() 

Dim bodyString As String 
Dim x As Integer 
x = 1 

'togglebutton2 check to see if active 
If ToggleButton2 = True Then 
    If x = 1 Then 
     bodyString = "This item: " & Range("A14").Value & " is Bad" 
    End If 
    x = x + 1 
End If 

If x = 1 Then 
    MsgBox "No items need attention" 
    bodyString = "No items need attention" 
Else 
    MsgBox x - 1 & " Items Need Attention:" & vbCrLf & vbCrLf & bodyString 
    bodyString = x - 1 & " Items Need Attention:" & vbCrLf & vbCrLf & bodyString 
End If 

End Sub 

上記の最終的なIf/Elseステートメントでは、MsgBox関数を使用してbodyStringを表示し、正しいデータが格納されていることを確認しています。

たとえば、MsgBoxには以下の項目が表示されます。注意が必要な項目はありません。ただし、bodyString変数は空白を返します。

+0

通常、文字列を返すFunction(つまり、Function DoThis(strInput as String)as strBodyString)がありますが、システムイベント(Clickイベント)を変更して値を返すことはできません。私はあなたが 'Send_Email_Using_VBA'と呼ぶ場所を見ておらず、どこに値を渡しているのか分かりませんが、それは大丈夫です。フォームレベルで変数を宣言することができます。したがって、そのフォームのどこでも使用できます。 –

+0

フィードバックをいただき、ありがとうございます。私は、関数とその機能について詳しく調べる必要があります。 –

答えて

2

変数bodyStringは、イベントハンドラ `Sub CommandButton5_Click()内で定義され、その値をこのサブルーチンから返すことはできません。

この問題に対処するには、bodyStringの宣言をSub CommandButton5_Click()ルーチンから移動し、モジュールレベル(すべての関数とサブルーチンの外)で宣言されるように配置します。それでSub Send_Email_Using_VBA()はその変数にアクセスすることができ、その内容は維持されます。

+0

ありがとう!これは完全に機能しました。私は、 "Public bodyString As String"をモジュールに追加し、変数値に渡しました。 –

+0

これがあなたの質問に対する正しい、最良の回答であれば、それを答えとして受け入れてください - http://stackoverflow.com/help/someone-answersを参照してください。 – STLDeveloper

関連する問題