简体   繁体   English

Excel VBA IFTTT-高级过滤器范围值

[英]Excel VBA IFTTT - Advanced Filter Range Value

I have a script I'm working on, I have very little actual knowledge of VBA Script except for a college class years ago... 我有一个正在使用的脚本,除了几年前的一堂大学课程外,我对VBA Script的了解很少。

I have this script - 我有这个脚本-

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

The part I'm focusing on is this 我关注的部分是

        DataSH.Range("O8") = Me.cboSelect.Value
        DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*"
        'DataSH.Range("O9") = Me.txtSearch.Text

Since the wildcards only only usable for text, I am left with 3 cbo.Select values that will not search because they're numbers. 由于通配符仅适用于文本,因此我剩下3个cbo.Select值将无法搜索,因为它们是数字。

How can I apply an IFTTT statement to the values of cboSelect? 如何将IFTTT语句应用于cboSelect的值?

DataSH.Range("O9") = "*" & Me.txtSearch.Text & "*"

The Values that the wildcards are needed are: - NAME - DEPARTMENT - TITLE - UNIT - SHIFT - SUPERVISOR 需要使用通配符的值包括:-名称-部门-标题-单位-转换-主管

DataSH.Range("O9") = Me.txtSearch.Text

The values that the wildcards are NOT compatible with are: - EXTENSION - BUILDING# - ROOM# 通配符不兼容的值包括:-扩展-建筑#-房间#

Any help is appreciated. 任何帮助表示赞赏。

I'm answering my own question! 我在回答我自己的问题! I figured it out with trial and error over the course of a few hours. 经过数小时的尝试,我反复尝试了一下。 :-) :-)

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

Works great but if anyone wants to help me clean it up I'd appreciate it. 效果很好,但是如果有人想帮助我清理它,我将不胜感激。 It seems I can't get it to work unless it's all on one line? 除非全部放在一行上,否则我似乎无法正常工作?

EDIT: 编辑:

Figured out how to span across multiple lines with the same if statement - 弄清楚如何使用相同的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

EDIT: 编辑:

Someone on another forum actually presented a better way of doing what I wanted all together. 另一个论坛上的某个人实际上提出了一种更好的方式来共同完成我想要的事情。 Posting here for reference: 在这里发布以供参考:

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

​​​​

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM