Проблема ограничения ввода данных в ячейку
Старые программисты меня поймут: раньше в Cobol,
Fox, Clipper было понятие шаблона наподобие
PIC 'dd.mm.yyyy' и ничего кроме цифр и точек
да еще с проверкой хронологической правильности
ввести в поле было нельзя. В Excel по-моему все
можно.... Но как говорит М.Жванецкий - "Человек все может, только не надо этого ему позволять!"
Как можно ограничить длину вводимых в ячейку данных? А может быть еще и тип этих данных?
Старые программисты меня поймут: раньше в Cobol,
Fox, Clipper было понятие шаблона наподобие
PIC 'dd.mm.yyyy' и ничего кроме цифр и точек
да еще с проверкой хронологической правильности
ввести в поле было нельзя. В Excel по-моему все
можно.... Но как говорит М.Жванецкий - "Человек все может, только не надо этого ему позволять!"
Вот пара примеров.
1. Ограничения длины вводимой в ячейку строки (до 10 символов):
Cells(1, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateTextLength, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="1", Formula2:="10"
End With
2. Назначение в качестве допустимых значений для ячейки списка данных:
Cells(2, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="1,2,3"
End With
Это конечно утешение, но слабое...
Во-первых, нельзя сделать сложного ограничения
(второй раз ADD не проходит).
Во-вторых, и самое главное, абсолютно не
защищает от некорректного ввода путем
копирования данных из другого приложения
через ClipBoard...
[QUOTE]Originally posted by Dmitrii
Это конечно утешение, но слабое...
Во-первых, нельзя сделать сложного ограничения
(второй раз ADD не проходит).
Во-вторых, и самое главное, абсолютно не
защищает от некорректного ввода путем
копирования данных из другого приложения
через ClipBoard...
A если проверять при изменении в ячейке, например
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Then
. . . . проверяем-перепроверяем . . .
End If
End Sub
A если проверять при изменении в ячейке, например
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Then
. . . . проверяем-перепроверяем . . .
End If
End Sub
Это может помочь в принципе...,
Но если проверять надо 4000 ячеек,
то какого объема будет соответствующая
процедура Worksheet_Change()
Это может помочь в принципе...,
Но если проверять надо 4000 ячеек,
то какого объема будет соответствующая
процедура Worksheet_Change()
И у каждой ячейки свой уникальный формат?
По диапазонам разложить нельзя?
и сделал. Но тут речь идет о процедуре
Worksheet_Change(). Она принимает в качестве
параметра только одну ячейку. Цикл не поможет,
т.к. при копировании блоком ошибка может быть в
сотне ячеек сразу и ежели ругать пользователя
на каждую таку ошибку, то скорее всего он пошлет
меня с такой программой куда подальше...