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

我已经做了一个小的项目,其中包括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 

代码本身没有任何问题。 如果Excel无法find一个特定的表格,那么您将会得到下Subscript out of range错误。 例如,如果您将工作表“Sheet3”重命名为“SheetXYZ”,则Excel将无法find它。

避免这类错误的唯一方法是使用表单的CODENAME。 请参阅快照

在这里输入图像说明

在这里,我们有一个名称为“重命名之前的样本名称”

所以考虑这个代码

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

相同的代码可以写成

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

现在不pipe你重命名表格多less次,上面的代码总是会工作:)

HTH

希德

基本的问题是,你使用的是通用名称而不是代号。 无论何时您参考表格(“sheet4”),您都依赖于Excel中具有该名称的表单。 代码名称是在Visual Basic中分配的名称,因此最终用户不会与其交互/作为开发人员,您可以随时更改Excel名称

在Excel帮助video中,使用代码名称在9:40左右。 您将注意到,它们比Excel名称更快,因为不需要“表格()”限定符

我在代码示例中看不到表格(“Sheet1”),但可以通过查找/replace例如“表格(Sheet2)”的所有示例,快速切换到所有表格的代码名称。 与“Sheet2”。

请参阅每个工作表的代码名称。 它们默认设置为Sheet1,Sheet2等,但是如果需要,可以在“属性”窗口中对它们进行重命名。 这样你就可以像下面这样编写你的代码,不pipe你是什么名字。

 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... 

我想分享我的经验来解决这个问题。 这是我承诺的错误:

 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 

这解决了它。

我今天早些时候遇到这个错误,但不能使用上面的任何解决scheme,但我最终设法自己解决。

我的情况是列A中包含一个列表。对于每个具有值的单元格,我将该值存储在一个variables中,创build一个新工作表并根据存储在variables中的值命名工作表。

稍后在代码中,我尝试使用代码来select新创build的工作表:

 Sheets(ValueVariable).Select 

我遇到了“下标超出范围”的错误,我不知道为什么。 我以前使用类似的代码成功。 然而,我通过将这个variables作为一个string来解决。 将variables声明为一个string似乎不适用于我。

所以,如果有其他人遇到这个错误,想要尝试一下,也许这会适合你:

 Sheets(Cstr(ValueVariable)).Select