Блокировка строки для определенного месяца

#excel #vba

#excel #vba

Вопрос:

В моих данных есть ячейка A1, содержащая месяц.

A2: Z999: сведения о сотруднике. Столбец P: дата присоединения.

Я хочу закодировать так, чтобы при P> A1 он блокировал строку для этого сотрудника, поскольку это старые данные. Пустыми должны быть только строки без даты или пустые строки с 999 и далее.

Пожалуйста, помогите! Прямо сейчас мой приведенный ниже код блокирует все.

 Dim DestSh As Worksheet
Dim lastrow As Long


Set DestSh = Sheets("Consultant amp; Teacher")

With DestSh
    If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
        lastrow = .Columns("A:z").Find(What:="*", _
                      After:=.Range("A1"), _
                      Lookat:=xlPart, _
                      LookIn:=xlFormulas, _
                      SearchOrder:=xlByRows, _
                      SearchDirection:=xlPrevious, _
                      MatchCase:=False).Row
    Else
        MsgBox "Insufficient rows"

    End If

    If Range("A1").Value = "April" Then
    .Unprotect Password:="MyPassword"
    .Cells.Locked = False
    .Range("A2:Z" amp; lastrow).Locked = True
  

Ответ №1:

Я не совсем уверен, чего вы пытались достичь с помощью существующего кода, но, основываясь исключительно на том, что вы объяснили, я думаю, что это должно сработать :

 Dim DestSh As Worksheet
Dim lastrow As Long
Dim i As Integer

Set DestSh = Sheets("Consultant amp; Teacher")

With DestSh
    'finds the last row with data on A column
    lastrow = Range("A65536").End(xlUp).Row

    'parse all rows
    For i = 2 To lastrow
       'if your conditions are met
       If Month(.Cells(i, 16)) > Month(.Cells(1, 1)) Then
          .Range("A" amp; i).EntireRow.Cells.Locked = True 'lock the row
       End If
    Next i
End With
  

Комментарии:

1. Спасибо за ваш ответ. У меня не работает. Я не получаю никаких ошибок, но это не блокирует строку.