Excel VBA IFTTT - Расширенный диапазон значений фильтра - PullRequest
0 голосов
/ 15 мая 2018

У меня есть скрипт, над которым я работаю, у меня очень мало реальных знаний о VBA 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

Часть, на которой я сосредотачиваюсь, это

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

Поскольку подстановочные знаки можно использовать только для текста, у меня осталось 3 cbo.Select, которые не будут искать, потому что они числа.

Как я могу применить оператор IFTTT к значениям cboSelect?

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

Значения, которые необходимы подстановочные знаки: - ИМЯ - ОТДЕЛ - НАЗВАНИЕ - ЕДИНИЦА - SHIFT - SUPERVISOR

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

Значения, с которыми подстановочные знаки НЕ совместимы: - РАСШИРЕНИЕ - ЗДАНИЕ # - КОМНАТА #

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 15 мая 2018

Я отвечаю на свой вопрос!Я понял это методом проб и ошибок в течение нескольких часов.: -)

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

...