Помогите пожалуйста в наложении проверки на excel. Надо наложить проверки разного рода:
1. На длину (при превышении, чтобы усекалось (может быть в нескольких столбцах одна длина - в других иная))
2. На то что вписывали цифры(иначе не давало бы записывать в некоторые столбцы)
3. В некоторых столбцах разделитель должна быть запятая - точка с запятой, чтобы не брало.
П.с. Делал это по отдельности - вместе никак. Даже пробовал вызывать несколько макросов в одном - ничего.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objCell As Range
Dim lClmn As Long
With Target
If .Column > 9 Or .Row > 100000000 Then Exit Sub
If .Column < 6 Then lClmn = 10 Else: lClmn
= 4
End With
Application.EnableEvents = False
For Each objCell In Target
If Len(objCell.Value) > lClmn Then
If TypeName(objCell.Value) = "String" Then
objCell.Value = Left(objCell.Value, lClmn)
End If
End If
Next
Application.EnableEvents = True
End Sub
Это код - что вы писали vikturr. If .Column > 9 Or .Row > 100000000 Then Exit Sub - это убрал - и заработало для колумн < 6. Мне только нужно добавить туда условия.
Пишу так не срабатывает:
If .Column = 6 Then lClmn = 10
Elseif .Column = 5 Then lClmn = 5
Elseif .Column = 3 Then lClmn = 15
Else: lClmn = 4
Проверки нужны при записи данных - при переходе на другую ячейку. При вставке данных (копи - пастом)
Каким образом это пишется? Спасибо заранее всем. vikturr огромное.
Выводы из предыдущей темы не сдедали...
Файл-пример кто вместо Вас сделает? Когда нужно проверять, при/после каких действий? Проверять одним действием ячейку или диапазон? Один столбец или несколько?
ЦитироватьIf .Column > 9 Or .Row > 100000000 Then Exit Sub - это убрал - и заработало для колумн < 6
Неправильно. Строка проверяет: если столбец правее девятого, то выход. На столбец 6 - никакого влияния.
Проверять и изменять. Мне нужно на 2-3 - х любых. Остальное сам доделаю. Например 1-2 столбец ограничение строковое на 10 символов (при записи большей строки - обрезать). 4-5 - столбец - значение только 0 и 1, 6-7 любые данные только не ; 8-9 чтобы записывали только цифровое (иначе бы не допускалось.) Спасибо.
' 1-2 столбец - ограничение строковое на 10 символов
' 4-5 столбец - значение только 0 и 1
' 6-7 столбец - любые данные только не ;
' 8-9 столбец - только цифровое значение
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objCell As Range
If Target.Row = 1 Then Exit Sub
If Not Application.Intersect(Range("A:I"), Target) Is Nothing Then
Application.EnableEvents = False ' отключаем события
For Each objCell In Target ' цикл по диапазону
With objCell
If Len(.Value) > 0 Then ' если ячейка не пуста
Select Case .Column ' выбор действий для столбца
Case 1, 2
If TypeName(.Value) = "String" Then ' если текст
.Value = Left(.Value, 10) ' обрезаем до 10
Else
.Value = "" ' не текстовое удаляем
End If
Case 4, 5
If .Value <> 0 And .Value <> 1 Then .Value = "" ' удаляем, если не 0 или 1
Case 6, 7
.Value = Replace(.Value, ";", "") ' удаляем ";"
Case 8, 9
If Not IsNumeric(.Value) Then .ClearContents ' удаляем содержимое
End Select
End If
End With
Next objCell
Application.EnableEvents = True ' включаем события
End If
End Sub
Kaamm Ammkk, ну, почему об этом в теме не написать? Не работает в Excel-2003...
Может кто-нибудь проверить на Excel-2003?
Цитата: vikttur от 04.10.2016, 15:59
в Excel-2003
работает, если макросы включены
Спасибо
А автор свалил...
Как и из предыдущей темы