运行时错误'1004':使用ThisWorkbookselect范围类的方法失败

在运行脚本的过程中,如果我手动从包含macros的工作簿中删除焦点,我会得到错误引用。 如果我不点击任何东西,它没有问题。 只有当我试图从“input”工作表中select回A1脚本错误。 断点在以下行:

 ThisWorkbook.Sheets("Input").Range("A1").Select 

如果我debugging并将焦点放回到macros工作表上,那么脚本完成而没有问题。 上一行:

 ThisWorkbook.Sheets("Input").Cells.Delete 

运行没有错误,所以我猜测它的范围超出了范围,但不太明白为什么,因为它应该由以前的范围符号定义。 有人可以解释为什么这条线是超出了范围? ThisWorkbook不应该明确定义我的代码引用的工作簿? 任何指导,非常感谢。

它根本就没有任何关于ThisWorkbook的参考。 你不能在一个没有激活的对象中select一个范围。 考虑这个代码,它展示了同样的错误:

 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 

简单的解决scheme是在你select之前激活对象:

 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 *对象。