受保护的工作表创build错误

我有一个悖论问题与我的macros启用工作簿(悖论意味着相同的命令工作得很好,在另一个受保护的工作表):

一旦我开始保护我的工作表,命令“.Interior.Color”和“.Borders(xlEdgeRight).LineStyle”将继续产生“应用程序定义或对象定义的错误”

下面是一个显示非常错误的macros的例子:

Private Sub Con1_Click() Sheet1.Unprotect Password:="bla" Worksheets("SOLL").Range("N23:S25").ClearContents Range("N23:S25").Interior.Color = RGB(225, 225, 225) Range("P23:Q25").Borders(xlEdgeRight).LineStyle = xlNone Sheet1.Protect Password:="bla" End Sub 

注意:我添加了解除保护/保护命令,以摆脱其他发生的错误。 就像我说的那样,这两个命令在另一个表单中工作得很好,所以我真的无法弄清楚问题的根源。 如果有人遇到过类似的问题,或者有任何解决scheme,我会很高兴的帮助!

太长/容易混淆的评论,所以我会把这个作为答案,也许这会对你的问题有所了解。 你说:

该macros的所有命令都引用“ActiveSheet”,

但是这不一定是真的。 观察你用来引用工作表的三种不同的结构:

  1. 通过代码名显式引用工作表: Sheet1.Unprotect ...
  2. 按工作表名称显式引用工作表: Worksheets("SOLL")...
  3. 隐式引用任何工作表在运行时处于活动状态Range("N23:S25")..

在很多情况下,你的声明是伪造的,“所有macros指令都是指ActiveSheet例如, Sheet1可能(也可能不)和Worksheets("SOLL")

所以,这个代码可能是指多达三个不同的工作表对象! 只有隐式的,不合格的Range语句可以保证引用ActiveSheet

也许这个testing会揭示一些事情。 修改你的代码如下:

 Private Sub Con1_Click() MsgBox "Sheet1.Name is: " & Sheet1.Name MsgBox "Worksheets("SOLL").CodeName is: " & Worksheets("SOLL").Codename MsgBox "The activesheet is: " & ActiveSheet.Name End Sub 

您还可以添加以下信息,这些信息可能对提供帮助有帮助:

  1. 这个button位于哪里? (在哪个工作表上?)
  2. button事件的代码位于哪里? 在一个表单模块或标准模块?