多次运行VBA代码

时间:2018-05-23 17:19:01

标签: vba excel-vba excel

我有一个代码,我想要多次运行但是现在除非我在数据表名称上做了一些更改,否则我只能运行一次。

我的代码:

Public Sub MyFilter()
    Dim lngStart As Date, lngEnd As Date
    lngStart = Range("b2").Value 'assume this is the start date
    lngEnd = Range("b3").Value 'assume this is the end date
    Range("q:q").AutoFilter field:=1, _
        Criteria1:=">=" & lngStart, _
        Operator:=xlAnd, _
        Criteria2:="<=" & lngEnd


           Range("A1:s3000").Select
    Range("A:A").Activate
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    Sheets("Sheet2").Select
    Sheets("Sheet2").Name = "FilterData"
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("A:A").EntireColumn.AutoFit
    Cells.Select
    Cells.EntireColumn.AutoFit
    Rows("1:1").Select
    Application.CutCopyMode = False
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Selection.AutoFilter
    Columns("A:A").EntireColumn.AutoFit
    Range("A2").Select

End Sub

在我执行之前,我手动创建了sheet2但是如果我想再次运行它,我不能因为我已经有“FilterData”工作表数据名称。

如何将代码修改为: 1.无需手动输入“sheet2”即可运行它。 2.不止一次运行它。 谢谢!

1 个答案:

答案 0 :(得分:0)

在Excel中创建新工作表时,它将成为活动工作表,因此您可以使用activesheet

而不是专门选择工作表2。
Sheets.Add After:=ActiveSheet
With ActiveSheet
    .Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    .Columns("A:A").EntireColumn.AutoFit
    .Cells.Select
    .Cells.EntireColumn.AutoFit
    .Rows("1:1").Select
    .Application.CutCopyMode = False
    With Selection
         With .Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 15773696
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        .AutoFilter
    End With
    .Columns("A:A").EntireColumn.AutoFit
    .Range("A2").Select
End With

然后您可以手动重命名所有新工作表。

或者,如果你想循环设定的次数,你可以将整个事物包装在循环中并增加工作表名称:

For i = 1 to 4
    Sheets.Add After:=ActiveSheet
    With ActiveSheet
        .Name = "FilterData " & i
*rest of the code here*
    End With
Next i

这将创建4张名为FilterData 1,2,3等的表格,但如果你已经有一张名为那些东西的表格,这将再次引发错误。

相关问题