Проверка каждой ячейки в столбце, если в верхней части есть ключевое слово - PullRequest
0 голосов
/ 06 октября 2018

Я создал немного кода, который проверяет имя в верхней части каждого столбца (строка A) на наличие слова DATE.

Если столбец содержит его, то код должен проходить через каждую ячейку в этом столбце, проверяя правильность формата данных.Если он неправильный, код должен установить синий цвет ячейки.

Это код, который я сделал, но я не уверен, где его поставить или он вообще будет работать:

Sub dateFromatChecker()

    Dim lrow, lcol As Long

    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Find(What:="date", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Selection.FindNext(After:=ActiveCell).Activate

    ActiveCell.Offset(1, 0).Select
    lrow = Selection.End(xlDown).Row

    For x = 2 To lrow

        If Cells(x, 2).NumberFormat <> "yyyy/dd/mm hh:mm:ss" Then
            'MsgBox "Incorrect Date format, Please use this date yyyy/dd/mm hh:mm:ss"
            Cells(x, 2).Interior.Color = vbBlue
        Else
            'MsgBox "Date is in Proper format"
        End If

    Next x
End Sub

Вот пример того, что я хотел бы, чтобы код сделал:

My example table

1 Ответ

0 голосов
/ 06 октября 2018

Это может быть начало.Я решил отметить все значения, которые были правильно отформатированы, так как я думаю, что это проще.У меня возникли некоторые проблемы с кодом, потому что я не объявляю эту часть как переменную

Cells.Find(What:="", After:=CellRange, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=True).Activate

, и поэтому этот макрос переходит в бесконечный цикл ... но он помечает все ячейки форматированием yyyy/dd/mm hh:mm:ss.Вы можете отменить макрос, нажав «Esc».

Итак, с чем поиграться:

Sub Macro1()
Dim CellRange As Range
Dim lcol As String
Dim lrow As String
Dim ActCellRow As Integer
Dim ActCellCol As Integer
Dim CellVal As String

For i = 1 To 8

CellVal = Cells(1, i)

    If LCase$(CellVal) Like LCase$("*date*") Then
    lrow = Cells(Rows.Count, 3).End(xlUp).Row
        For j = 2 To 9
            Set CellRange = Range(Cells(j - 1, i), Cells(j - 1, i))
                Application.FindFormat.NumberFormat = "yyyy/mm/dd hh:mm:ss"
                Range(Cells(2, i), Cells(lrow, i)).Select
                Cells.Find(What:="", After:=CellRange, LookIn:=xlFormulas, LookAt:= _
                    xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False _
                , SearchFormat:=True).Activate

            ActCellRow = ActiveCell.Row
            ActCellCol = ActiveCell.Column

            Cells(ActCellRow, ActCellCol).Interior.Color = vbBlue

        Next j
    End If
Next i

End Sub

Откройте редактор VBA с помощью ALT + F11.Затем вставьте его в модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...