2015-02-06 91 views
0

首先讓我所有人在一個精彩的論壇上恭喜你!它幫助我加載!到目前爲止,讓我的小程序工作......現在我終於被卡住了。字符串數量未知的VBA字符串數組

我正在嘗試自動化Outlook通過UserForm向客戶端發送定製的優惠。

我們提供5種類型的解決方案,我不知道客戶是需要1(DCF)還是2(頂部)或3(Ertragswert)或4(Belwert)或5(Sachwert) 。因此,我需要一種方法讓代碼檢查勾選了多少個複選框,然後將它們排序爲一個字符串(我已將其命名爲ValTyp),並用逗號分隔它們,並在最後加上「and」。說客戶需要1,3和5.解決方案將是DCF,Ertragswert和Sachwert。到目前爲止,我有我的複選框全部檢查值如下:

Public iSach As String 
Private Sub CKSach_Click() 

    Dim Sach As Boolean 

    Sach = CKSach.Value 

    If Sach = True Then 
     iSach = "Sachwert " 
     ValCount = ValCount + 1 
    Else 
     iSach = "" 
     ValCount = ValCount - 1 
    End If 

End Sub 

我試圖在建立一個IF語句,其中有3個選項,一個類似的部分是必須的:

If (iRics <> "" And iBelSTD <> "" And iImmo <> "") Then 
    Standard = (iRics & ", " & iBelSTD & "und " & iImmo) 
ElseIf (iBelSTD <> "" Or iImmo <> "") Then 
    Standard = (iRics & "und " & iImmo & iBelSTD) 
Else 
    Stadard = iRics 
End If 

我我創建一個數組,VALCOUNT長度的思考...但我似乎完全無法弄不明白的工作:

Dim Services() As String 
ReDim Services(0 To 4) As String 

If iDCF <> "" Then 
    Services(0) = iDCF 
End If 
If iDCF <> "" Then 
    Services(1) = iCore 
End If 
If iDCF <> "" Then 
    Services(2) = iErtrag 
End If 
If iDCF <> "" Then 
    Services(3) = iSach 
End If 
If iDCF <> "" Then 
    Services(4) = iBelVT 
End If 

Debug.Print Services(0, 1, 2, 3, 4) 

我得到一個運行時錯誤9指標外邊界。 我不知道該怎麼做,我甚至都不知道如何包含逗號和「和」。

任何幫助都將非常感謝! 在此先感謝! 崖

回答

0

我想接近它是這樣的:首先,您存儲複選框一個集合中:

Dim cbs As New Collection 
cbs.Add checkbox1 
cbs.Add checkbox2 
'... 
cbs.Add checkbox5 

因此,你循環裏面檢查到的值添加到一個新的集合:

Dim myStr As String: myStr = "" 
Dim cbsCheck As New Collection 
'count "true" 
For j = 1 To cbs.Count 
    If cbs(j).Value = True Then 
     cbsCheck.Add cbs(j) 
    End If 
Next j 
'hence you compose the string 
If cbsCheck.Count = 0 Then 
    myStr = "No element selected" 
ElseIf cbsCheck.Count = 1 Then 
    myStr = "You selected " & cbsCheck(1).Caption 
Else 
    k = 1 
    myStr = "You selected " 
    While k < cbsCheck.Count 
     myStr = myStr & cbsCheck(k).Caption & ", " 
     k = k + 1 
    Loop 
    myStr = myStr & "and " & cbsCheck(k+1).Caption 
End If 

注意當你想編寫一個你不知道大小的元素數組時,在95%的情況下,對象Collection比對象好String Array

+0

它工作得非常好!也使我的一半代碼冗餘......我認爲這對學習曲線總是有好處的! 我改變了一點,以便倒數第二次檢查沒有通過在循環中插入If語句來添加彗差: 雖然k 2015-02-09 08:18:47

0

您可以使用集合而不是數組,這是大多數情況下更好的解決方案。如果你真的需要一個數組出於某種原因,你可以使用redim功能來調整數組大小:

例子:

Dim myArray(3) As String 

    myArray(1) = "a" 
    myArray(2) = "b" 
    myArray(3) = "c" 
    ReDim myArray(4) As String 
    myArray(4) = "d" 

您還可以添加一個保護區後使用ReDim以確保值不會走開。