下标超出范围重命名工作表后出现错误
我已经做了一个小的项目,其中包括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