【问题标题】:Linking multiple values in a cell to checkboxes in userform将单元格中的多个值链接到用户表单中的复选框
【发布时间】:2018-12-14 09:24:55
【问题描述】:

我有以下搜索代码:

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, " ") 和 for I = 0 Ubound (str)。我假设修剪功能是在修剪第 6 列的值并且大小写为“PACT”之后,那么 PACT.value = True?

EDIT2:

似乎代码没有捕捉到 PACT 以外的单词,我假设它选择了 PACT,因为它是第一个。我尝试手动输入第 6 列的值,看看是否有任何名称被拾取,但没有。有没有办法来解决这个问题?

也许是因为当我修剪第 6 列中的数据时,它被视为 PACTPrinceRupertTETWPMTCUSOther。这就是它不捡起来的原因吗?

【问题讨论】:

  • 从单元格中读取值并使用空格作为分隔符将其拆分。你会得到一个数组。现在只需遍历数组以获取各个名称。
  • inputstr(我使用的)需要是 f.offset(0,5).value(你使用的)
  • 它可以工作,但由于某种原因它只选择“PACT”,我已经仔细检查了复选框的名称,但它没有选择......?

标签: excel vba find userform


【解决方案1】:

正如 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

【讨论】:

  • + 1 为了安全起见,将Select Case str(i) 更改为Select Case Ucase(Trim(str(i))) 并将Case "pact" 更改为Case "PACT"
  • 对,没有悉达多。好电话!
  • @Bigtree 所以我完成了 F8 并运行了上面的代码,但它只选择了 PACT 并跳过了其余的情况。是因为修剪使它成为 PACTPrinceRupertMontrealWPMTETTCUSOther?也许这就是它无法启动的原因?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多