Автофильтр не отображает существующие данные - PullRequest
0 голосов
/ 29 июня 2018

Я использую VBA для автофильтрации большого списка. (Чуть менее 5000 строк). В частности, я ищу поставщика в журнале расходов. Когда я запускаю этот код, он находит, что многие поставщики в порядке, но не другие.

Private Function testMcTesterson()
Dim icell As Range
Dim tempStr As String
Dim i As Integer
Dim w As Workbook
Dim expLog As Workbook
Dim vendorName As String

Set expLog = Workbooks("FY18 Manual Expense Log.xlsm")
Set w = ActiveWorkbook

For Each icell In Selection
    vendorName = VendorNormalizer(icell.Value)

    expLog.Activate

    'Filter by vendor
    Debug.Print "Vendor name is " & "'" & vendorName & "'"
    ActiveSheet.Range("A1").AutoFilter field:=5, Criteria1:=vendorName

    w.Activate
Next icell

End Function

Я вызываю другую функцию, созданную мной, чтобы нормализовать имена поставщиков. Некоторые из них не работают (и некоторые из них), но сейчас я борюсь с Amazon. У нас есть несколько транзакций из Amazon, но ни одна не показывается.

Вещи, которые я проверил до сих пор:

  • Введите имя поставщика в автофильтр. Это приводит к результатам, поэтому это не тот случай, когда строки исключаются из фильтра.
  • Проверьте, какие столбцы автофильтрованы. Только столбец поставщика, поэтому код не применяет фильтр к неправильному столбцу. (Также, потому что это работает для других поставщиков)

  • Я подозревал, что проблема может быть связана с выводом моей нормализующей функции, поэтому я вставил свой оператор debug.print. Непосредственно перед запуском фильтра консоль выдает «Имя поставщика -« Amazon »». До или после пробелов нет. Я скопировал это прямо из моего непосредственного окна, на случай, если я просто что-то написал неправильно.

  • Я даже проверил typename (vendorName), и он возвращает строку.

Я уверен, что решение прямо перед моим лицом, я просто не вижу его.

Помощь!

Редактировать: вот соответствующий код для VendorNormalizer

Private Function VendorNormalizer(vendorName As String)

Select Case True
    'Lots of other cases

    Case InStr(1, vendorName, "Amazon", vbTextCompare) > 0
        VendorNormalizer = "Amazon"

    'Lots of other cases
End select

'If statements for exact matches

End function

В таблице, которую я ищу, есть все эти (и нет других записей Amazon) в столбце, который я фильтрую. (скопировано и вставлено)

  • AMAZON.COM
  • Amazon marketplace
  • Amazon.com
  • AMAZON MKTPLACE PMTS

1 Ответ

0 голосов
/ 30 июня 2018

Спасибо TotsieMae за предложение о прорыве. Оказывается, подстановочные знаки являются ответом.

Очевидно, что команда VBA range.autofilter требует, чтобы критерии были точными, а ввод в автофильтр - нет. Решение так же просто, как включение подстановочных знаков в текстовый вывод нормализатора.

Кому:

Select Case True
    'Lots of other cases

    Case InStr(1, vendorName, "Amazon", vbTextCompare) > 0
        VendorNormalizer = "*Amazon*"

    'Lots of other cases
End select

Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...