【发布时间】:2016-10-11 18:24:30
【问题描述】:
我有一个问题,我有一个基本工作表,行,对于我创建新工作表的每一行,每个新工作表在单元格 A3 中都有我想用作新活动工作表的名称的值。问题从这里开始,因为在 excel 中,工作表的名称只能有 31 个标志,A3 中的一些值由于只切割 31 个标志而重复。例如,我在一张纸上有用于商业和银行的 A3 技术设备,在下一张有用于商业和私人的技术设备。因此,如果我使用 31 个标志,两张纸将具有相同的名称,并且我收到一个错误,即该纸的名称已被使用。在我的循环中,我浏览了 1000 行,并检查了重复问题是否会出现 700 次,因此我正在考虑从左侧切割 28 个数字而不是 31,并添加到名称编号以使每张纸具有唯一名称。部分代码(只是改名的部分):
Dim name As String
Dim i As Integer
Dim number_repeated As Integer
Dim name_signs As Integer
name = ActiveSheet.Range("a3")
name = Left(name, 31)
For i = 1 To Worksheets.Count
If name <> Worksheets(i).Name Then
ActiveSheet.Name = name
Else
name_signs = ActiveSheet.Range("a3")
name_signs = Left(name_signs, 28)
name_signs = name_signs + CStr(number_repeated)
ActiveSheet.Name = name_signs
number_repeated = 1
number_repeated = number_repeated + 1
End If
Next i
【问题讨论】:
-
为什么不在 A 列有一个隐藏的工作表,在 A 列有真实的页面名称,在 B 列有一个代码,比如说,每个单词的首字母?然后,您只需将工作表命名为代码而不是真实姓名。例如。
Monthly Report Of Something Really Important作为真实姓名,然后MROSRI作为代码(和工作表名称)。然后在您的单元格A3中,您可以使用VLOOKUP来获得正确的值。 -
是否有任何功能可以像您在示例中那样取出第一个字母?或者你知道怎么写吗?我对 VBA 很陌生,但是手动操作 1000 个案例会花费太多时间。
-
检查我的回答,看看它是否对你有帮助;)
-
取第一个字母很简单:Left(str,1)。
-
这个我知道,但它只需要第一个单词的第一个字母。