Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 按代号复制工作表并重命名_Vba_Excel - Fatal编程技术网

Vba 按代号复制工作表并重命名

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

我正在尝试按代码名复制图纸,并重命名复制的图纸显示名称和代码名

我已经想到了这个,但它只工作一次,然后它得到了一个错误,因为已经有一个显示名称和代码名的工作表,有一个为什么我可以只添加值+1到名称的结尾

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;)