我有一个工作表(“转储”),其中包含2列“全名”(AA,BB,CC等)和“电子邮件地址”(123 @ test.com,321 @ test.com等)。
整个Excel包含200多个工作表(命名为AA,BB,CC等)。
我需要一个VBA脚本来将工作表名称与“转储”表中的“全名”列进行比较,并仅在工作表名称与“全名”匹配时将工作表名称替换为“电子邮件地址”,即仅在AA(全名)= AA(工作表名称)时替换。
我有代码将“全名”替换为“电子邮件地址”而不进行验证。
Sub replace()
Dim arr As Variant
arr = Range("A2:A5").Value
For i = LBound(arr) To UBound(arr)
Sheets(i + 1).Activate
Sheets(i).Name = arr(i, 1)
Next i
End Sub
谢谢:)
答案 0 :(得分:0)
你可以这样做(未经测试):
Sub replace()
Dim col As New Collection
Dim cell As Range
Dim sh As WorkSheet
' Step 1: Create a dictionary that maps names to emails
For Each cell in Sheets("Dump").Range("A2:A999")
If cell.value = "" Then Exit For ' no more names
col.Add cell.Offset(0, 1).value, cell.value
Next
' Step 2: Go through all sheets and rename them
For Each sh in Sheets
sh.Activate ' not really necessary, but it gives some visual clue
On Error Resume Next ' ignore mismatch errors
sh.Name = col.Item(sh.Name) ' replace name by email
On Error Goto 0
Next
End Sub
这假设您在A列中有全名,从第2行开始,在B列中有电子邮件地址。