excel - 运行时错误 '1004' : Select method of Range Class failed using ThisWorkbook

标签 excel vba

在运行脚本的过程中,如果我手动从包含宏的工作簿中删除焦点,则会收到引用的错误。如果我不点击任何东西,它就可以正常工作。仅当我尝试将“输入”表中的选择放回 A1 时,脚本才会出错。断点位于以下行:

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

如果我调试并将焦点放回到宏工作表上,脚本将顺利完成。上一行:

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

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

最佳答案

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

关于excel - 运行时错误 '1004' : Select method of Range Class failed using ThisWorkbook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36165887/

相关文章:

vba - 在 VBA Excel 中搜索非数字值

excel - 根据用户输入在单元格中输入条件字符串

regex - 将 Regex 实现到 Access VBA 中以解决密码复杂性

excel - 计算单个单元格中的数字数量

Excel VBA 组合框 OnExit 事件

python - 将Excel公式转换为python

excel - 如何在VBA中从韩语字符串中提取字符

java - 在 Java 中从 Excel xlsx 转换为 xls

r - 如何在ggplot中任意分组条形

excel - 从项目集合中调用项目