Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 为什么ActiveSheet会失败_Vba_Excel - Fatal编程技术网

Vba 为什么ActiveSheet会失败

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

我在一个数据表中循环并生成多个Excel工作表。附加的代码第一次可以完美地工作,但在未设置对象变量或块变量的情况下失败。有人能帮忙吗。谢谢

以下是我的答案:

 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