【发布时间】:2018-06-15 17:16:02
【问题描述】:
这个问题与renaming multiple worksheets from list using VBA 有点相似,但差别太大,无法从那个问题中得到答案。
我将经常需要重命名各种传入工作簿中的数十个工作表。
我希望通过首先将所有工作表名称复制到 secondWorkbook.sheets(1) colA 中,在 ColB 中手动创建新名称,然后运行第二个宏来更新 originalWorkbook 中的名称来重命名所有工作表。
我被困在第二个宏上,但将在下面提供两个宏。 如果有人有更短/更好的方式来编写这些宏,我会全神贯注。
第一个宏 - 将所有工作表名称复制到一个新的 workbook.sheet(1).colA 中。 这可行,并使用 ColA 中的选项卡名称创建一个未保存的新工作簿
Sub GrabAllTabNamesIntoTempWorkbookColA()
Dim tst, tmp, allTabNames As String
Dim i, cnt, cnt2 As Long
Dim wb, wbTmp As Workbook, xWs, ws1 As Worksheet
Dim arrOldNames, arrNewNames As Variant
ReDim arrOldNames(999)
cnt = 0
With ActiveWorkbook
For Each xWs In .Worksheets
If xWs.Visible = xlSheetVisible Then
arrOldNames(cnt) = xWs.Name
cnt = cnt + 1
End If
Next
End With
ReDim Preserve arrOldNames(cnt - 1)
cnt2 = 1
Set wbTmp = Workbooks.Add
Set ws1 = wbTmp.Sheets(1)
For i = 1 To cnt
ws1.Range("A" & i).Value = arrOldNames(i - 1)
Next
MsgBox "Done. Copied " & cnt & " tab names."
End Sub
这是我坚持的宏。两个工作簿都在屏幕上打开,我不介意编辑宏来提供工作簿名称。不确定如何引用名称为“Book4 - Microsoft Excel”的未保存工作簿,因此我一直将其保存为 Temp.xlsx 并将其引用为 namesWb。带有要重命名的选项卡的工作簿被引用为 targetWb
Sub RenameAllTabsFromColAInTempWorkbook()
Dim namesWb, targetWb As Workbook
Dim colA, colB As Variant
Set namesWb = Windows("Temp.xlsx")
Set targetWb = ActiveWorkbook
ReDim colA(999), colB(999)
cnt = 0
With namesWb
Sheets(1).Activate
For i = 1 To 999
If Range("A" & i).Value = "" Then Exit For
colA(i - 1) = Range("A" & i).Value
colB(i - 1) = Range("B" & i).Value
cnt = cnt + 1
Next
ReDim Preserve colA(cnt)
ReDim Preserve colB(cnt)
End With
For each oldname in colA()
'Stuck here...
Next
End Sub
我意识到我可以再次遍历 targetWb,并且对于每个选项卡名,在 ColA() 中找到该选项卡名的位置,并使用来自 tabB() 的相同位置名重命名它 - 但我想知道是否有更快/更好的方式来做到这一点。
【问题讨论】:
-
您会仅打开这两个工作簿吗?或者您会打开 3+ 个,但只想使用目标工作簿 (
ActiveWorkbook) 和新的工作簿,即temp.xlsx? -
只有两个打开