Страницы: 1
RSS
Цикл поиска значений в строке, проверка значений в предыдущих ячейках
 
Как проверить с помощью цикла vba, при каждом вводе данных в активную  ячейку, есть ли значение(любое) в предыдущих(влево от активной ячейки) 6  ячейках строки, если есть во всех 6 подряд то запретить ввод(или msg) а  если нет то можно дальше вводить данные. Нужно чтобы при составления  графика дежурства на дому  вводить не больше 6 дней дежурств(одного  работника), потом выходной и опять по новой. В графике реализована форма  для заполнения. Хочу установить проверку, чтобы было заполнено не  больше 6 ячеек дальше пустая ячейка и опять 6 дней дежурства.
Вот код одной кнопки(нужно сюда вставить цикл проверки заполоненных ячеек):
Код
Private Sub CommandButton1_Click()
 If Not Intersect(ActiveCell, Range("B8:AF15")) Is Nothing Then
   If ActiveCell.Offset(, -1) = "/3" Then
            MsgBox ("ЗАБОРОНЕНО!!!"), vbCritical + vbDefau, "ПОМИЛКА"
        ActiveCell.Offset(, 0) = ""
     Exit Sub
  Else
     If ActiveCell.Offset(, -1) = 1.5 Then
            MsgBox ("ЗАБОРОНЕНО!!!"), vbCritical + vbDefau, "ПОМИЛКА"
        ActiveCell.Offset(, 0) = ""
     Exit Sub
  Else
    Selection = 1.75
        ActiveCell.Offset(, 1).Select
      End If
     End If
  End If
End Sub

Заранее спасибо!
Изменено: Александр - 12.11.2021 16:37:11
 
количество заполненных
Цитата
Александр: в предыдущих (влево от активной ячейки) 6 ячейках строки
равно
Код
WorksheetFunction.CountA(ActiveCell.Offset(0,-6).Resize(1,6))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, извиняюсь что сразу не ответил, попробую внедрить это в код, как получится отпишусь.
 
Александр, а ActiveCell.Offset(, 0) - это о чём? Смещение куда?
 
Никуда, в активной ячейке вводится ("")
Этот код на кнопке, при вводе 1,75 если в предыдущей ячейке стоит /3 или 1.5 -  msg "ввод запрещен" а  активная ячейка делается пустая. Ну можно наверное просто через selection ввести(я только учусь).
 
Цитата
написал:
Никуда, в активной ячейке вводится ("")
Тогда зачем Offset? Так и пишите: activecell=""
 
Да автоматом получилось, работает же :) . Спасибо за подсказку.
 
кросс
По вопросам из тем форума, личку не читаю.
 
БМВ, пытаюсь найти решение на разных сайтах, это запрещено?
Изменено: Александр - 13.11.2021 19:22:36
 
Цитата
Александр написал:
это запрещено?
тут нет, тут не рекомендовано, а вот там  очень даже запрещено.
По вопросам из тем форума, личку не читаю.
 
БМВ, закройте тут тему.
 
Александр, если размещаете свой вопрос на нескольких ресурсах, то информируйте нас прямыми ссылками на эти темы.
 
А обязательно VBA? Проверка данных справится с задачей на ура. Стоп , вижу , форма есть
Цитата
Jack Famous написал:
Offset(0,-6)
и что будет для B8 например?
Изменено: БМВ - 13.11.2021 20:12:46
По вопросам из тем форума, личку не читаю.
 
Пробовал код уважаемого Jack Famous
Код
WorksheetFunction.CountA(ActiveCell.Offset(0,-6).Resize(1,6))
начиная от Н8 работает от В8 до G8 ошибка.
Изменено: Александр - 13.11.2021 23:22:15
 
Цитата
написал:
Александр, если размещаете свой вопрос на нескольких ресурсах, то информируйте нас прямыми ссылками на эти темы.
Хорошо, буду знать. Я здесь первый раз создаю темы.
 
Цитата
написал:
от В8 до G8 ошибка
От В8? А скажите, какой столбец будет на 6 ячеек левее столбца В?
 
Суть ошибки понятна, как ее избежать? Может другим способом или может цикл применить.
 
не читал тему, но может так?
Код
If ActiveCell.Column < 6 Then Exit Sub
 
Но ведь Вы САМИ просили на 6 ячеек левее. Джек так Вам и подсказал.
 
Так спасибо большое ему за подсказку, просто этот метод не подойдет, буду искать другое решение.
 
Цитата
написал:
< 6
Паша, может 7? ))
 
Решил задачу. Подсказали здесь
Всем спасибо!
Код
           If ActiveCell.Column > 7 Then
            If ActiveCell.Offset(0, -1) <> "" And ActiveCell.Offset(0, -2) <> "" _
            And ActiveCell.Offset(0, -3) <> "" And ActiveCell.Offset(0, -4) <> "" _
            And ActiveCell.Offset(0, -5) <> "" And ActiveCell.Offset(0, -6) <> "" Then
     MsgBox ("НИЗЗЯ!!!")
     ActiveCell.Offset(, 1).Select
 
Цитата
Александр написал:
Подсказали
Ну да, на Автовазе тоже работали профессионалы и машины даже с конвейера сходили, а должны были выезжать :)

Ну в #13 я об этом написал, потом подсказку дали, ну неужели не составить простое условие
Код
If ActiveCell.Column >6 then
 if WorksheetFunction.CountA(ActiveCell.Offset(0,-6).Resize(1,6))=6 then
    '  что нужно сделать
  end if
end if

а есть вариант , в случае если не может быть формул.
Код
If ActiveCell.Column >6 then
 if ActiveCell.Offset(0,-6).Resize(1,6).SpecialCells(xlCellTypeConstants).Count=6 then
    '  что нужно сделать
  end if
end if
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх