Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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_Excel_Vba_Validation_Protected - Fatal编程技术网

启用受保护工作表上的宏按钮-Excel

启用受保护工作表上的宏按钮-Excel,excel,vba,validation,protected,Excel,Vba,Validation,Protected,我有一个宏,它将行从一张工作表复制到另一张。但是,我想保护此工作表不被编辑。但是,当我这样做时,我无法运行宏。我已经玩过不同的锁定属性,但仍然不起作用 这就是我所尝试的: Option Explicit Dim pwd As String Dim ws As Worksheet pwd = "password" ws.Unprotect password:=pwd Next ws Sub FilterAndCopy() Dim rng As Range, sht1 As Works

我有一个
,它将
从一张
工作表
复制到另一张。但是,我想保护此
工作表
不被编辑。但是,当我这样做时,我无法运行
。我已经玩过不同的锁定属性,但仍然不起作用

这就是我所尝试的:

Option Explicit

Dim pwd As String
Dim ws As Worksheet
pwd = "password"

ws.Unprotect password:=pwd
Next ws

Sub FilterAndCopy()
    Dim rng As Range, sht1 As Worksheet, sht2 As Worksheet

    Set sht1 = Worksheets("SHIFT LOG")
    Set sht2 = Worksheets("CHANGE OF NO'S")

    sht2.UsedRange.ClearContents

    With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)
        .Cells.EntireColumn.Hidden = False
        If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False

        .AutoFilter Field:=1, Criteria1:="Change of Numbers"

        .Range("A:F, AD:AD, BL:BO").Copy Destination:=sht2.Cells(4, "B")
        .Parent.AutoFilterMode = False

        .Range("F:AD").EntireColumn.Hidden = True
        .Range("AE:BK").EntireColumn.Hidden = True
   End With

    'Go to last cell in column B
    With ActiveSheet
    Range("B5").Select
    Selection.End(xlDown).Select
    End With

End Sub

ws.Protect password:=pwd
Next ws

在代码之前和之后尝试此代码段

之前: '表1和表2受到保护

Dim pwd As String
Dim ws as WorkSheet
pwd = "password"

For Each ws In Worksheets
    ws.Unprotect Password:=pwd
Next ws
“你的代码

之后:

For Each ws In Worksheets
    ws.protect Password:=pwd
Next ws
希望这有帮助

评论后编辑帖子

Option Explicit 

Sub FilterAndCopy() 

Dim pwd As String   
Dim sht1, sht2 As Worksheet 
Dim rng As Range    

pwd = "password"    

Set sht1 = Worksheets("SHIFT LOG")  
Set sht2 = Worksheets("CHANGE OF NO'S") 

sht2.Unprotect Password:=pwd 'unprotect the sheet   
sht2.UsedRange.ClearContents ' clear contents   

With Intersect(sht1.Columns("B:BP"), sht1.UsedRange)    

    .Cells.EntireColumn.Hidden = False  
    If .Parent.AutoFilterMode Then .Parent.AutoFilterMode = False   

    .AutoFilter Field:=1, Criteria1:="Change of Numbers"    

    .Range("A:F, AD:AD, BL:BO").Copy Destination:=sht2.Cells(4, "B")    
    .Parent.AutoFilterMode = False  


    .Range("F:AD").EntireColumn.Hidden = True   
    .Range("AE:BK").EntireColumn.Hidden = True  

End With    

'Go to last cell in column B    
With ActiveSheet    

    Range("B5").Select  
    Selection.End(xlDown).Select    

End With    

sht2.Protect Password:=pwd ' protect the sheet  


End Sub 

是的,你可以使用保护和取消保护表,或者你可以阻止你想要保护的单元格…我已经尝试将代码放在保护功能之间,但它不起作用。我认为你也必须取消保护表2…并在取消保护表之前设置表日志和机会…@Ferdinando,现在看起来怎么样?我用示例回答了如何使用保护和取消保护表…让我不断更新…谢谢@Ferdinando。不过我只想锁上第二张纸。因此,只要
更改否
确定如果您只想锁定第二张工作表,您可以删除for loop并只写ws.Unprotect Password:=pwd和end ws.protectedpassword:=pwdSet sh2=工作表(“更改否”)sh2.Unprotect Password:=pwd。你的代码sh2.Protect Password:=pwdc你能用我的全部代码更新你问题中的这个吗。我不确定哪部分去了哪里。