我是Excel VBA的新手,但设法在工作人员时间表中创建了三个按钮。所有按钮都会根据需要工作,但是,一个特定的按钮会导致随机问题-大约90%的时间都在起作用,但是有时它会导致Excel崩溃或出现错误,例如运行时错误'-2147417848(800 10 108) ':自动化错误调用的对象已与其客户端断开连接。有时,这是一条类似的消息,称对象“范围”的方法“插入”失败。
这是在不同计算机上的不同版本的Excel中发生的。这项任务并不复杂,但是我对自己的VBA知识感到困惑。
用户单击按钮以设置工作表中称为“时间表”的每个格式化行,即,单击“时间表”中的按钮可从sheet4(格式化并包含公式)复制一行并将其插入按钮上方的“时间表”中。
如果有人可以建议其他不会导致Excel崩溃的代码,我将非常感谢-非常感谢!
Sub NewSlot()
' NewSlot Macro used in Timesheet
'
'turn protection off
Worksheets("Sheet4").Unprotect Password:="mypasswd"
Worksheets("Timesheet").Unprotect Password:=" mypasswd "
' select row 8 in sheet4
Sheets("Sheet4").Select
Rows("8").Select
Selection.Copy
' go back to timesheet
Sheets("Timesheet").Select
' insert copied row
Dim r As Range
Set r = ActiveSheet.Buttons(Application.Caller).TopLeftCell
Range(Cells(r.Row, r.Column), Cells(r.Row, r.Column)).Offset(0, 0).Select
Selection.Insert shift:=xlDown
Application.CutCopyMode = False
'turn protection on
Worksheets("Sheet4").Protect Password:=" mypasswd "
Worksheets("Timesheet").Protect Password:=" mypasswd"
End Sub
答案 0 :(得分:0)
如果要使用VBA反复修改受保护的工作表,请取消保护它,然后使用UserInterfaceOnly:= True对其进行一次保护。
sub protectOnce()
worksheets("Timesheet").unprotect password:="mypasswd"
worksheets("sheet4").unprotect password:="mypasswd"
worksheets("Timesheet").protect password:="mypasswd", UserInterfaceOnly:=True
worksheets("sheet4").protect password:="mypasswd", UserInterfaceOnly:=True
end sub
完成此操作后,您将不必取消保护即可使用VBA进行修改。如果由于其他原因必须取消保护它,请使用UserInterfaceOnly:= True重新保护它。
这大大减少了您的NewSlot代码。避免使用“选择并激活”(尤其是跨工作表)是“最佳实践”。
Sub NewSlot()
' select row 8 in sheet4
workSheets("Sheet4").Rows("8").Copy
' go back to timesheet
with workSheets("Timesheet")
' insert copied row
Dim r As Range
Set r = .Buttons(Application.Caller).TopLeftCell
.Cells(r.Row, "A").entirerow.Insert shift:=xlDown
end with
End Sub