Страницы: 1
RSS
Выделенные строки и Нужный столбец, Selection/Column
 
Здравствуйте Уважаемые,

Помогите Пожалуйста,
Следующий код работает, если выделить несколько строк, но если выбрать только одну строку то тормозить и выдает неверный результат.

Спасибо.
Код
Dim Rng As Range
Set Rng = Selection.SpecialCells(xlCellTypeVisible)
For Each rr In Rng.Rows
    If Range("A" & rr.Row).Value > 4 Then Range("A" & rr.Row).Value = 8
    If Range("A" & rr.Row).Value > 4 Then Range("A" & rr.Row & ":C" & rr.Row).Font.Color = RGB(0, 0, 255)
Next
 
Доброе время суток.
Может всё же не быть столь застенчивым? Приложите пример, что на входе, что должно получиться, когда выделена одна строка, что должно получиться, когда выделено несколько строк. Глядишь кто-нибудь и поможет.
В следствии одной из теорем "Теории алгоритмов" говорится: не существует такого алгоритма, который, анализируя код другого алгоритма, мог определить, что тот алгоритм делает. ;)
 
Нашел такое решение, но он кажется слишком большим для такой задачи.
У кого то может есть лучшее решение?
Код
If 2 - Selection.Rows.CountLarge < 1 Then
Dim Rng As Range
Set Rng = Selection.SpecialCells(xlCellTypeVisible)
For Each rr In Rng.Rows
    If Range("A" & rr.Row).Value > 4 Then Range("A" & rr.Row).Value = 8
    If Range("A" & rr.Row).Value > 4 Then Range("A" & rr.Row & ":C" & rr.Row).Font.Color = RGB(0, 0, 255)
Next

Else
If Cells(Application.ActiveCell.Row, 1).Value > 4 Then Cells(Application.ActiveCell.Row, 1).Value = 8
If Cells(Application.ActiveCell.Row, 1).Value > 4 Then Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 3)).Font.Color = RGB(0, 0, 255)
End If

И еще если вставить Option Explicit в начале выдаёт ошибку Variable not defined и выделяет rr в коде.

Спасибо.
Файл с кодом прилагаю.
Изменено: Шерзод Маткаримов - 08.06.2020 18:11:54
 
Цитата
Шерзод Маткаримов написал:
если вставить Option Explicit в начале выдаёт ошибку Variable not defined и выделяет rr в коде.
Для того и используют Option Explicit ))
Проверьте, объявлена ли эта переменная?
 
Цитата
Юрий М написал:
Проверьте, объявлена ли эта переменная?
А как её проверить? Почитал в интернете но, честно не понял. Сам новичок в VBA.
Изменено: Шерзод Маткаримов - 08.06.2020 19:49:33
 
Я Ваш файл смотрел... Проверьте, объявлены ли у Вас переменные? Есть ли, например, такая строка: dim rr
 
Исправил Dim Rng As Range на Dim Rng As Range, RR As Range
и теперь не выдаёт ошибку.

Спасибо.
 
Если бы вы написали, какой результат вам нужен и, исходя из каких условий, то, думаю, вам бы быстро ответили.
Вам такой результат нужен?

 
Да, точно. Ваш макрос работает выполняет то что нужно.
Код можно посмотреть? Если ваш код лучше моего, хотелось бы применить Ваш в своём макросе.
 
Это и есть ваш код. Просто условия поменял, т.к. не знаю, из чего исходить.
Код
Option Explicit

Sub DoIt()
Dim Rng As Range, rr As Range
Set Rng = Selection.SpecialCells(xlCellTypeVisible)
For Each rr In Rng.Rows
    If Range("A" & rr.Row).Value > 0 Then Range("A" & rr.Row).Value = 8
    If Range("A" & rr.Row).Value > 0 Then Range("A" & rr.Row & ":C" & rr.Row).Font.Color = vbRed
Next
End Sub
Можно еще проще сделать, чтобы при выделении условие срабатывало автоматически. Но повторяю, неясно, что вы хотите и исходя из чего.  
Изменено: НСС - 08.06.2020 21:47:34
 
Цитата
НСС написал:
Это и есть ваш код. Просто условия поменял, т.к. не знаю, из чего исходить.
Этот код не работает если столбцы скрыты, и выделена только одна строка. Отображение/скрытие столбцов тоже не помогло, поэтому во втором варианте моего кода я применил условие, если одна строка один код, если несколько строк то другой. Смотрите второй код.

В принципе, сейчас код работает и выполняет свою задачу без ошибки, просто хотел проверить есть ли более простой и надежный вариант.  
Страницы: 1
Наверх