创建新工作表,然后返回上一个有效工作表

时间:2017-03-10 22:05:28

标签: excel vba excel-vba

快速提问!

我有一个使用Application.AciveSheet引用当前工作表的宏,因为我希望它可以在我们众多的工作表中运行。它将数据从Application.ActiveSheet复制到另一个工作表"标签"。我想实际在宏中创建工作表标签,然后返回到Application.AciveSheet,以便其余的宏可以运行。我不能因为"标签"成为新的活动表。

这是我目前的参考资料

Sub LabelCreation()

'uses the active sheet and Z range to 120

lr = Application.ActiveSheet.Range("Z120").End(xlUp).Row
k = 0
For i = 4 To lr
k = k + 1

Application.ActiveSheet.Range("Z" & i).Copy
Sheets("Labels").Range("A" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("A" & k).PasteSpecial Paste:=xlPasteValues

Sheets("Labels").Range("B" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("B" & k).PasteSpecial Paste:=xlPasteValues

Sheets("Labels").Range("C" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("C" & k).PasteSpecial Paste:=xlPasteValues

Sheets("Labels").Range("D" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("D" & k).PasteSpecial Paste:=xlPasteValues

k = k + 1

Application.ActiveSheet.Range("AA" & i).Copy
Sheets("Labels").Range("A" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("A" & k).PasteSpecial Paste:=xlPasteValues

Sheets("Labels").Range("B" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("B" & k).PasteSpecial Paste:=xlPasteValues

Sheets("Labels").Range("C" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("C" & k).PasteSpecial Paste:=xlPasteValues

Sheets("Labels").Range("D" & k).PasteSpecial Paste:=xlPasteFormats
Sheets("Labels").Range("D" & k).PasteSpecial Paste:=xlPasteValues

Next

End Sub

2 个答案:

答案 0 :(得分:5)

在代码的开头添加此代码(Sub之后的第一行)

Sub LabelCreation()
    Set aws = ActiveSheet 'aws is current active sheet
    Sheets.Add 'add a new sheet
    ActiveSheet.Name = "Labels" 'name it "labels"
    aws.Activate 'reactivate initial active sheet
    'uses the active sheet and Z range to 120

答案 1 :(得分:3)

会对现有的好答案添加一个小调整,以检查标签表是否已经存在(即停止代码运行多次)

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim ws3 As Worksheet

Set ws1 = ActiveSheet
Set ws2 = Sheets.Add
On Error Resume Next
Set ws3 = Sheets("labels")
On Error GoTo 0
If ws3 Is Nothing Then
    ws2.Name = "labels"
Else
    MsgBox "sheet name already exists", vbCritical
End If
Application.Goto ws1.[a1]