Vba 按代号复制工作表并重命名
我正在尝试按代码名复制图纸,并重命名复制的图纸显示名称和代码名 我已经想到了这个,但它只工作一次,然后它得到了一个错误,因为已经有一个显示名称和代码名的工作表,有一个为什么我可以只添加值+1到名称的结尾Vba 按代号复制工作表并重命名,vba,excel,Vba,Excel,我正在尝试按代码名复制图纸,并重命名复制的图纸显示名称和代码名 我已经想到了这个,但它只工作一次,然后它得到了一个错误,因为已经有一个显示名称和代码名的工作表,有一个为什么我可以只添加值+1到名称的结尾 Sub TESTONE() Dim MySheetName As String MySheetName = "Rename Me" VBA_Copy_Sheet.Copy After:=ActiveSheet ActiveSheet.Name = MySheetName ActiveShe
Sub TESTONE()
Dim MySheetName As String
MySheetName = "Rename Me"
VBA_Copy_Sheet.Copy After:=ActiveSheet
ActiveSheet.Name = MySheetName
ActiveSheet.Tab.ColorIndex = 3
Dim wks As Worksheet
Set wks = ActiveSheet
ThisWorkbook.VBProject.VBComponents(wks.CodeName).Name = "BidSheet"
End Sub
但愿对你有帮助
Sub TESTONE()
Dim MySheetName As String
Dim MyCodeName As String
Dim wks As Worksheet
MySheetName = "Rename Me"
MyCodeName = "BidSheet"
If VBA_Copy_Sheet = Empty Then
Set VBA_Copy_Sheet = ActiveSheet
End If
VBA_Copy_Sheet.Copy After:=ActiveSheet
ActiveSheet.Name = GetNewSheetName(MySheetName, 0)
ActiveSheet.Tab.ColorIndex = 3
Set wks = ActiveSheet
MyCodeName = GetNewCodeName(MyCodeName, 0)
ThisWorkbook.VBProject.VBComponents(wks.CodeName).Name = MyCodeName
End Sub
Function GetNewSheetName(ByVal newName As String, ByVal n As Integer) As String
Dim ws As Worksheet
Dim modifiedName As String
modifiedName = newName & n
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = modifiedName Then
n = n + 1
modifiedName = GetNewSheetName(newName, n)
Exit For
End If
Next
GetNewSheetName = modifiedName
End Function
Function GetNewCodeName(ByVal newName As String, ByVal n As Integer) As String
Dim ws As Worksheet
Dim modifiedName As String
modifiedName = newName & n
For Each ws In ActiveWorkbook.Worksheets
If ws.CodeName = modifiedName Then
n = n + 1
modifiedName = GetNewCodeName(newName, n)
Exit For
End If
Next
GetNewCodeName = modifiedName
End Function
您可以将计数器存储在范围名称中,并使用该名称增加工作表,即:
Dim strName As String
Dim strCnt As String
Dim MySheetName As String
strName = "SheetCnt"
On Error Resume Next
strCnt = ActiveWorkbook.Names(strName).Value
On Error GoTo 0
If Len(strCnt) = 0 Then
ActiveWorkbook.Names.Add strName, 1
Else
strCnt = Replace(strCnt, "=", Chr(32)) + 1
ActiveWorkbook.Names(strName).RefersTo = strCnt
End If
MySheetName = "Rename Me " & strCnt
不,没有理由。只需增加1,然后像您猜测的那样将其附加到字符串中,您就可以循环浏览任意数量的工作表。在复制工作表之前,为什么不检测工作表名称?子FnGetSheetsName()Dim MAINWORKING As WORKING Set MAINWORKING=ActiveWORKING For i=1到mainWORKING.Sheets.count'我们可以将所有名称放入一个数组中,这里我们将打印工作表2中的所有名称mainWORKING.Sheets(“Sheet2”).Range(“A”&i)=mainWORKING.Sheets(i).下一个我结束的名字Sub@Tim值+1不起作用,因为它复制一张工作表,然后在第一次复制工作表的末尾加上1,但当您再次尝试复制工作表时,它只会在复制的工作表中加上1,使其与第一份工作表同名。@luke,这就是我说的增量的原因<代码>值=值+1;)