在选择其他工作表或工作簿时尝试使用ThisWorkbook设置范围值时出现问题

Pat*_*ran 3 excel vba excel-vba

如果除了sheet1之外选择了不同的工作表或工作簿,为什么执行宏时代码不起作用?我需要这种格式的代码,以便稍后我可以将单元格条目中的值更改为变量.有什么方法可以解决这个问题吗?

Sub testhsa()
    ThisWorkbook.Sheets("Sheet1").Range(Cells(1, 1), Cells(2, 2)).Value = 1
End Sub
Run Code Online (Sandbox Code Playgroud)

Cub*_*ase 6

它不起作用,因为您没有限定Cells语句的组件.

您需要以下-注意.Cells:

With ThisWorkbook.Sheets("Sheet1")
    .Range(.Cells(1,1), .Cells(2, 2)).Value = 1
End With
Run Code Online (Sandbox Code Playgroud)

编辑:进一步澄清评论.通过.关闭工作表/范围/单元格,您告诉Excel您想要活动父级.即Cells(1, 1)是一样的ActiveSheet.Cells(1,1),Range("A1:D4")也是一样的ActiveSheet.Range("A1:D4").

With语句有效地告诉Excel,后面的任何内容都与该对象相关联,因此我的3行代码与以下内容完全相同:

ThisWorkbook.Sheets("Sheet1").Range(ThisWorkbook.Sheets("Sheet1").Cells(1,1), ThisWorkbook.Sheets("Sheet1").Cells(2, 2)).Value = 1
Run Code Online (Sandbox Code Playgroud)

这向Excel阐明了无论ActiveWorkbook您希望代码访问代码运行的工作簿中的范围.

最后,如果你经常使用范围,你会希望它们被分配给变量,正如HeadofCatering所正确建议的那样.