excel - 当工作表名称为数字时,索引号/工作表名称与变量混淆

标签 excel vba naming worksheet

我可能发现了一个新问题!我正在尝试根据工作表的名称选择工作表,并使用变量作为名称,因为这都是循环的一部分。但是当工作表的名称是一个数字时我会遇到麻烦,因为如果我有,比如说,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

...尽管在您尝试访问 Worksheets 集合之前它不会表现出来。

这是一个非常常见的错误。上一行中唯一一个 String 类型的变量是最后一个。其他每个都是 Variant 类型。

分配给变量 old_tab 时任何数值都将存储为数字,而不是字符串。问题在于 Worksheets 集合需要一个字符串值作为返回正确工作表的键。

如果上一行中的每个变量都应该是 String 类型,那么执行以下操作:
Dim source As String, old_filename As String, old_tab As String, new_filename As String

...现在 old-tab是一个字符串,它的值将作为 Worksheets 集合的键正常工作。

关于excel - 当工作表名称为数字时,索引号/工作表名称与变量混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33784855/

相关文章:

mysql - RecordSet 上的 GetRows 不会存储 Access DB 中的文本列

vba - Excel VB 错误 Application.Undo & ActiveSheet.Protect

c# - 将大型数据表流出到 excel 文件

WCF 命名指南/最佳实践

javascript - 是否应该使用数组名称和索引来命名 JavaScript 对象?

excel - 将 xlsm 保存为 xlsx 后,为什么打开新文件会关闭旧文件?

Excel VBA - 链接来自不同工作表的行

vba - 在 if 函数中添加工作日

vba - 从 Web 导入 VBA 模块

amazon-web-services - 将 StackName 添加到 Cloudformation 资源之前