Excel VBA IFTTT - 高级过滤范围值

时间:2018-05-14 21:56:06

标签: excel vba ifttt

我有一个我正在编写的剧本,除了几年前的大学课程外,我对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

通配符不兼容的值为:     - 延期     - 建造#      - 房间#

感谢任何帮助。

1 个答案:

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