#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. Спасибо за ваш ответ. У меня не работает. Я не получаю никаких ошибок, но это не блокирует строку.