自动筛选器不显示现有数据

时间:2018-06-29 20:22:24

标签: excel vba excel-vba excel-2010

我正在使用VBA自动过滤大型列表。 (仅少于5,000行)。具体来说,我正在费用记录中搜索供应商。当我运行此代码时,它发现许多供应商很好,但其他供应商却没有。

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

我正在调用我建立的另一个用于规范供应商名称的功能。有几个没有用(有几个没有用),但我目前正在努力解决的是亚马逊。我们有来自亚马逊的几笔交易,但没有显示。

到目前为止我已经检查过的东西:

  • 在自动过滤器中键入供应商的名称。这样会产生结果,因此不是从过滤器中排除行的情况。
  • 检查哪些列被自动过滤。仅供应商列,因此代码未将过滤器应用于错误的列。 (也是因为它适用于其他供应商)

  • 我怀疑问题可能出在我的规范化函数的输出上,所以我插入了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.com
  • AMAZON MKTPLACE PMTS

1 个答案:

答案 0 :(得分:1)

感谢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

谢谢大家的帮助!