Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 将所有工作表重命名为Sheet1中每个单元格的值_Vba_Excel - Fatal编程技术网

Vba 将所有工作表重命名为Sheet1中每个单元格的值

Vba 将所有工作表重命名为Sheet1中每个单元格的值,vba,excel,Vba,Excel,我很惊讶,我没能在网上找到解决方案。有人问过几个类似的问题,但涉及到更复杂的部分。 这确实是为了准备工作手册。Sheet1有一个章节编号列表。我需要它将工作表重命名为每个部分的编号。他们将需要保持有序,并在需要时创建更多的图纸。每个章节号只留下一张纸 这是我找到的一些代码,但我并不完全理解。它看起来很接近,我只需要修改它以使用ColA,而不是标题为“Last_Name”的列 Sub-MakeSectionSheets() Dim RLN列作为范围 变暗rCell As范围 将sh设置为工作表 将

我很惊讶,我没能在网上找到解决方案。有人问过几个类似的问题,但涉及到更复杂的部分。 这确实是为了准备工作手册。Sheet1有一个章节编号列表。我需要它将工作表重命名为每个部分的编号。他们将需要保持有序,并在需要时创建更多的图纸。每个章节号只留下一张纸

这是我找到的一些代码,但我并不完全理解。它看起来很接近,我只需要修改它以使用ColA,而不是标题为“Last_Name”的列

Sub-MakeSectionSheets()
Dim RLN列作为范围
变暗rCell As范围
将sh设置为工作表
将shDest变暗为工作表
Dim rNext作为范围
Const sNUMB As String=“Last_Name”
Set sh=ThisWorkbook.Sheets(“Sheet1”)
设置rLNColumn=sh.UsedRange.Find(sNUMB,xlValues,xlWhole)
“一定要找到什么
如果不是rLNColumn,那就什么都不是了
'遍历列中的每个单元格
对于Intersect中的每个rCell(rLNColumn.EntireColumn,sh.UsedRange)。单元格
'跳过标题和空单元格
如果不是IsEmpty(rCell.Value)和rCell.Address rLNColumn.Address,那么
'查看工作表是否已存在
出错时继续下一步
设置shDest=sh.Parent.Sheets(rCell.Value)
错误转到0
“如果它不存在,就创造它
如果shDest不算什么,那么
设置shDest=sh.Parent.Worksheets.Add
shDest.Name=rCell.Value
如果结束
'查找下一个可用行
设置rNext=shDest.Cells(shDest.Rows.count,1).End(xlUp).Offset(1,0)
“复制粘贴
相交(rCell.EntireRow,sh.UsedRange)。复制rNext
'重置目标工作表
设置shDest=Nothing
如果结束
下一个rCell
如果结束
端接头

这是如何重命名图纸

Dim oWorkSheet As Worksheet

    For Each oWorkSheet In Sheets
        If Len(oWorkSheet.Cells(1, 1).Value) > 0 Then
            oWorkSheet.Name = oWorkSheet.Cells(1, 1)
        End If
    Next
这是如何移动图纸

    Sheets(1).Move Before:=Sheets(2)
使用快速排序算法从您得到

公共子快速排序表()
快速排序1,表格。计数
端接头
专用子快速排序(ByVal LB等长,ByVal UB等长)
尺寸P1为长,P2为长,参考为字符串,温度为字符串
P1=磅
P2=UB
Ref=图纸((P1+P2)/2)。名称
做
待命(工作表(P1)。姓名<参考号)
P1=P1+1
环
待办事项(工作表(P2).Name>Ref)
P2=P2-1
环
如果P1(P2)
如果LB
您肯定需要两列:旧名称和新名称。重命名工作表很容易:
Sheets(“OldName”).Name=“NewName”
@equaliz3r:能否发布一个屏幕截图,说明工作簿现在的样子以及代码运行后的外观。我还没有足够的高级能力将其全部放在一起。您需要在工作表重命名上运行一个错误例程。A1(a)中建议的图纸名称可能已经存在(b)包含无效的图纸名称characters@Nat在你发布这篇文章的时候,我得到了一些非常散列的代码来做正确的事情。我打算回去让这一个工作。我想用正确的方法学习它。非常感谢。
    Sheets(1).Move Before:=Sheets(2)
Public Sub QuickSortSheets()
    QuickSort 1, Sheets.Count
End Sub

Private Sub QuickSort(ByVal LB As Long, ByVal UB As Long)
    Dim P1 As Long, P2 As Long, Ref As String, TEMP As String

    P1 = LB
    P2 = UB
    Ref = Sheets((P1 + P2) / 2).Name

    Do
        Do While (Sheets(P1).Name < Ref)
            P1 = P1 + 1
        Loop

        Do While (Sheets(P2).Name > Ref)
            P2 = P2 - 1
        Loop

        If P1 <= P2 Then
            TEMP = Sheets(P1).Name
            Sheets(P2).Move Before:=Sheets(TEMP)
            Sheets(TEMP).Move After:=Sheets(P2 - 1)

            P1 = P1 + 1
            P2 = P2 - 1
        End If
    Loop Until (P1 > P2)

    If LB < P2 Then Call QuickSort(LB, P2)
    If P1 < UB Then Call QuickSort(P1, UB)
End Sub