首先,请允许我在一个精湛的论坛上祝贺你们!这对我有帮助!到目前为止,让我的小程序工作......现在我终于陷入了困境。
我正在尝试自动化Outlook,以通过UserForm向客户发送定制的优惠。
我们提供5种类型的解决方案,我不知道客户是否需要1(DCF)或2(Top-Slice)或3(Ertragswert)或4(Belwert)或5(Sachwert)。所以我需要一种方法让代码检查勾选了多少个Checkbox,然后将它们排成一个字符串(我将它命名为ValTyp)并用逗号分隔它们并在最后一个之前插入一个“和”。假设客户想要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 :(得分: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
优于对象{{ 1}}。
答案 1 :(得分: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之后添加Preserve以确保这些值不会丢失。