2016-09-28 7 views
3

Я пытаюсь создать фильтр в excel, который применяется ко всем страницам, однако из-за моего языка есть символ (ő), который я не могу войти в редактор VBA.Как фильтровать в VBA символ '' ő ''?

Любые идеи?

В настоящее время я использую этот код:

С Таблицами (д) 'С каждым листом, выбранным в процессе циклов, в Применят Автофильтр с определенными критериями. Мы хотим отфильтровать всех лиц, чье имя начинается с H .Range («A1»). Поле AutoFilter: = 1, Criteria1: = Array («Bazsalikom», «Koriander», «Barna Rizs», «Jázmin Rizs», "Fafülgomba", "Csirke (elősütött" "Тофу (kockázott)", "Fejeskáposzta (csíkozott)", "Kínai Кель (szeletelt)", "Szójacsíra", "Vöröshagyma (csíkozott)", «Марха (elősütött) " "Újhagyma (szeletelt)", "Sárgarépa (csíkozott)", "Karfiol (forrázott)", "Kapia паприка", "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) »), Operator: = xlFilterValues E й С Далее д End Sub

Я выделил проблематичные элементы полужирного. Я использую Office 2016 на Mac.

+0

@gserg - Это не является подходящим дубликатом. Из-за большого числа недопустимых символов в длинном списке решение здесь заключается в использовании объекта Dictionary, загруженного с рабочего листа. Пожалуйста, откройте снова, чтобы я мог ответить. \ – Jeeped

+0

@ Jeeped Я еще не привык к тому, что он закрывается, как только я проголосую. – GSerg

+0

Возможный дубликат [Как вводить символы валюты в редакторе Visual Basic] (http://stackoverflow.com/q/24384952/11683) – GSerg

ответ

2

что бы я сделал на вашем месте, было бы написать персонажа в excel и отсылать его оттуда. Напишите его в какой-либо таблице настроек.

-1

Вы пытались изменить шрифт в редакторе VBA. (Инструменты/Параметры/Формат редактора) Переключитесь на новый роман для нужного вам языка, и вы сможете ввести символы.

+1

Кодовые модули VBA сохраняются в ANSI. Вы можете вводить только те символы, которые поддерживаются текущей кодовой страницей Windows для программ, отличных от Юникода. С другой стороны, ячейки Excel поддерживают Unicode, и вы можете помещать туда любые символы. – GSerg

5

Похоже, что у вас есть символ Юникода 337 (основание 10, а не HEX). Скажем, мы начинаем с:

enter image description here

и применить автофильтр с:

Sub Macro99() 
    Dim s As String 

    s = ChrW(337) 

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

будет производить:

enter image description here

Вы можете применить это к любому или всем рабочим листам.

+2

Предполагая, что региональные настройки окна установлены на соответствующую кодовую страницу, его также можно ввести непосредственно с помощью Alt + 0151. – Comintern

+2

Отличный ответ ... но ... это немного запутывает ИМО для людей, которые могут не понимать ваш индекс на 10, чтобы указать, что его значение в Юникоде в десятичном ... все еще поддерживает вас (плюс вы избили меня раньше!) –

+0

@RobinMackenzie Спасибо за комментарий ... Я скорректировал ответ. –

1

Единственный путь отправить его в клетку (скажем, А1), то обратитесь к этому значению ячейки для фильтрации диапазона (скажем, C1: F4) - ActiveSheet.Range("$C$1:$F$4").AutoFilter Field:=2, Criteria1:="=*" & Range("A1").Value & "*", Operator:=xlAnd

3

В то время как вы могли бы использовать код для каждого из записей который не будет «вставляться» в VBA (например, "l"&ChrW(337)&"sütött"), было бы проще использовать некоторую форму репозитория для вашего списка. Рабочий лист делает хороший выбор и может быть скрыт позже, если вы хотите не показывать это пользователю.

filter_terms

Дополнительно: Создание динамического именованного диапазона с Обозначает: из
=hidden!$A$2:index(hidden!$A:$A, match("žžž", hidden!$A:$A))

Построить вариантный массив из списка и использовать элементы массива в качестве фильтр.

dict_filter_before

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 

dict_filter_after

+0

Я только что видел ваше недавнее изменение, которое включало в себя тот факт, что вы используете это на Mac. Я не уверен, что вы можете использовать Scripting.Dictionary на Mac, но вы можете построить массив из списка рабочих листов. – Jeeped

+0

Yup, [он не будет работать на Mac] (http://stackoverflow.com/questions/5702362/vba-collection-list-of-keys/5702529#comment47733642_5702529). – GSerg

+0

См. Мое изменение из словаря в массив выше. – Jeeped