运行时错误'1004':使用ThisWorkbook选择Range类失败的方法

nba*_*yly 4 excel vba excel-vba

在运行脚本的过程中,如果我从包含宏的工作簿中手动删除焦点,我会得到引用的错误.如果我没有点击任何它没有问题的工作.只有在我尝试将选择放回A1"输入"表单时才会出现脚本错误.断点位于以下行:

ThisWorkbook.Sheets("Input").Range("A1").Select
Run Code Online (Sandbox Code Playgroud)

如果我调试并将焦点放回宏工作表上,则脚本完成没有问题.上一行:

ThisWorkbook.Sheets("Input").Cells.Delete
Run Code Online (Sandbox Code Playgroud)

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

Com*_*ern 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 
Run Code Online (Sandbox Code Playgroud)

与工作表相同:

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
Run Code Online (Sandbox Code Playgroud)

简单的解决方案是在您选择对象之前激活该对象:

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
Run Code Online (Sandbox Code Playgroud)

更好的是使用引用并试图完全避免使用Selection和Active*对象.