当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