当select其他工作表或工作簿时,尝试使用ThisWorkbook设置范围值时发生
为什么执行macros时代码不起作用,如果select了不同于sheet1的其他工作表或工作簿? 我需要这种格式的代码,以便稍后将单元格条目中的值更改为variables。 有什么办法可以解决这个问题吗?
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
编辑:进一步澄清评论。 通过离开.
closures一个工作表/范围/单元格,你告诉Excel你想要活动的父母。 Ie Cells(1, 1)
ActiveSheet.Cells(1,1)
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正确build议的variables。
我强烈build议你的对象使用variables。 这使得更容易弄清楚你在做什么,并大大清理你的代码。
您可以使用下面的代码作为模板:
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