2014-02-18 1 views
0

Я пытаюсь удалить строку в неактивном защищенном рабочем листе через VBA. Без защиты удаление прекращается.Runtimeerror 1004 при попытке удалить строку в неактивном защищенном рабочем листе

я устанавливаю Worksheet-защиты в Workbook_Open-Sub:

Private Sub Workbook_Open() 
    Dim Password As String 
    Password = "123" 

    Dim myWorksheet As Worksheet 
    For Each myWorksheet In ThisWorkbook.Worksheets 
     myWorksheet.Protect Password:=Password, UserInterFaceOnly:=True 
    Next 

    ActiveWorkbook.Protect Password 

End Sub 

Ошибка генерируется в первой строке следующего кода:

Public Sub DeleteRow(Row As Integer) 
    Rows(Row).Delete 

    [...] 

End Sub 

Что я делаю неправильно ? Странно то, что я могу удалить строку в активной защищенной рабочей таблице. Пожалуйста, помогите мне!

Marco

+0

'Я пытаюсь удалить строку в неактивном защищенном рабочем листе', но 'Rows (Row) .Delete' удаляет строку всегда в _active_ sheet. Чтобы удалить строку на другом листе, используйте 'ThisWorkbook.Worksheets (« sheet1 »). Строки (строка) .Delete' –

+0

Субъект DeleteRow находится в объекте листа, где я хочу удалить строку. Таким образом, использование названия рабочего листа впереди, к сожалению, не имеет никакого значения. – Marco

+0

попробуйте использовать его в стандартном модуле. –

ответ

1

Рассматривали ли вы добавить строку кода для снятия защиты ваших листов, когда макрос хочет начать выполнение и добавление линии для защиты листов непосредственно перед макро отделки?

+0

Это работает для меня, хотя это выглядит не очень красиво. Я удаляю 5 строк из 5 разных листов, и вы можете видеть, что Excel очень быстро проходит через них при защите и снятии защиты. Но я счастлив, что сейчас работает. Благодаря! – Marco

+0

Я использовал 'Application.ScreenUpdating = False' перед кодом и' Application.ScreenUpdating = True' после кода, чтобы пользователь не мог видеть, что Excel просматривает все листы, чтобы удалить строки. – Marco

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