2014-01-22 5 views
1

У меня есть проект VBA в Excel, который работал с win XP и win7. Когда я пытаюсь запустить его на win8, у меня есть ошибка времени выполнения 91: Объектная переменная или С заблокированной переменной блока. вот к югу, что вызывает ошибку:Ошибка выполнения 91 с Win8

Public Sub Worksheet_UnLock() 
    For Each Sheet In ActiveWorkbook.Worksheets 'this line throws error 
     Sheet.Unprotect Password:=myPassword 
    Next Sheet 
End Sub 

Любые идеи?

EDIT: У меня нет «опции явным» над кодом. , изменяющийся с ActiveWorkbook.Worksheets to Sheets не решает проблему, но я нашел что-то интересное - мой код отлично работает, когда я сохраняю файл с кодом на локальный HD, но он дает ошибку времени выполнения 91, когда он открывается с сервера. Как это возможно? Мне действительно нужно иметь файл на сервере.

+0

Это для Excel 2013 ?? –

+0

попробуйте chagne 'ActiveWorkbook.Worksheets' to' ThisWorkbook.Worksheets' –

+2

У вас есть опция «Option Explicit» в верхней части вашего модуля? Возможно, вам нужно измерить переменную «Sheet», прежде чем использовать ее в цикле. Что относительно переменной myPassword? Где это объявлено? Кроме того, попробуйте заменить «ActiveWorkbook.Worksheets» на «Листы» –

ответ

0

Ошибка 91 возникает из-за того, что объект не установлен, поэтому я должен убедиться, что в ActiveWorkbook есть листы, добавленные к нему. Вы можете попробовать попробовать и посмотреть, не вызывает ли это ошибки.

Sub Worksheet_UnLock() 
    Dim s as Worksheet 

    For Each s In ActiveWorkbook.Sheets 
     s.Unprotect Password:=myPassword 
    Next 
End Sub 
+0

ОК, это сработало. Можете ли вы объяснить, почему мой старый код работал на жестком диске, но не работал на сетевом диске? Спасибо! – PauliusM

+0

Я на самом деле не знаю, почему вы работаете на своем жестком диске. Мое предположение было «ActiveWorkbook.Worksheets» вызывало проблему, так как это дало мне проблемы в прошлом. С тех пор я использовал 'ActiveWorkbook.Sheets' и не имел никаких проблем. – Ripster

Смежные вопросы