Ошибка времени выполнения '424': требуется объект для макроса копирования / вставки VBA с незащищенной книгой - PullRequest
2 голосов
/ 30 сентября 2019

Я создал макрос для копирования / вставки по мере необходимости. Однако недавно я понял, что мне нужно будет показать нужный лист и снять защиту с рабочей книги в VBA. Вся книга должна быть защищена паролем, а не только один лист. Когда я запускаю свой код с Workbook.Unprotect Password:="SOCKS", я получаю ошибку во время выполнения '424'.

Sub CopyRange()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim i As Integer
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Set wkbDest = ThisWorkbook
    Dim strExtension As String
    Dim LastRow As Long
    Dim a As Integer

    Const strPath As String = "H:\My Documents\Timesheet Folder\" 'Specify file path here next to the = in the " "
    ChDir strPath
    strExtension = Dir(strPath & "*.xls*")
    Do While strExtension <> ""
        Set wkbSource = Workbooks.Open(strPath & strExtension)
        With wkbSource.Sheets("Data") 'Specify the name of the sheet here in the " " next to .Sheets
            a = .Cells(.Rows.Count, 1).End(xlUp).Row
            Worksheets("Data").Visible = True
            Workbook.Unprotect Password:="SOCKS" 'Here is the problem line
            For i = 1 To a
                If .Cells(i, 1).Value = "1934001" And .Cells(i, 2).Value = "GSMP_North_Haledon" And .Cells(i, 4).Value = "2019" And .Cells(i, 5).Value = "September" And .Cells(i, 6).Value = "20" And .Cells(i, 17).Value = "SRo" Then
                    'In the line below, name the sheet of the open destination workbook in the " " next to .Worksheets
                    LastRow = wkbDest.Worksheets("Data").Cells(wkbDest.Worksheets("Data").Rows.Count, "B").End(xlUp).Offset(1).Row
                    Worksheets("Data").Range(Worksheets("Data").Cells(i, 1), Worksheets("Data").Cells(i, 17)).Copy
                    wkbDest.Worksheets("Data").Range("B" & LastRow).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
                End If
            Next
        End With
        wkbSource.Close savechanges:=False
        strExtension = Dir
    Loop
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

End Sub

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Вам необходимо заменить Workbook фактическим объектом рабочей книги, который вы хотите unprotect. Я предполагаю, что wbkSource.

2 голосов
/ 30 сентября 2019

Эта строка неверна, попробуйте это:

wkbSource.Unprotect Password:="SOCKS"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...