【问题标题】:Enable Macro button on protected sheet - Excel在受保护的工作表上启用宏按钮 - Excel
【发布时间】:2019-04-20 08:41:08
【问题描述】:

我有一个macro 可以将rows 从一个sheet 复制到另一个。但是,我想保护这个sheet 不被编辑。但是,当我这样做时,我无法让macro 运行。我玩过不同的锁定属性,但它仍然不起作用。

这是我尝试过的:

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

【问题讨论】:

  • 是的,您可以使用保护和取消保护工作表,也可以阻止要保护的单元格...
  • 我尝试将代码放在保护功能之间,但它不起作用
  • 我认为您还必须取消保护 sheet2...并在取消保护工作表之前设置工作表日志和机会...
  • @Ferdinando,现在怎么样了?
  • 我用示例回答了如何使用保护和取消保护工作表...让我更新..

标签: excel vba validation protected


【解决方案1】:

在您的代码之前和之后尝试这个 sn-p 代码

之前: ' sheet1 和 sheet2 受到保护

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 

【讨论】:

  • 谢谢@Ferdinando。我只是想锁定第二张纸。所以只需CHANGE OF NO'S
  • 好的,如果你只想锁定第二张表,你可以删除 for 循环并只写 ws.Unprotect Password:=pwd 和结尾 ws.protected Password:=pwd
  • 设置 sh2=worksheets("CHANGE OF NO'S") sh2.Unprotect Password:=pwd.你的代码 sh2.Protect Password:=pwd
  • 你能用我的整个代码更新你的问题吗?
  • 我不确定哪个部分在哪里。
猜你喜欢
  • 2018-03-11
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 2017-11-10
相关资源
最近更新 更多