【发布时间】:2018-08-17 19:18:45
【问题描述】:
我有一个工作簿,其中包含两个名为“WT-1”和“CL-1”的电子表格(其中可能有更多具有不同名称的电子表格)。
当即“WT-1”处于活动状态时,我希望能够(通过使用分配有宏的按钮)复制此当前(活动)电子表格并按顺序重命名,如 WT-2、WT-3、WT -4 等
我想更改只需要应用于名称包含“WT-”的电子表格,因为名称更改应仅针对新工作表。不应触及所有其他现有工作表。在这里 - 请帮助 :) 它更改了一个新电子表格的名称。如果我的工作簿中的工作表不止 1 个,则它不起作用。
Sub changeWSname()
Dim ws As Worksheet
Dim shtName As Variant
Dim Rng As Range
Dim i As Long
With Sheets("wslist")
Set Rng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp).Address)
shtName = Application.Transpose(Rng)
i = LBound(shtName)
End With
For Each ws In ActiveWorkbook.Worksheets
If Left(Trim(ws.Name), 3) = "WT-" Then
ws.Name = shtName(i)
i = i + 1
End If
Next ws
End Sub
宏假设只是更改新复制的电子表格的名称。因此,如果我复制 WT-2 并创建名为 WT-2(2) 的新工作表并运行宏 - 它将起作用并将新工作表名称更改为 WT-1(是“wslist”范围内的名字)。这似乎没问题。但是,如果我的工作簿中有任何其他电子表格(活动工作表和已复制的新工作表除外)它不起作用并给我一个错误 1004 -“无法将工作表重命名为与另一个工作表相同的名称,引用的对象库或 Visual Basic 引用的工作簿” 当我点击 de-bag 时,我发现它突出显示:ws.Name = shtName(i)
【问题讨论】:
-
因为这不是免费的代码编写服务,请edit您的问题并添加您已经尝试过的代码。解释你的代码实际上做了什么,它应该做什么,你在哪里卡住了或者你在哪里出错了。
-
嗨,很抱歉 - 我在这个(或任何)论坛上很新,这是我的第一个帖子。这是我尝试使用的宏:
-
将 ws 作为 ActiveWorkbook.Worksheets 中每个 ws 的工作表如果 ws.Name Like "WT-*" Then Sheets("wslist").UsedRange.Copy ws.Range("A1").PasteSpecial Paste:=xlPasteAll End If Next ws Worksheets("addresses").Select End Sub
-
我做到了 - 希望现在可以了吗?
-
现在您只需要解释该代码有什么问题吗?你有任何错误吗?它做了什么而不是你所期望的? “它不起作用。”不是描述。您拥有哪些工作表名称的列表(在您运行宏之前,以及您在运行它之后的期望)会很好地看到差异。还有一张
wslist的截图也不错。
标签: excel rename spreadsheet vba