2015-02-24 3 views
2

В макросе Excel мне нужно снять защиту с листа, обновить данные, а затем защитить лист. Следующие работы:Обновление и защита данных макросов Excel

Dim rs As Worksheet 
For Each rs In Worksheets 
    rs.Unprotect Password:="SomePassword" 
Next rs 
ActiveWorkbook.RefreshAll 

Это не:

Dim rs As Worksheet 
For Each rs In Worksheets 
    rs.Unprotect Password:="SomePassword" 
Next rs 
ActiveWorkbook.RefreshAll 
For Each rs In Worksheets 
    rs.Protect Password:="SomePassword" 
Next rs 

Выдает следующую ошибку:

The cell or chart you are trying to change is protected and therefore read-only.

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

ответ

0

Попробуйте один из следующих действий:

  1. Добавить DoEvents после ActiveWorkbook.RefreshAll. Как это:

    Dim rs As Worksheet 
    For Each rs In Worksheets 
        rs.Unprotect Password:="SomePassword" 
    Next rs 
    ActiveWorkbook.RefreshAll: DoEvents 
    For Each rs In Worksheets 
        rs.Protect Password:="SomePassword" 
    Next 
    
  2. Set UserInterfaceOnly аргумент верно при защите книги. Что-то вроде:

    rs.Protect Password:="SomePassword", UserInterfaceOnly:=True 
    
+0

Ни работаю. Я подключаюсь к Excel spreasheet как «Другой источник данных» и запускает sql-запрос. Я забыл сказать, что первоначально, если это имеет значение. – Rich

+0

@Rich Это не имеет значения. У меня есть много рабочих листов, которые соединяются с базами данных и рабочими таблицами, а также с использованием ADO, а в одном я также использую подпрограммы защиты и защиты (private subs). Я не сталкиваюсь с той же проблемой. – L42

0

я получаю то же сообщение об ошибке со следующими подразделами, я не заметил, что сообщение об ошибке относится к рабочим листам, содержащим сводные таблицы:

Private Sub Refresh() 
Dim wks As Worksheet 
For Each wks In ThisWorkbook.Worksheets 
    wks.Unprotect 
Next wks 
ThisWorkbook.RefreshAll: DoEvents 
For Each wks In ThisWorkbook.Worksheets 
    wks.Protect UserInterfaceOnly:=True 
Next wks 
End Sub 
Смежные вопросы