我正在尝试找到一种解决方案,该解决方案是如何从大约15个不同的选项中连接字符串的。每个结果都来自一个复选框,该复选框根据一个人在特定区域内的居住状态来选择。
我知道如何将复选框选项转换为文本结果。我要寻找的是如何获取这些文本结果,将它们组合起来,然后忽略空结果,以便没有任何奇怪的空格或格式。
简而言之,如果有人在15个结果中选择3个,它将干净地合并这3个结果,而忽略其余的结果。例如:FL,CA,NY
答案 0 :(得分:2)
当然,有多种方法可以实现,并且由于您未提供任何代码或尝试执行此操作的示例,因此我将提供两个选择。
1 -您可以使用&
和+
运算符的组合来连接值。
例如,假设您有15个复选框,它们的名称都类似chkState01,chkState02 ...到chkState15。为了简化我的示例代码,我们假设当直接在代码中将复选框控件引用为chkState01
时,如果选中了复选框,它将返回其表示的州(即NY)的2个字母的字符串缩写。 ,否则如果未选中此复选框,它将返回Null
。这样,您可以通过两种方式获得结果:
选项A
StateList = (chkState01 + ",") & (chkState02 + ",") & (chkState03 + ",") ....
如果这3个复选框返回以下值
chkState01 = "NY"
chkState02 = Null
chkState03 = "FL"
然后,该级联代码的结果将是:
NY,FL,
请注意,该字符串以一个额外的逗号(,)结尾,并且由于您无法提前知道将选中多少个复选框,因此始终会出现此逗号。然后,您需要先从列表中删除该逗号,然后才能使用它。
选项B
'Create the list with a trailing comma that will need removed
Dim x as Integer
For x = 1 to 15
StateList = StateList & (Me("chkState" & Format(x, "00")) + ",")
Next x
或者,您可以这样做:
'Create the list without a trailing comma
Dim x as Integer
For x = 1 to 15
If Not IsNull(Me("chkState" & Format(x, "00"))) Then
If Len(StateList) > 0 Then
StateList = StateList & "," & Me("chkState" & Format(x, "00"))
Else
StateList = Me("chkState" & Format(x, "00"))
End If
End If
Next x
请注意,您可以通过将控件的名称“生成”为字符串并以Me("yourcontrolname")
格式对其进行引用来引用表单上的控件。这是命名类似控件的一个优点,该控件以一种类似这样的循环结构的方式命名。 Format
命令将x
返回的数字格式化为2位数字,并带有前导零i.e. 1 becomes 01
此外,使用&
连接两个项目(其中至少一个是字符串)将始终导致输出字符串(Null&“ S” =“ S”)。但是,使用+
连接两个项(其中至少一个为Null)将始终导致Null输出(Null +“ S” = Null)。因此,值返回Null的复选框不会导致结果中包含其他逗号。
2 -您可以编写更复杂的代码来动态遍历复选框并构建输出列表。
更有可能,您将需要使用其他代码来确定哪个复选框是哪个状态的缩写,并返回正确的字符串值。也许您将状态缩写作为复选框名称i.e. chkState_NY, chkState_FL
的一部分,或者已经将缩写放在每个复选框的Tag
属性中。
假设您使用了特殊的控件命名chkState_NY, chkState_FL
。您可以执行以下操作:
Dim ctl as Access.Control
For Each ctl in Me.Controls
If ctl.Name Like "chkState_??" Then
If ctl.Value = True Then
If Len(StateList) > 0 Then
StateList = StateList & "," & Right(ctl.Name,2)
Else
StateList = Right(ctl.Name,2)
End If
End If
End If
Next ctl