【发布时间】:2017-03-21 09:17:38
【问题描述】:
我在 VBA 模块中有以下示例代码:
Sub My_Code()
ThisWorkbook.Sheets("Main").Range("A1") = "Main Data"
ThisWorkbook.Sheets("Secondary").Range("A2").Copy Sheets("Main").Range("B2")
End Sub
为了保护工作表,主要和次要,我在 VBA 的 Thisworkbook 中放入了以下代码:
Private Sub Workbook_Open()
Sheets("Main").Protect Password:="Mypassword", UserInterfaceOnly:=True
Sheets("Secondary").Protect Password:="Mypassword", UserInterfaceOnly:=True
End Sub
当我运行 My_Code() 时出现错误:
""运行时错误'1004' 您尝试更改的单元格或图表位于受保护的工作表上。 要进行更改,请单击“审阅”选项卡中的“取消保护工作表”(您可能需要密码)。""
这会调试到ThisWorkbook.Sheets("Secondary").... 行。
当我手动取消保护主工作表时,代码运行。任何想法为什么我不能让 Main 受到保护?我是不是忘记了什么?
【问题讨论】:
-
也许这会让你开始:Thisworkbook.Sheets("Main").Range("B2").Value = ThisWorkbook.Sheets("Secondary").Range("A2").Value
-
@jkpieterse 这确实解决了问题,但仅适用于此代码,如果我将此修复替换为我的主代码,我会在我使用的代码上有条件地收到“应用程序定义或对象定义错误”格式化单元格。我的实际程序只有几 1000 行,所以我不能输入。你知道为什么保护代码会阻止它正常运行吗?
-
这里要注意的一点..如果您按照自己的方式设置密码,如果失败也不会出错。因此,如果密码当前未设置为“MyPassword”,则整行将被忽略并且您不会被告知。再加上当工作簿被保存、关闭和重新打开时,它会删除保护的
UserInterfaceOnly部分,很可能UserInterfaceOnly没有设置为您认为的True。检查您的代码中的其他地方是否没有设置其他替代密码或保护措施,并且用户没有覆盖它。 -
@CLR 感谢您的提醒。我浏览了我的代码,我的代码中没有其他密码或保护措施。我的代码的密码部分放在
Private sub Workbook_Open()下的工作簿中,该工作簿在打开工作簿时运行,因此每次打开工作簿时都将UserInterfaceOnly设置为true。 -
我还看到人们使用
Workbook.Activate事件而不是Workbook.Open。除了他们与您有类似问题外,我从来没有研究过为什么,但这可能是值得尝试的?