将单元格中的多个值链接到userform vba中的checkbox

嗨,我有以下searh命令:

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:如果我在单元格中有一个单一的值,那么我很容易select一个单元格,将其链接到checkbox并勾选checkbox。 但问题是我在单元格中有多个值

第6列(f.offset(0,5).values)中的值的名称就像checkbox,例如。,checkboxes.name&“”so … PACT OTTAWA VANCOUVER MONTREAL TORONTO这是通过一个add命令完成的我有。

所以第6栏有时会显示PACT OTTAWA VANCOUVER,有时还会显示PACT TORONTO或TORONTO,这取决于点击哪个checkbox来添加用户窗体。

所以如果我能以某种方式读取并链接到checkbox的名称,并勾选在第6列的那些,那么这将工作,但我似乎无法弄清楚如何做到这一点…

 if f.offset(0,5).value = "PACT" then PACT.value = True 

如果我这样做,那么我将有太多的组合,我必须弄清楚使用if语句…有没有办法“读”第6列,匹配checkbox的名称和复选标记当我点击searchbutton时在用户表单中的checkbox?

编辑:

 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 

所以我已经添加了下面的代码,但没有任何反应? 我是新来的VBA,所以我不太明白上面的代码…我已经在MSDN上search它,但我不太了解str()= split(inputstr,“”),并为我= 0 Ubound(str)…我假设修剪function是如果在修整列6的值和案件是“PACT”后,那么PACT.value = True?

EDIT2:

似乎代码没有抓住PACT以外的词,我假设它拿起PACT是因为它是第一个。 我已经尝试手动input列6值,看看是否有任何名字被拿起,但它不…是否有办法解决这个问题?

也许是因为当我修剪第6列中的数据时,它被视为PACTPrinceRupertTETWPMTCUSOther? 这是为什么它不会拿起来?

就像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 
Interesting Posts