Vba 为什么ActiveSheet会失败
我在一个数据表中循环并生成多个Excel工作表。附加的代码第一次可以完美地工作,但在未设置对象变量或块变量的情况下失败。有人能帮忙吗。谢谢以下是我的答案:Vba 为什么ActiveSheet会失败,vba,excel,Vba,Excel,我在一个数据表中循环并生成多个Excel工作表。附加的代码第一次可以完美地工作,但在未设置对象变量或块变量的情况下失败。有人能帮忙吗。谢谢以下是我的答案: WB.Sheets(2).Activate WB.Sheets(2).Select With WKS .Range(.Cells(3, 3), .Cells(ClientRows, SavedColumn - 1)).Locked = False .Rang
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
始终在每个模块的顶部,使用此选项显式是一种很好的做法,这样当您使用变量时,编译器会要求您声明它,并避免此错误 向我们展示如何声明和设置wks。是的。。。您在哪里声明wks是您的工作表?甚至有申报工作吗?如果没有,您应该将其声明为工作表,然后WKS=WB.sheets2您不必选择它来运行代码。尽可能避免选择……这并不能真正回答问题。另外,在重写OP的代码时,为什么不将with语句与WB旁边的WK合并并声明,然后在with块中使用.ACTIVE和.select。否则,这只是效率低下的代码。我在答案中添加注释,添加缺少的部分,以解释需要什么。我不将与合并,因为这不是问题的一部分,并尝试让代码与用户一样。我的Answer满足了用户的要求。但感谢您的反馈。我不得不删除“Set WB=This workbook”行或任何其他“workbook”,因为WKS是在代码前面声明的。但它是有效的!!
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