2016-02-03 6 views
0
WB.Sheets(2).Activate 
     WB.Sheets(2).Select 

     With WKS 
      .Range(.Cells(3, 3), .Cells(ClientRows, SavedColumn - 1)).Locked = False 
      .Range(.Cells(3, 3), .Cells(ClientRows, SavedColumn - 1)).FormulaHidden = False 
     End With 

     With WKS 
      .Range(.Cells(3, 1), .Cells(ClientRows, 1)).Locked = False 
      .Range(.Cells(3, 1), .Cells(ClientRows, 1)).FormulaHidden = False 
     End With 

     ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
     ActiveSheet.EnableSelection = xlUnlockedCells 

Я просматриваю таблицу данных и создаю несколько рабочих листов Excel. Вложенный код работает отлично в первый раз, но с ошибкой «Переменная объекта или с переменной блока не установлена». Может кто-нибудь помочь. БлагодаряПочему ActiveSheet сбой

+0

Покажите нам, как объявлены и установлены wks. –

+1

да ... где вы заявили, что это ваш рабочий лист? объявляется? Если нет, вы должны объявить его листом, а затем «WKS = WB.sheets (2)», вам не нужно выбирать его для запуска кода на нем. Избегайте выбора, если это возможно ... – Kathara

ответ

-1

Вот мой ответ:

Option Explicit 
Sub TestActivesheet() 
    Dim WB As Workbook 'Declare de vars 
    Dim WKS As Worksheet 

    Set WB = ThisWorkbook 'Or any other workbook || set the var 
    WB.Sheets(2).Activate 
    WB.Sheets(2).Select 

    Set WKS = WB.Sheets(2) 'Again set the var 

    With WKS 
     .Range(.Cells(3, 3), .Cells(ClientRows, SavedColumn - 1)).Locked = False 
     .Range(.Cells(3, 3), .Cells(ClientRows, SavedColumn - 1)).FormulaHidden = False 
    End With 

    With WKS 
     .Range(.Cells(3, 1), .Cells(ClientRows, 1)).Locked = False 
     .Range(.Cells(3, 1), .Cells(ClientRows, 1)).FormulaHidden = False 
    End With 

    'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    WKS.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    'ActiveSheet.EnableSelection = xlUnlockedCells 
    WKS.EnableSelection = xlUnlockedCells 
End Sub 

Всегда в верхней части каждого модуля, это хорошая практика, чтобы использовать эту Option Explicit, таким образом, когда вы используете переменную, компилятор прошу вас объявить, и избегайте этих ошибок.

+0

Это не отвечает на вопрос. Кроме того, при переписывании кода OP, почему бы не комбинировать операторы with и объявлять 'WKS' рядом с' WB', просто используйте '.Activate' и' .select' в блоке с. В противном случае это просто неэффективный код. – Tom

+0

Я поставил комментарии в свой ответ, добавив недостающую часть, чтобы объяснить, что нужно. Я не объединяю 'with', потому что не является частью вопроса, и пытаюсь дать код, как пользователь. Мой помощник усложняет то, что спрашивает пользователь. Но спасибо за ваши отзывы. –

+1

Мне пришлось удалить строку «Установить WB = эта книга» или любую другую «книгу», как было объявлено ранее в коде WKS. Но это РАБОТАЕТ !! – RyszardJ

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