受保护的工作表创建错误

时间:2015-03-15 14:49:44

标签: excel vba

我的宏启用工作簿存在一个悖论问题(悖论意味着相同的命令在我的另一个受保护的工作表中工作正常):

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

以下是一个显示非常错误的宏的示例:

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

注意:我添加了Unprotect / Protect命令以消除其他一直存在的错误。就像我说的那样,这两个命令在另一张表中运行得很好,所以我真的无法弄清问题的任何来源。如果有人遇到类似的问题或有任何解决方案的想法,我很乐意帮助你!

1 个答案:

答案 0 :(得分:1)

很长/很难混入评论,所以我会把它作为答案,也许它会对你的问题有所了解。你说:

  

该宏的所有命令都引用'ActiveSheet',

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

  1. 以代号为Sheet1.Unprotect ...
  2. 的工作表的明确引用
  3. 按工作表名称显式引用工作表:Worksheets("SOLL")...
  4. 隐式引用任何工作表在运行时处于活动状态Range("N23:S25")..
  5. 有很多情况会伪造你的断言“该宏的所有命令都引用ActiveSheet。例如,Sheet1可能(或可能不)与Worksheets("SOLL")相同。

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

    也许这个测试会对此事有所启发。修改您的代码如下:

    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. 此按钮位于何处? (在哪个工作表上?)
    2. 按钮事件的代码位于何处?在表单模块或标准模块中?