如果选择了 sheet1 以外的其他工作表或工作簿,为什么在执行宏时代码不起作用?我需要这种格式的代码,以便稍后将单元格条目中的值更改为变量。有没有办法解决这个问题?
Sub testhsa()
ThisWorkbook.Sheets("Sheet1").Range(Cells(1, 1), Cells(2, 2)).Value = 1
End Sub
它不起作用,因为您没有限定Cells
语句的组成部分。
您需要以下内容 - 注意.
之前的Cells
:
With ThisWorkbook.Sheets("Sheet1")
.Range(.Cells(1,1), .Cells(2, 2)).Value = 1
End With
编辑:进一步澄清评论。通过离开.
工作表/范围/单元格,您是在告诉 Excel 您想要 Active 父级。即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
这向 Excel 阐明,无论ActiveWorkbook
您希望代码访问运行代码的工作簿中的范围是什么。
最后,如果您经常使用范围,您会希望将它们分配给一个变量,正如 HeadofCatering 正确建议的那样。
我强烈建议为您的对象使用变量。它让你更容易弄清楚你在做什么,并显着地清理你的代码。
您可以使用以下代码作为模板:
Sub OperateOnInactiveSheet()
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
Dim writeThis as string
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
Set rng = ws.Range(ws.Cells(1, 1), ws.Cells(2, 2))
writeThis = "foo"
rng.Value = writeThis
End Sub