将单元格中的多个值链接到userform中的复选框

时间:2014-02-03 20:11:47

标签: excel vba find userform

我有以下搜索代码:

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。这就是为什么它不会捡到它?

1 个答案:

答案 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