Необходимо в цикле пройти по листу и скрыть строки не соответствующие условию. Условие отбора строк формируется динамически на основании данных другого листа. [vba]
Код
Application.ScreenUpdating = False For i = lFirstRow + 1 To lLastRow If Not ((ActiveSheet.Cells(i, 1).Value Like F1Criteria1) & F1Operator & (ActiveSheet.Cells(i, 1).Value Like F1Criteria2)) Then ActiveSheet.Rows(i).Hidden = True End If Next i Application.ScreenUpdating = True
[/vba] Переменная F1Operator содержит логический оператор сравнения (OR/AND). Если явно указать оператор в конструкции if цикл отрабатывает корректно, при вставке переменной F1Operator в конструкцию if вываливается ошибка. Подскажите как программно вставить оператор сравнения в конструкцию if или может есть другое решение данного вопроса. PS: файл примера не прикрепил тк кода ничтожно мало.
Необходимо в цикле пройти по листу и скрыть строки не соответствующие условию. Условие отбора строк формируется динамически на основании данных другого листа. [vba]
Код
Application.ScreenUpdating = False For i = lFirstRow + 1 To lLastRow If Not ((ActiveSheet.Cells(i, 1).Value Like F1Criteria1) & F1Operator & (ActiveSheet.Cells(i, 1).Value Like F1Criteria2)) Then ActiveSheet.Rows(i).Hidden = True End If Next i Application.ScreenUpdating = True
[/vba] Переменная F1Operator содержит логический оператор сравнения (OR/AND). Если явно указать оператор в конструкции if цикл отрабатывает корректно, при вставке переменной F1Operator в конструкцию if вываливается ошибка. Подскажите как программно вставить оператор сравнения в конструкцию if или может есть другое решение данного вопроса. PS: файл примера не прикрепил тк кода ничтожно мало.vider
Какая неожиданность Если учесть, что амперсанд предназначен для соединения текстовых строк, и преобразует к тексту данные при использовании, то просто теряюсь в догадках соответственно у вас получиться что-то типа ложьложьложь или 000
Какая неожиданность Если учесть, что амперсанд предназначен для соединения текстовых строк, и преобразует к тексту данные при использовании, то просто теряюсь в догадках соответственно у вас получиться что-то типа ложьложьложь или 000Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Udik - Суббота, 16.01.2016, 17:45
Да, все правильно. Так у Вас получается не выражение, а текстовая строка. Посмотрите код, так, надеюсь, понятно будет. Пробегитесь по нему через F8 и посмотрите на значения переменных. В А5 на листе какое-то значение. Например, q [vba]
Код
F1Operator = "+" i = 5 F1Criteria1 = "dqd" F1Criteria2 = "fqg" ff1_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria1 ff2_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria2 ff_ = ff1_ & F1Operator & ff2_ f_ = Evaluate(ff_) If Not f_ Then ActiveSheet.Rows(i).Hidden = True End If
[/vba]
Да, все правильно. Так у Вас получается не выражение, а текстовая строка. Посмотрите код, так, надеюсь, понятно будет. Пробегитесь по нему через F8 и посмотрите на значения переменных. В А5 на листе какое-то значение. Например, q [vba]
Код
F1Operator = "+" i = 5 F1Criteria1 = "dqd" F1Criteria2 = "fqg" ff1_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria1 ff2_ = ActiveSheet.Cells(i, 1).Value Like F1Criteria2 ff_ = ff1_ & F1Operator & ff2_ f_ = Evaluate(ff_) If Not f_ Then ActiveSheet.Rows(i).Hidden = True End If