我的宏启用工作簿存在一个悖论问题(悖论意味着相同的命令在我的另一个受保护的工作表中工作正常):
一旦我开始保护我的工作表,命令“.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命令以消除其他一直存在的错误。就像我说的那样,这两个命令在另一张表中运行得很好,所以我真的无法弄清问题的任何来源。如果有人遇到类似的问题或有任何解决方案的想法,我很乐意帮助你!
答案 0 :(得分:1)
很长/很难混入评论,所以我会把它作为答案,也许它会对你的问题有所了解。你说:
该宏的所有命令都引用'ActiveSheet',
但这不一定是真的。观察您用来引用工作表的三种不同结构:
Sheet1.Unprotect ...
Worksheets("SOLL")...
Range("N23:S25")..
有很多情况会伪造你的断言“该宏的所有命令都引用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
您还可以添加以下信息,这些信息可能对提供帮助的人有用: