2013-07-03 5 views
2

Я хочу написать макрос, который во всех листах блокирует определенные клетки - от A12 до последней строки Р. Дело в том, что я получаюИспользуя поиск: Method «Range» объекта '_Worksheet «Ошибка

ошибка 1004:.? "Method 'Range' объекта '_Worksheet" ошибка

в строке

LastRow = wSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row)

Может кто-нибудь помочь мне Спасибо !

Option Explicit 

Sub ProtectAll() 

Dim wSheet   As Worksheet 
Dim Pwd    As String 
Dim LastRow   As Integer 

Pwd = InputBox("Enter your password to protect all worksheets", "Password Input") 
For Each wSheet In Worksheets 
LastRow = wSheet.Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
    wSheet.Range(Cells(12, 1), Cells(LastRow, 18)).Select 
    wSheet.Protect Password:=Pwd, AllowFiltering:=True 
Next wSheet 

End Sub 
+0

Это разве как защитить клетки. См. [Этот ответ] (http://stackoverflow.com/questions/16684297/hiding-formulas-in-formula-bar/16686868#16686868) –

+1

удалите 'After: = [A1],' part или квалифицируйте [ A1] с wsheet – JosieP

ответ

3

Ваш код будет неуспешным, если лист будет пустым, поскольку это в настоящее время предполагается, что он считает, по меньшей мере, одну не пустую ячейку, когда он устанавливает LastRow.

Попробуйте использовать объект диапазона, проверьте, что он Not Nothing перед использованием LastRow.

Обновлено: для полноты добавил проверку, чтобы увидеть, если листы уже были защищены, и если да скачет и ПСЭПП эти

Option Explicit 

Sub ProtectAll() 

Dim wSheet   As Worksheet 
Dim Pwd    As String 
Dim rng1 As Range 
Dim strProt As String 

Pwd = InputBox("Enter your password to protect all worksheets", "Password Input") 
For Each wSheet In Worksheets 
Set rng1 = wSheet.Cells.Find(What:="*", After:=wSheet.[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious) 
If Not rng1 Is Nothing Then 
With wSheet 
If .ProtectContents Then 
strProt = strProt & .Name & vbNewLine 
Else 
    .Range(.Cells(12, 1), .Cells(rng1.Row, 18)).Locked = True 
    .Protect Password:=Pwd, AllowFiltering:=True 
End If 
End With 
End If 
Next wSheet 

If Len(strProt) > 0 Then MsgBox strProt, , "These sheet were already protected so were skipped" 

End Sub 
+0

Все еще не работает (даже после удаления uncommenting 'wSheet.Range (Ячейки (12, 1), Ячейки (rng1.Row, 18)). Select') – atomoutside

+0

Такая же ошибка и одна и та же ошибка (1004). Когда я запускаю свой код, он блокирует лист, но не ячейки. – atomoutside

+0

@mehow thats, безусловно, верно при блокировке ячеек. Но это не объясняет ошибку времени выполнения. – brettdj