2016-12-28 40 views
1

我在Excel VBA初學者,想一些幫助,請。Excel的VBA - 驗證是否選中的複選框並連接相應的文本框的值

在客戶註冊用戶窗體我有一個「接觸」部分,該部分將被保留以接收最多5個聯繫人電子郵件,正在註冊客戶。在此窗體,我有以下對象:

  • 5文本框(txtEmail1txtEmail2txtEmail3,...)
  • 5個複選框(ckboxEmail1ckboxEmail2ckboxEmail3,...)
  • 1命令按鈕(bSendEmail

這些電子郵件將在文本框中鍵入,並且按鈕將被用來打開Outlook應用程序與已在「收件人」字段的電子郵件。複選框將用於定義哪些電子郵件將包含在「收件人」字段中。

這纔是我的疑問。我怎樣才能確認哪些複選框被選中,從文本框中只使用(連接)他們的電子郵件?

實踐實施例1:

TxtEmail1.value = [email protected] 
TxtEmail2.value = [email protected] 
TxtEmail3.value = empty 
TxtEMail4.value = [email protected] 
TxtEMail5.value = empty 

CkboxEmail1.value = true 
CkboxEmail2.value = true 
CkboxEmail3.value = false 
CkboxEmail4.value = true 
CkboxEmail5.value = false 

當我按下按鈕,下面的陣列必須被傳遞給 「爲」 屬性:

.To = "[email protected];[email protected];[email protected]" 

實施例2:

TxtEmail1.value = [email protected] 
TxtEmail2.value = [email protected] 
TxtEmail3.value = empty 
TxtEMail4.value = [email protected] 
TxtEMail5.value = empty 

CkboxEmail1.value = false 
CkboxEmail2.value = false 
CkboxEmail3.value = false 
CkboxEmail4.value = true 
CkboxEmail5.value = false 

當我按下按鈕,只有4電子郵件將被傳遞到了「爲了」屬性,因爲只有它s複選框是真實的:

.To = "[email protected]" 

Bellow是我用來在bSendEmail Click事件中打開Outlook應用程序的代碼。

Private Sub bSendEmail_Click() 

Dim outlookApp  As Object 
Dim outlookMail  As Object 

On Error GoTo error_outlook 
Set outlookApp = CreateObject("Outlook.Application") 
Set outlookMail = outlookApp.CreateItem(0) 
On Error GoTo 0 

On Error Resume Next 
With outlookMail 
    .To = "" 
    .CC = "" 
    .BCC = "" 
    .Subject = "" 
    .Body = "" 
    .Importance = 2 
    .Display 
End With 
On Error GoTo 0 

Set outlookMail = Nothing 
Set outlookApp = Nothing 

Exit Sub 

error_outlook: 

    MsgBox("some message here...", vbOKOnly + vbExclamation, "ERROR - Outlook") 
    Exit Sub 

End Sub 

在此先感謝和抱歉,不好的英語,不是我的母語。

回答

1

變化

.To = "" 

Dim TempTo As String 
TempTo = "" 
If CkboxEmail1 Then TempTo = TempTo & TxtEmail1.value & ";" 
If CkboxEmail2 Then TempTo = TempTo & TxtEmail2.value & ";" 
If CkboxEmail3 Then TempTo = TempTo & TxtEmail3.value & ";" 
If CkboxEmail4 Then TempTo = TempTo & TxtEmail4.value & ";" 
If CkboxEmail5 Then TempTo = TempTo & TxtEmail5.value & ";" 

,可能添加的代碼,一個額外的位之後,以防止在沒有CkBox檢查問題:

If Len(TempTo) = 0 Then 
    MsgBox "No email addresses selected" 
    Exit Sub 
End If 

最後:

.To = TempTo 
+0

感謝您的快速回復!關於複選框的代碼工作完美(非常感謝),但我不知道爲什麼Excel忽略分號。 Outlook的「收件人」字段中的結果如下所示: 'email1 @ example.comemail2 @ example.comemail4 @ example.com' 電子郵件不會以分號分隔。 –

+0

@IgorSousa Ahh - 也許'outlookMail'對象會自動修剪任何結尾的';'。我將編輯代碼以使用臨時變量。 – YowE3K

+0

你太棒了!它的工作,非常感謝你! –