【问题标题】:How to filter in VBA for ''ő'' character?如何在 VBA 中过滤 ''ő'' 字符?
【发布时间】:2017-02-06 10:36:27
【问题描述】:

我正在尝试在 excel 中构建一个适用于所有页面的过滤器,但是,由于我的语言,有一个字符 (ő) 无法输入到 VBA 编辑器中。

有什么想法吗?

我目前正在使用此代码:

使用工作表(q) ' 对于在循环过程中选择的每个工作表,我们应用具有特定标准的自动过滤器。我们希望过滤掉所有名字以 H 开头的人 .Range("A1").AutoFilter field:=1, Criteria1:=Array("Bazsalikom", "Koriander", "Barna Rizs", "Jázmin Rizs", "Fafülomba", "Csirke (elősütött"、“豆腐 (kockázott)”、“Fejeskáposzta (csíkozott)”、“Kínai kel (szeletelt)”、“Szójacsíra”、“Vöröshagyma (csíkozott)”、“Marha (elősütött)” , "Újhagyma (szeletelt)", "Sárgarépa (csíkozott)", "Karfiol (forrázott)", "Kápia Paprika", "Bambuszrügy (konzerv)", "Sertés (elősütött)", “Kacsa (elősütött)”、“Rák (mirelit)”、“Csiperke Gomba”、“Cukkini (szeletelt)”、“Kaliforniai Paprika”、“Brokkoli (forrázott)”、“Ananász (konzerv - ételhez) "), 运算符:=xlFilterValues 结束于 下一个 结束子

我突出显示了有问题的项目粗体。我在 Mac 上使用 Office 2016。

【问题讨论】:

  • @gserg - 这不是一个合适的副本。由于长列表中无效字符的发生率很高,这里的解决方案是使用从工作表加载的 Dictionary 对象。请重新打开,以便我做出回应。\
  • @Jeeped 我还没习惯它现在一投票就关闭的事实。
  • 谢谢(是的……我花了一段时间才习惯这样的问题 Boom!)
  • 抱歉,如何重新打开?我是stackoverflow的新手。 @吉普德

标签: excel vba macos


【解决方案1】:

您似乎有一个 Unicode 字符 33710(以 10 为底,而不是十六进制)。假设我们开始:

并应用自动过滤器:

Sub Macro99()
    Dim s As String

    s = ChrW(337)

    With Range("A1:A10")
        .AutoFilter
        .AutoFilter Field:=1, Criteria1:=s
    End With
End Sub

将产生:

您可以将其应用于任何或所有工作表。

【讨论】:

  • 假设windows区域设置设置为相应的代码页,也可以直接用Alt+0151键入。
  • 很好的答案...但是...对于那些可能不理解您的 10 下标以表明它是十进制的 unicode 值的人来说,IMO 有点令人困惑...仍然支持您(加上你早点打败我了!)
  • @RobinMackenzie 感谢您的评论...我调整了答案。
【解决方案2】:

虽然您可以为不会在 VBA 中“粘贴”的每个条目使用代码(例如 "l"&ChrW(337)&"sütött"),但为您的列表使用某种形式的存储库会更容易。工作表是一个不错的选择,如果您想避免将其显示给用户,可以稍后将其隐藏。

可选:创建一个动态命名范围,其中指的是:
     =hidden!$A$2:index(hidden!$A:$A, match("žžž", hidden!$A:$A))

从列表中构建一个变体数组,并将数组元素用作过滤器。

Option Explicit

Sub keyedFilter()
    Dim fltr As Range, a As Long, arr As Variant

    'load the array
    With Worksheets("Hidden")
        With .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp))
            arr = Application.Transpose(.Cells.Value2)
        End With
    End With

    'filter the data
    With Worksheets("Sheet2")
        If .AutoFilterMode Then .AutoFilterMode = False
        With .Cells(1, 1).CurrentRegion
            '.AutoFilter field:=1, Criteria1:=dDICT.keys, Operator:=xlFilterValues
            .AutoFilter field:=1, Criteria1:=arr, Operator:=xlFilterValues
            With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
                If CBool(Application.Subtotal(103, .Cells)) Then

                    'there are filtered values.
                    'sample image was taken here

                End If
            End With
        End With
        If .AutoFilterMode Then .AutoFilterMode = False
    End With
End Sub

Sub reallyHideHidden()
    With Worksheets("Hidden")
        .Visible = xlVeryHidden
    End With
End Sub

【讨论】:

  • 我刚刚看到您最近的编辑,其中包括您在 Mac 上运行它的事实。我不确定您是否可以在 Mac 上使用 Scripting.Dictionary,但您可以从工作表列表构建一个数组。
  • 是的,it won't work on Mac
  • 查看我上面从字典到数组的变化。
【解决方案3】:

我会在你的位置做的就是在 excel 中写下这个字符并从那里引用它。将其写入某种设置表中。

【讨论】:

    【解决方案4】:

    唯一的方法是将其发布到一个单元格中(比如 A1),然后参考该单元格值来过滤你的范围(比如 C1:F4)-ActiveSheet.Range("$C$1:$F$4").AutoFilter Field:=2, Criteria1:="=*" & Range("A1").Value & "*", Operator:=xlAnd

    【讨论】:

      【解决方案5】:

      您是否尝试过在 VBA 编辑器中更改字体。(工具/选项/编辑器格式) 切换到 Times New Roman 为您想要的语言,您应该可以输入字符。

      【讨论】:

      • VBA 代码模块保存在 ANSI 中。对于非 Unicode 程序,您只能输入当前 Windows 代码页支持的字符。另一方面,Excel 单元格支持 Unicode,您可以在其中放置任何字符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2023-02-02
      • 1970-01-01
      相关资源
      最近更新 更多