Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 添加运行工作表的安全性\u即使选择了多张工作表,也要取消对循环槽工作表的保护_Excel_Vba - Fatal编程技术网

Excel 添加运行工作表的安全性\u即使选择了多张工作表,也要取消对循环槽工作表的保护

Excel 添加运行工作表的安全性\u即使选择了多张工作表,也要取消对循环槽工作表的保护,excel,vba,Excel,Vba,大家好,我又回来了 简单的问题,让我的代码尽可能thicc。Im运行2个宏,保护和取消保护,该宏通过纸张计数循环,并根据需要保护或取消保护所有纸张;这是一个全方位的潜艇,我从不同的wb在不同的场合打电话,但它还不是每一个防弹 当我手动运行它并选择多张图纸时,我遇到了一个错误(例如,它试图在多张选择上每张图纸运行一个循环,多张选择不是一张图纸,这会造成objet问题) 是否有办法添加非内存/耗时的行以避免此错误 Sub UnprotectWorksheets() Dim i As Integer

大家好,我又回来了

简单的问题,让我的代码尽可能thicc。Im运行2个宏,保护和取消保护,该宏通过纸张计数循环,并根据需要保护或取消保护所有纸张;这是一个全方位的潜艇,我从不同的wb在不同的场合打电话,但它还不是每一个防弹

当我手动运行它并选择多张图纸时,我遇到了一个错误(例如,它试图在多张选择上每张图纸运行一个循环,多张选择不是一张图纸,这会造成objet问题)

是否有办法添加非内存/耗时的行以避免此错误

Sub UnprotectWorksheets()
Dim i As Integer
' Insert line that says "select whatever sheet" so it cancel inital multiselect?
' (I dont want to use select plz halp :( )
For i = 1 To ActiveWorkbook.Worksheets.Count
Worksheets(i).Unprotect
Next i
End Sub

我试图避免使用select;——59分钟前拍普拉提

它不会取消多页选择,我想我必须坚持选择一张工作表——30分钟前的Patates Pilées

这里有一种不使用
的方法。选择
以选择工作表。看看这个例子。我们在这里所做的是在取消保护之前隐藏和取消隐藏工作表(如果未隐藏)。这也将自动取消选择

Sub UnprotectWorksheets()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        Select Case ws.Visible
        Case xlSheetVisible
            On Error Resume Next
            With ws
                .Visible = xlSheetHidden
                .Visible = xlSheetVisible
                .Unprotect
            End With
            On Error GoTo 0
        End Select
    Next ws
End Sub

注意:如果工作簿结构受到保护,此方法将失败。

添加图片以显示步骤您在何处添加了这些图片。我刷新了页面,但我看不到任何图片…抱歉,我在实际更新之前键入了,因为我认为我足够快,现在有转换我的答案到评论。。。在
工作表(i)之前添加一行
Application.GoTo Reference:=工作表(i).Range(“A1”)
。现在请取消保护。这种方法的几个问题1。如果在用户无法手动选择单元格的情况下保护工作表,则上述代码将失败。2.如果说第1行是隐藏的(因为我们正在选择A1),那么代码将失败。不起作用,它不会取消多页选择,我猜我必须坚持选择工作表。我知道这会起作用:我试图避免使用select;我等了一会儿,看看是否有人有更好的,但我可能会满足于这一点!
Sub UnprotectWorksheets()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        Select Case ws.Visible
        Case xlSheetVisible
            On Error Resume Next
            With ws
                .Visible = xlSheetHidden
                .Visible = xlSheetVisible
                .Unprotect
            End With
            On Error GoTo 0
        End Select
    Next ws
End Sub