重命名工作表后出现下标超出范围错误

6

我完成了一个小项目,其中包含5个Excel表格,代码运行良好,也可以得到准确的结果,但是如果我将表格从sheet1重命名为其他名称,就会出现“下标超出范围”错误。

这是什么原因,需要做什么来克服这个问题。请帮忙。

以下是代码

Public  Sub amount_final()

Dim Row1Crnt As Long
Dim Row2Crnt As Long


With Sheets("sheet4")
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row
End With

Row1Crnt = 2
With Sheets("sheet3")
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row
End With

请同时发布您的代码 - Chetter Hummin
5个回答

12

代码本身没有问题。如果Excel无法找到某个特定的工作表,将会出现“下标超出范围”的错误,这很明显因为你已经对它进行了重命名。例如,如果你将工作表“Sheet3”重命名为“SheetXYZ”,那么Excel就无法找到它。

避免这种错误的唯一方法是使用工作表的CODENAME。参见快照

enter image description here

这里我们有一个名为“Sample Name before Renaming”的工作表

所以考虑一下这段代码

Sheets("Sample Name before Renaming").Range("A1").Value = "Blah Blah"

相同的代码可以写成:

Sheet2.Range("A1").Value = "Blah Blah"

现在,无论你重命名工作表多少次,上述代码始终有效 :)

希望这能帮到你。

Sid


谢谢Siddharth,解释得很好很简单。 - neobee

1

基本问题在于您在引用工作表时使用的是常用名称而不是代码名称。每当您引用Sheets("sheet4")时,您都依赖于Excel中工作表具有该名称。代码名称是在Visual Basic中分配的名称,因此最终用户不与它们进行交互/作为开发人员,您可以随时更改Excel中的名称

关于使用代码名称的内容,请参考Excel帮助视频中的9:40左右。您会注意到它们比Excel中的名称更快输入,因为不需要'Sheets()'限定符

在您的代码示例中,我没有看到Sheets("Sheet1"),但您可以通过查找/替换所有例如'Sheets("Sheet2").'的示例,将其快速切换到所有工作表的代码名称 'Sheet2.'


0

我想分享一下我解决这个问题的经验。以下是我犯的错误:

Dim DailyWSNameNew As String
lastrow = Sheets("DailyWSNameNew").Range("A65536").End(xlUp).Row + 1 -- This is wrong as I included a placeholder worksheet name in quotes

更正:

lastrow = Sheets(DailyWSNameNew).Range("A65536").End(xlUp).Row + 1

问题已解决。


0
今天早些时候我遇到了这个错误,但是无法使用上面的任何解决方案,不过最终我还是自己解决了它。
我的情况是,我有一个包含在A列中的列表。对于每个具有值的单元格,我将该值存储在变量中,创建一个新工作表,并根据存储在变量中的值命名该工作表。
稍后在代码中,我尝试使用以下代码选择新创建的工作表:
Sheets(ValueVariable).Select

我遇到了“下标超出范围”的错误,但我无法弄清楚原因。我以前使用过类似的代码并成功运行。 然而,我通过将变量转换为字符串来解决了这个问题。将变量声明为字符串对我似乎没有起作用。
所以,如果其他人遇到此错误并想尝试一些东西,也许这个方法适合你:
Sheets(Cstr(ValueVariable)).Select

0

使用它们的代码名称来引用每个工作表。它们默认设置为Sheet1、Sheet2等,但如果需要,您可以在每个工作表的属性窗口中重命名它们。这样,您可以像下面这样编写代码,而不管您给工作表命名为什么。

With Sheet1
Row1Last = .Cells(Rows.Count, "B").End(xlUp).Row
End With

Row1Crnt = 2
With Sheet2
Row2Last = .Cells(Rows.Count, "B").End(xlUp).Row
End With

etc...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接