【发布时间】: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”,我已经仔细检查了复选框的名称,但它没有选择......?