Просто, но это не будет вводить пароль на защищенном листе Excel - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь заставить макрос выполнить 150 книг Excel с 5 листами в каждой книге и ввести пароль на одном конкретном листе.

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

Пароль просто не принимается, лист остается защищенным.

Это код:

Option Explicit

Sub Examnew()    
    Dim rCell As Range, rRng As Range             'define loop names    
    Dim wbmaster As Workbook                      'name for master workbook    
    Dim wbtarget As Workbook                      'name for student workbook    
    Set wbmaster = ActiveWorkbook                 'set the name for the master

    'Student numbers in cells B3:B64 WARNING SET TO 2 STUDENTS ONLY FOR TEST
    'NOTE that st Nums are in col B with a duplicate in col A to collect results.

    Set rRng = wbmaster.Sheets("studentlist").Range("B3:B4”)

    For Each rCell In rRng '<                | loop through "students" range
        '<                                     | now open Student exam workbook and set to name "wbtarget"
        Workbooks.Open ("/Users/tester/Final_V1/" & rCell.Value & ".xlsx")

        Set wbtarget = Workbooks(rCell.Value & ".xlsx")
        Sheets("ANSWERS").Unprotect "Coursework2019"

        'Other stuff normally here…   
        wbtarget.Close (True) '<            | now save and close the student file...

    Next rCell   '<                          | next student number
End Sub

Приветствия за любую помощь.

1 Ответ

0 голосов
/ 11 января 2019
  1. В вашем коде есть неправильные скобки.

    Скобки для параметров необходимы, если функция должна возвращать результат. Если процедура / функция не возвращает результат, круглые скобки не допускаются !

    См. Примеры:

    SomeProcedure(Parameter)         'wrong
    SomeProcedure Parameter          'correct
    
    result = SomeFunction(Parameter) 'correct
    result = SomeFunction Parameter  'wrong
    
  2. Вы должны указать, в какой книге ваш Sheets("ANSWERS"): wbtarget.Sheets("ANSWERS")

Так должно быть что-то вроде этого:

Option Explicit

Sub Examnew()    
    Dim rCell As Range, rRng As Range             'define loop names    
    Dim wbmaster As Workbook                      'name for master workbook    
    Dim wbtarget As Workbook                      'name for student workbook    
    Set wbmaster = ActiveWorkbook                 'set the name for the master

    'Student numbers in cells B3:B64 WARNING SET TO 2 STUDENTS ONLY FOR TEST
    'NOTE that st Nums are in col B with a duplicate in col A to collect results.

    Set rRng = wbmaster.Sheets("studentlist").Range("B3:B4")

    For Each rCell In rRng 
        Set wbtarget = Workbooks.Open("/Users/tester/Final_V1/" & rCell.Value & ".xlsx") 
        '^ set the open workbook directly to the variable

        wbtarget.Sheets("ANSWERS").Unprotect Password:="Coursework2019"
        '^ you must specify the workbook here!!!

        'Other stuff normally here…   
        wbtarget.Close SaveChanges:=True 'submit parameters without parenthesis!
    Next rCell
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...