保护工作表后丢失Excel剪贴板数据

时间:2018-04-23 22:40:59

标签: excel vba excel-vba

是否可以将VBA运行到Hide&取消隐藏Excel列而不在VBA中运行Unprotect工作表功能(假设工作表默认受保护)?

当保护工作表并允许“格式列”时,即使工作表受到保护,我也可以自由隐藏和取消隐藏我想要的任何列。出于某种原因,VBA忽略了这一点,虽然Excel似乎允许隐藏/取消隐藏功能,但宏会报告错误并要求删除表单保护。

如果没有其他特殊功能,这甚至不会成为问题,因为当从Excel复制到剪贴板并且宏以Protect表功能结束时,复制的数据最终会丢失。再次 - 不是手动完成也不会发生的事情。

有什么想法吗?我想其中任何一件事都可以解决我的主要问题。

编辑:抱歉,忘了发布VBA代码。现在已经很晚了:

Sub Copy()
'
' Copy Macro
'

'
    ActiveSheet.Unprotect
    ActiveSheet.Range("$A$4:$I$290").AutoFilter Field:=10, Criteria1:="<>"
    Columns("E:E").EntireColumn.Hidden = False
    Columns("D:D").EntireColumn.Hidden = False
    Columns("C:C").EntireColumn.Hidden = False
    Columns("H:H").EntireColumn.Hidden = True
    Application.Goto Reference:="Range"
    Selection.Copy
    Columns("H:H").EntireColumn.Hidden = False
    Columns("E:E").EntireColumn.Hidden = True
    Columns("D:D").EntireColumn.Hidden = True
    Columns("C:C").EntireColumn.Hidden = True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
    , AllowFormattingColumns:=True, AllowFiltering:=True, _
    AllowUsingPivotTables:=True
    ActiveWindow.LargeScroll Down:=-2
End Sub

谢谢!

1 个答案:

答案 0 :(得分:1)

Protect the worksheet使用UserInterfaceOnly:= True参数,您可以在VBA中执行任何操作,同时正常限制用户。

sub protectOnce()
    worksheets("sheet1").unprotect password:="123"
    worksheets("sheet1").protect password:="123", UserInterfaceOnly:=True
end sub