Добрый день! Прошу помочь разобраться с хитросплетениями VBA, поскольку нахожусь только в начале пути изучения языка. Суть: есть документ, при открытии которого, в случае отсутствия значений в определённых ячейках(G1 и J2 или K2), выскакивают userform1 или usrform2, через комбо- и текстбоксы которых пользователь заполняет те самые ячейки в которых не было значений. Как сделать так, чтобы в случае случайного(или намеренного) удаления значений из ячеек (G1 и J2 или K2) в ходе обработки документа, появлялись userform1 или usrform2, и не убирались до тех пор, пока не будут заполнены? И попутно: как ограничить ввод текста в Текстбокс 1 исключительно буквенными либо буквенно-цифровыми значениями? Таким образом, чтобы при вводе одних лишь цифр в поле "наименование заказчика", появлялся месседжбокс с уведомлением о недопустимости ввода только лишь цифр? Нечто подобное я нашёл на просторах Сети и применил для текстбокса2, но и там как-то криво работает.
Заране благодарю, файл-пример прилагаю.
Добрый день! Прошу помочь разобраться с хитросплетениями VBA, поскольку нахожусь только в начале пути изучения языка. Суть: есть документ, при открытии которого, в случае отсутствия значений в определённых ячейках(G1 и J2 или K2), выскакивают userform1 или usrform2, через комбо- и текстбоксы которых пользователь заполняет те самые ячейки в которых не было значений. Как сделать так, чтобы в случае случайного(или намеренного) удаления значений из ячеек (G1 и J2 или K2) в ходе обработки документа, появлялись userform1 или usrform2, и не убирались до тех пор, пока не будут заполнены? И попутно: как ограничить ввод текста в Текстбокс 1 исключительно буквенными либо буквенно-цифровыми значениями? Таким образом, чтобы при вводе одних лишь цифр в поле "наименование заказчика", появлялся месседжбокс с уведомлением о недопустимости ввода только лишь цифр? Нечто подобное я нашёл на просторах Сети и применил для текстбокса2, но и там как-то криво работает.
Добрый день. по первому вопросу можно так (в модуле листа) [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) a = Target.Address(0, 0) Select Case a Case Is = "G1" If Target = "" Then UserForm1.Show Case Is = "J2", "K2" If Target = "" Then UserForm2.Show Case Else Exit Sub End Select End Sub
[/vba] по второму надо создать отдельную тему
Добрый день. по первому вопросу можно так (в модуле листа) [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) a = Target.Address(0, 0) Select Case a Case Is = "G1" If Target = "" Then UserForm1.Show Case Is = "J2", "K2" If Target = "" Then UserForm2.Show Case Else Exit Sub End Select End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Range("G1") = "" Or Range("J2") = "" Or Range("K2") = "" Then formy End If End Sub
[/vba] В обычном модуле [vba]
Код
Sub formy() With Sheets("ЛИСТ1") On Error Resume Next If .Range("G1") = "" Then UserForm1.Show Else UserForm1.Hide End If If .Range("J2") = "" Or .Range("K2") = "" Then UserForm2.Show Else UserForm2.Hide End If End With End Sub
[/vba] И там еще в модулях форм тоже что-то поправил, не помню уже
А второй вопрос да, в отдельной теме нужно задавать
У меня примерно также В модуле листа [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Range("G1") = "" Or Range("J2") = "" Or Range("K2") = "" Then formy End If End Sub
[/vba] В обычном модуле [vba]
Код
Sub formy() With Sheets("ЛИСТ1") On Error Resume Next If .Range("G1") = "" Then UserForm1.Show Else UserForm1.Hide End If If .Range("J2") = "" Or .Range("K2") = "" Then UserForm2.Show Else UserForm2.Hide End If End With End Sub
[/vba] И там еще в модулях форм тоже что-то поправил, не помню уже
А второй вопрос да, в отдельной теме нужно задавать_Boroda_
_Boroda_, спасибо! Вроде работает. И теперь, бонусом, при вводе курса можно отделять дробную часть запятой, и данные вводятся в ячейку в числовом формате!
А, нет. С запятой не отображает дробную часть.Ну да ладно.
_Boroda_, спасибо! Вроде работает. И теперь, бонусом, при вводе курса можно отделять дробную часть запятой, и данные вводятся в ячейку в числовом формате!
А, нет. С запятой не отображает дробную часть.Ну да ладно.Xpert
Сообщение отредактировал Xpert - Понедельник, 27.11.2017, 14:19