Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Как наложить проверки на страницу excel?

Автор Kaamm Ammkk, 04.10.2016, 08:31

« назад - далее »

Kaamm Ammkk

Помогите пожалуйста в наложении проверки на 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 огромное.

vikttur

#1
Выводы из предыдущей темы не сдедали...
Файл-пример кто вместо Вас сделает? Когда нужно проверять, при/после каких действий? Проверять одним действием ячейку или диапазон? Один столбец или несколько?
ЦитироватьIf .Column > 9 Or .Row > 100000000 Then Exit Sub - это убрал - и заработало для колумн < 6
Неправильно. Строка проверяет: если столбец правее девятого, то выход. На столбец 6 - никакого влияния.

Kaamm Ammkk

Проверять и изменять. Мне нужно на 2-3 - х любых. Остальное сам доделаю. Например 1-2 столбец ограничение строковое на 10 символов (при записи большей строки - обрезать). 4-5 - столбец - значение только 0 и 1, 6-7 любые данные только не ; 8-9 чтобы записывали только цифровое (иначе бы не допускалось.) Спасибо.

vikttur

' 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


vikttur

#4
Kaamm Ammkk, ну, почему об этом в теме не написать? Не работает в Excel-2003...
Может кто-нибудь проверить на Excel-2003?

Pelena


vikttur


vikttur


Pelena