在运行脚本的过程中,如果我从包含宏的工作簿中手动删除焦点,则会出现引用的错误。如果我没有点击任何它没有问题的工作。只有在我尝试从“输入”表单中将选择放回A1
时才会出现脚本错误。断点位于以下行:
ThisWorkbook.Sheets("Input").Range("A1").Select
如果我调试并将焦点放回宏工作表上,则脚本完成没有问题。上一行:
ThisWorkbook.Sheets("Input").Cells.Delete
运行没有错误所以我猜测它的范围超出了范围,但不太明白为什么它应该由之前的范围表示法定义。
有人可以解释为什么这条线超出范围? ThisWorkbook
不应该明确定义我的代码引用的工作簿吗?非常感谢任何指导。
答案 0 :(得分:7)
它与ThisWorkbook
的引用根本没有任何关系。您无法在不活动的对象中选择范围。请考虑此代码,它显示相同的错误:
Private Sub OneOhOhFour()
'Executing with Book1.xlsm active and Book2.xlsx open.
Dim wb As Workbook
Set wb = Application.Workbooks("Book2.xlsx")
Debug.Print ThisWorkbook.Name
'Outputs 'Book1.xlsm' to Immediate window.
wb.Sheets("Sheet1").Range("A1").Select 'Error 1004
End Sub
与工作表相同:
Private Sub OneOhOhFourVTwo()
'Starting on anywhere but Sheet2 gives an error.
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet2")
ws.Range("A1").Select 'Error 1004.
End Sub
简单的解决方案是在您选择对象之前激活对象:
Private Sub NoOneOhOhFour()
Dim wb As Workbook
Set wb = Application.Workbooks("Book2.xlsx")
wb.Activate
wb.Sheets("Sheet1").Range("A1").Select 'No error.
End Sub
更好的是使用引用并尝试完全避免使用Selection和Active *对象。