我做了一个小项目,其中包含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
答案 0 :(得分:12)
代码本身没有任何问题。如果Excel无法找到自重命名以来非常明显的特定工作表,则会出现Subscript out of range
错误。例如,如果您将工作表“Sheet3”重命名为“SheetXYZ”,则Excel将无法找到它。
避免这类错误的唯一方法是使用工作表的CODENAME。请参见快照
这里有一张名为“重命名前的样品名称”
的表格请考虑此代码
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