当工作表名称是数字时,索引号/工作表名称与variables混淆

我可能会发现一个新的问题! 我试图select基于工作表名称的工作表,使用名称variables,因为这是一个循环的所有部分。 但是当工作表的名字是一个数字的时候,我遇到了麻烦,因为如果我有,例如name = 5,那么Worksheets(name)给了我索引号5工作表和Worksheets(“name”)当然会查找一个名为“名称”。

我可以做一个解决方法,为每个工作表的名称添加一个字母,这样就不会将其视为数字,然后再删除这些字母,但有没有更好的方法?

Sub RenameFiles() Dim source, old_filename, old_tab, new_filename As String Dim i As Integer source = Range("path").Value For i = 1 To Range("total_file_number").Value old_filename = Worksheets("Import and combine").Cells(3 + i, 2).Value old_tab = Worksheets("Import and combine").Cells(3 + i, 3).Value new_filename = Worksheets(old_tab).Cells(1, 1).Value 'If old_tab is a number, VBA treats Worksheets(old_tab) as looking up a worksheet by index number rather than name If Left(Worksheets(old_tab).Cells(1, 1).Value, 1) = "*" Then new_filename = Right(new_filename, Len(new_filename) - 2) 'removes asterisk from name new_filename = Replace(new_filename, ">", "") 'removes > from name, since > can't be used in file names Worksheets(old_tab).Name = new_filename Worksheets("Import and combine").Cells(3 + i, 3).Value = new_filename Name source & "\" & old_filename As source & "\" & new_filename Next i End Sub 

你的问题是由这一行引起的:

 Dim source, old_filename, old_tab, new_filename As String 

…虽然它不会显示自己,直到您尝试访问工作表集合。

这是一个非常普遍的错误。 上一行中Stringtypes的ONLYvariables是最后一个variables。 其他每个都是Varianttypes。

当赋值给variablesold_tab任何数字值将被存储为一个数字,而不是一个string。 而问题是Worksheets集合需要一个string值作为返回正确的工作表的关键。

如果上面这行中的每个variables都应该是Stringtypes,那么执行下面的操作:

 Dim source As String, old_filename As String, old_tab As String, new_filename As String 

…现在, old-tab是一个string,它的值将正常工作,作为工作表集合的关键。