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

时间:2012-03-29 10:20:08

标签: excel vba excel-vba

我做了一个小项目,其中包含5个Excel工作表,代码工作正常,我也得到了确切的结果,但如果我将工作表从sheet1重命名为其他名称,我将获得Subscript超出范围错误。

这是什么原因以及需要采取什么措施来克服这个问题。请帮忙。

以下是代码

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

5 个答案:

答案 0 :(得分:12)

代码本身没有任何问题。如果Excel无法找到自重命名以来非常明显的特定工作表,则会出现Subscript out of range错误。例如,如果您将工作表“Sheet3”重命名为“SheetXYZ”,则Excel将无法找到它。

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

enter image description here

这里有一张名为“重命名前的样品名称”

的表格

请考虑此代码

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

相同的代码可以写为

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

现在无论您重命名工作表多少次,上面的代码都将始终有效:)

HTH

西特

答案 1 :(得分:1)

基本问题是,您使用的是通用名称而不是其代号来表示工作表。每当您引用表格(“sheet4”)时,您依赖于Excel中具有该名称的表格。 Codenames是在Visual Basic中分配的名称,因此最终用户不与它们交互/作为开发人员,您可以随时更改Excel名称

使用代码名称的时间大约是9 {40 Excel help video。您会注意到它们的输入速度比Excel名称更快,因为不需要'Sheets()'限定符

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

答案 2 :(得分: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...

答案 3 :(得分: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

这解决了它。

答案 4 :(得分:0)

我今天早些时候遇到了这个错误但是无法使用上面的任何解决方案,但我最终设法自己解决了这个问题。

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

稍后在代码中我尝试使用代码选择新创建的工作表:

Sheets(ValueVariable).Select

我遇到了"下标超出范围"错误,我无法弄清楚原因。我成功之前使用过类似的代码。 然而,我确实通过将变量转换为字符串来解决它。将变量声明为字符串似乎对我没有用。

所以,如果其他人遇到这个错误并希望尝试一些东西,也许这对你有用:

Sheets(Cstr(ValueVariable)).Select