Доброго времени суток, уважаемые, пожалуйста, скажите можно ли заблокировать ввод данных в следующей строке, пока в выбранной не заполнены некоторые столбцы, знаю, что можно сделать, через userform, но можно ли обойтись без этого. Нужно, чтобы если в столбце F введены данные, то нельзя заполнять данные в другой строке, пока не заполненны столбцы G,J,K,O, но, если в столбце O имеется слово "скидка", то ввод описанных столбцов выше необязателен
Доброго времени суток, уважаемые, пожалуйста, скажите можно ли заблокировать ввод данных в следующей строке, пока в выбранной не заполнены некоторые столбцы, знаю, что можно сделать, через userform, но можно ли обойтись без этого. Нужно, чтобы если в столбце F введены данные, то нельзя заполнять данные в другой строке, пока не заполненны столбцы G,J,K,O, но, если в столбце O имеется слово "скидка", то ввод описанных столбцов выше необязателенKioto
Добрый день. Вариант макросом, в модуль листа [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) lr = Cells(Rows.Count, 6).End(xlUp).Row If Target.Row <> lr + 1 Then Exit Sub If Not Cells(lr, 15) = "скидка" Then If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select End If End If End Sub
[/vba]
Добрый день. Вариант макросом, в модуль листа [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) lr = Cells(Rows.Count, 6).End(xlUp).Row If Target.Row <> lr + 1 Then Exit Sub If Not Cells(lr, 15) = "скидка" Then If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select End If End If End Sub
_Boroda_, sboy, огромнейшее всем спасибо. Макрос очень понравился, но при вводе данных в ошибочном месте, после уведомления данные в ячейках всё равно остаются, можно ли, чтобы он их стирал?
_Boroda_, sboy, огромнейшее всем спасибо. Макрос очень понравился, но при вводе данных в ошибочном месте, после уведомления данные в ячейках всё равно остаются, можно ли, чтобы он их стирал?Kioto
Можно ли, пожалуйста, добавить в начале кода условие, чтобы работники начинали вводить данные со столбца F, иначе остаётся простор для жульничества, а так они сначала обязательно заполняют столбец F, а остальное по макросу.
Можно ли, пожалуйста, добавить в начале кода условие, чтобы работники начинали вводить данные со столбца F, иначе остаётся простор для жульничества, а так они сначала обязательно заполняют столбец F, а остальное по макросу.Kioto
Прописала, чтобы сначала столбец F заполняли, но теперь выводятся уведомления, вместо одного выходят два, а главное сам столбец F заблокирован
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) lr = Cells(Rows.Count, 6).End(xlUp).Row bk = Cells(lr, 7) = "" And Cells(lr, 8) = "" And Cells(lr, 9) = "" And Cells(lr, 10) = "" And Cells(lr, 11) = "" And Cells(lr, 12) = "" And Cells(lr, 13) = "" And Cells(lr, 14) = "" And Cells(lr, 15) = "" And Cells(lr, 16) = "" And Cells(lr, 17) = "" And Cells(lr, 18) = "" And Cells(lr, 19) = "" And Cells(lr, 20) = "" And Cells(lr, 21) = "" If Target.Row <> lr + 1 Then Exit Sub If Cells(lr, 6) <> bk Then MsgBox "Заполните столбец F" Rows(lr).Select
If Not Cells(lr, 15) = "скидка" Then If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select End If End If End If End Sub
[/vba]
Прописала, чтобы сначала столбец F заполняли, но теперь выводятся уведомления, вместо одного выходят два, а главное сам столбец F заблокирован
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) lr = Cells(Rows.Count, 6).End(xlUp).Row bk = Cells(lr, 7) = "" And Cells(lr, 8) = "" And Cells(lr, 9) = "" And Cells(lr, 10) = "" And Cells(lr, 11) = "" And Cells(lr, 12) = "" And Cells(lr, 13) = "" And Cells(lr, 14) = "" And Cells(lr, 15) = "" And Cells(lr, 16) = "" And Cells(lr, 17) = "" And Cells(lr, 18) = "" And Cells(lr, 19) = "" And Cells(lr, 20) = "" And Cells(lr, 21) = "" If Target.Row <> lr + 1 Then Exit Sub If Cells(lr, 6) <> bk Then MsgBox "Заполните столбец F" Rows(lr).Select
If Not Cells(lr, 15) = "скидка" Then If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select End If End If End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) lr = Cells(Rows.Count, 6).End(xlUp).Row If Target.Row <> lr + 1 Then Exit Sub If Not Cells(lr, 15) = "скидка" Then If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select Exit Sub End If End If If Target.Address <> Cells(Target.Row, 6).Address And Cells(Target.Row, 6).Value = "" Then MsgBox "Ввод начинается со столбца F" Cells(Target.Row, 6).Select End If End Sub
[/vba]
Если правильно понял... [vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) lr = Cells(Rows.Count, 6).End(xlUp).Row If Target.Row <> lr + 1 Then Exit Sub If Not Cells(lr, 15) = "скидка" Then If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select Exit Sub End If End If If Target.Address <> Cells(Target.Row, 6).Address And Cells(Target.Row, 6).Value = "" Then MsgBox "Ввод начинается со столбца F" Cells(Target.Row, 6).Select End If End Sub
sboy, да, именно так, преогромная благодарность, только не могли бы Вы глянуть на этот код, нужно, чтобы, если в столбце 15 стоит слово скидка, тогда необходимо заполнить столбец 16 и 17
[vba]
Код
lr = Cells(Rows.Count, 6).End(xlUp).Row If Target.Row <> lr + 1 Then Exit Sub If Not Cells(lr, 15) = "скидка" Then ' если в столбце 15 слово "скидка", то разблокировать следующую строку - а нужно, что если введено слово скидка, то заполнить столбец 15 и 16 If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select Exit Sub End If End If
' If Cells(lr, 15) = "скидка" Then ' если в столбце 15 слово "скида", то заполнить 16 и 17 ' If Cells(lr, 16) = "" Or Cells(lr, 17) = "" Then ' MsgBox "Заполните предыдущую строку" ' Rows(lr).Select ' End If
If Target.Address <> Cells(Target.Row, 6).Address And Cells(Target.Row, 6).Value = "" Then MsgBox "Заполните столбец F" Cells(Target.Row, 6).Select End If
[/vba]
sboy, да, именно так, преогромная благодарность, только не могли бы Вы глянуть на этот код, нужно, чтобы, если в столбце 15 стоит слово скидка, тогда необходимо заполнить столбец 16 и 17
[vba]
Код
lr = Cells(Rows.Count, 6).End(xlUp).Row If Target.Row <> lr + 1 Then Exit Sub If Not Cells(lr, 15) = "скидка" Then ' если в столбце 15 слово "скидка", то разблокировать следующую строку - а нужно, что если введено слово скидка, то заполнить столбец 15 и 16 If Cells(lr, 7) = "" Or Cells(lr, 10) = "" Or Cells(lr, 11) = "" Or Cells(lr, 15) = "" Then MsgBox "Заполните предыдущую строку" Rows(lr).Select Exit Sub End If End If
' If Cells(lr, 15) = "скидка" Then ' если в столбце 15 слово "скида", то заполнить 16 и 17 ' If Cells(lr, 16) = "" Or Cells(lr, 17) = "" Then ' MsgBox "Заполните предыдущую строку" ' Rows(lr).Select ' End If
If Target.Address <> Cells(Target.Row, 6).Address And Cells(Target.Row, 6).Value = "" Then MsgBox "Заполните столбец F" Cells(Target.Row, 6).Select End If
Макрос теперь работает, всё поправила под себя,но столкнулась с такой проблемой, работники начали растягивать дату и блокирование отключается и все столбцы, которые должны быть обязательно заполнены не подвержены контролю и могут опять не заполняться, можно ли запретить растягивание или сделать какую-то проверку ранее введённых строк?
Макрос теперь работает, всё поправила под себя,но столкнулась с такой проблемой, работники начали растягивать дату и блокирование отключается и все столбцы, которые должны быть обязательно заполнены не подвержены контролю и могут опять не заполняться, можно ли запретить растягивание или сделать какую-то проверку ранее введённых строк?Kioto