我在创建项目脚本方面取得了一些成功,该脚本会引发一些对话以获取信息,将其放在工作表(activex框)上然后打印。
当使用VB编辑器找到Sheet1
对象时,我的代码运行正常。但是,我希望它在Excel打开时运行,因此我将其粘贴到thisworkbook
中的workbook_open()
对象中,但没有任何效果。
有人可以向我解释如何让这个脚本在excel打开时运行,或者从workbook_open()
运行时停止接收424错误吗?
调试器不喜欢我的labelbatch
和labelexpiry
个对象(但仅限于thisworkbook
),但它的工作正常。
Private Sub Workbook_Open()
ActiveWorkbook.Sheets("sheet1").Activate
'Clears label fields prior to data entry
labelbatch.Caption = ""
LabelExpiry.Caption = ""
'Auto input of batch code into batch field using input text.
BatchNo = InputBox("Enter batch code", " ")
labelbatch.Caption = BatchNo
'Auto input of expiry date into expiry field using input text.
ExpiryDate = InputBox("Enter expiry date", " ")
LabelExpiry.Caption = ExpiryDate
'Show print dialog box
Application.Dialogs(xlDialogPrint).Show
'Close without saving changes
ActiveWorkbook.Close False
End Sub
答案 0 :(得分:2)
假设labelbatch
和labelExpiry
是工作表上的对象,当代码移动到ThisWorkbook时,VBA不知道在哪里查找这些对象。使用例如
thisworkbook.worksheets("Sheet1").labelbatch
引用它们。
当您使用不包含其父项的方法或属性名称时,VBA将抛出错误或根据上下文使用默认值。例如,对于Cells()
,Range()
等,默认值为Application.ActiveSheet
。这通常是有风险的:如果您以后更改代码(或者即使用户在代码运行时切换工作表),也很难确定活动工作表是什么。最好指定您想要的工作表。
这确实可以更长时间地引用对象,但您始终可以使用With...End With
来帮助提高可读性并节省输入。