我有一个我正在编写的剧本,除了几年前的大学课程外,我对VBA脚本的了解很少......
我有这个脚本 -
Private Sub cmdContact_Click()
Set DataSH = Sheet1
DataSH.Range("O8") = Me.cboSelect.Value
DataSH.Range("O9") = Me.txtSearch.Text
'DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*"
DataSH.Range("B8").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
"phonelist!Criteria"), CopyToRange:=Range("phonelist!Extract"),
Unique:= _
False
ListBox1.RowSource =
Sheet1.Range("outdata").Address(external:=True)
End Sub
我关注的部分是这个
DataSH.Range("O8") = Me.cboSelect.Value
DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*"
'DataSH.Range("O9") = Me.txtSearch.Text
由于通配符只能用于文本,因此我留下3 cbo。选择不会搜索的值,因为它们是数字。
如何将IFTTT语句应用于cboSelect的值?
DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*"
需要通配符的值为: - 名称 - 部门 - 标题 - UNIT - SHIFT - 主管
DataSH.Range("O9") = Me.txtSearch.Text
通配符不兼容的值为: - 延期 - 建造# - 房间#
感谢任何帮助。
答案 0 :(得分:1)
我回答了我自己的问题!我在几个小时的过程中通过反复试验弄明白了。 : - )
If DataSH.Range("O8").Value = "NAME" Or DataSH.Range("O8").Value = "DEPARTMENT" Or DataSH.Range("O8").Value = "TITLE" Or DataSH.Range("O8").Value = "UNIT" Or DataSH.Range("O8").Value = "SHIFT" Or DataSH.Range("O8").Value = "SUPERVISOR" Then DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*" Else DataSH.Range("O9") = Me.txtSearch.Text
效果很好,但如果有人想帮我清理它,我会很感激。似乎我不能让它工作,除非它全部在一条线上?
编辑:
想出如何使用相同的if语句跨越多行 -
If DataSH.Range("O8").Value = "NAME" Or _
DataSH.Range("O8").Value = "DEPARTMENT" Or _
DataSH.Range("O8").Value = "TITLE" Or _
DataSH.Range("O8").Value = "UNIT" Or _
DataSH.Range("O8").Value = "SHIFT" Or _
DataSH.Range("O8").Value = "SUPERVISOR" Then
DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*"
Else
DataSH.Range("O9") = Me.txtSearch.Text
End If
编辑:
另一个论坛上的某个人实际上提出了一个更好的方式来做我想要的一切。在此发布以供参考:
Dim Ary As Variant
Ary = Array("NAME", "DEPARTMENT", "TITLE", "UNIT", "SHIFT", "SUPERVISOR")
If UBound(Filter(Ary, DataSH.Range("O8").Value, True, vbTextCompare)) >= 0 Then
DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*"
Else
DataSH.Range("O9") = Me.txtSearch.Text
End If