我有以下搜索代码:
Private Sub Search_Click()
Dim Name As String
Dim f As Range
Dim r As Long
Dim ws As Worksheet
Dim s As Integer
Dim FirstAddress As String
Name = surname.Value
With ws
Set f = Range("A:A").Find(what:=Name, LookIn:=xlValues)
If Not f Is Nothing Then
With Me
firstname.Value = f.Offset(0, 1).Value
tod.Value = f.Offset(0, 2).Value
program.Value = f.Offset(0, 3).Value
email.Value = f.Offset(0, 4).Text
officenumber.Value = f.Offset(0, 6).Text
cellnumber.Value = f.Offset(0, 7).Text
if f.offset(0,5).value = "PACT" then PACT.value = True
我想修改if f.offset(0,5).value
:如果我在单元格中有一个单值,那么很容易选择一个单元格,将其链接到复选框并勾选复选框。问题是我在单元格中有多个值。
第6列(f.offset(0,5).values)中的值的名称为复选框,例如,checkboxes.name& “”所以... PACT OTTAWA VANCOUVER MONTREAL TORONTO
这是通过添加命令完成的。
因此,第6列可以显示PACT OTTAWA VANCOUVER或PACT TORONTO或TORONTO,具体取决于点击哪些复选框添加到用户表单中。
如果我可以阅读并链接到复选框的名称并勾选第6列中的名称,那么这将有效。
if f.offset(0,5).value = "PACT" then PACT.value = True
如果我这样做,那么我将有太多的组合,我必须使用if语句弄明白。有没有办法“读取”第6列,将其与复选框的名称相匹配,并在单击搜索按钮时选中用户窗体中的复选框?
编辑:
Private Sub Search_Click()
Dim Name As String
Dim f As Range
Dim r As Long
Dim ws As Worksheet
Dim s As Integer
Dim FirstAddress As String
Dim str() As String
Name = surname.Value
With ws
Set f = Range("A:A").Find(what:=Name, LookIn:=xlValues)
If Not f Is Nothing Then
With Me
firstname.Value = f.Offset(0, 1).Value
tod.Value = f.Offset(0, 2).Value
program.Value = f.Offset(0, 3).Value
email.Value = f.Offset(0, 4).Text
officenumber.Value = f.Offset(0, 6).Text
cellnumber.Value = f.Offset(0, 7).Text
str() = Split(inputstr, " ")
For i = 0 To UBound(str)
Select Case UCase(Trim(str(i)))
Case "PACT": PACT.Value = True
Case "PrinceRupert": PrinceRupert.Value = True
Case "Montreal": Montreal.Value = True
Case "TET": TET.Value = True
Case "WPM": WPM.Value = True
Case "TC": TC.Value = True
Case "US": US.Value = True
Case "Other": Other.Value = True
End Select
Next i
我添加了以下代码,但没有任何反应。
我在msdn上搜索过但我不太了解str()= split(inputstr,“”)和I = 0 Ubound(str)。我假设修剪函数是在修剪第6列的值并且大小写是“PACT”然后PACT.value = True?
EDIT2:
似乎代码没有捕捉到PACT之外的其他词语,我假设它选择了PACT,因为它是第一个。我已经尝试手动输入第6列值并查看是否有任何名称被拾取但是没有。有没有办法来解决这个问题?
也许是因为当我修改第6列中的数据时,它被视为PACTPrinceRupertTETWPMTCUSOther。这就是为什么它不会捡到它?
答案 0 :(得分:3)
正如Siddharth所说,使用split()并循环生成数组...
Dim str() As String
str() = Split(inputstr, " ")
For i = 0 To UBound(str)
Select Case ucase(trim(str(i)))
Case "PACT": pact.Value = True
case ....:
End Select
Next i