如何使macros不是特定的

如果可能的话,我希望下面的macros以相同的方式运行,而不pipe表名是什么。 例如在这个文件上是“ZPPV Final for March 2015”。 但那个三月,可能会改变到四月或五月,等我可以有这个macros运行,无论月份是在该工作表选项卡上? 请看下面:

Sub PPV() ' ' PPV Macro ' ' Sheets("ZPPV Final for March 2015").Select Range("Z3").Select ActiveCell.FormulaR1C1 = "Week" Range("Z4").Select ActiveCell.FormulaR1C1 = "=WEEKNUM(RC[-9])" Range("Z4").Select Selection.AutoFill Destination:=Range("Z4:Z8858") Range("Z4:Z8858").Select Range("Z3").Select Range(Selection, Selection.End(xlToLeft)).Select Range(Selection, Selection.End(xlDown)).Select Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "***ZPPV Final for March 2015***!R3C2:R8858C26", Version:=xlPivotTableVersion14). _ CreatePivotTable TableDestination:="Sheet2!R3C1", TableName:="PivotTable9" _ , DefaultVersion:=xlPivotTableVersion14 Sheets("Sheet2").Select Cells(3, 1).Select With ActiveSheet.PivotTables("PivotTable9").PivotFields("Plant") .Orientation = xlPageField .Position = 1 End With With ActiveSheet.PivotTables("PivotTable9").PivotFields("Week") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTable9").AddDataField ActiveSheet.PivotTables( _ "PivotTable9").PivotFields(" PPV"), "Sum of PPV", xlSum ActiveSheet.PivotTables("PivotTable9").PivotFields("Plant").ClearAllFilters ActiveSheet.PivotTables("PivotTable9").PivotFields("Plant").CurrentPage = _ "1027" Sheets("**ZPPV Final for March 2015").**Select ActiveWorkbook.Worksheets("Sheet2").PivotTables("PivotTable9").PivotCache. _ CreatePivotTable TableDestination:="Sheet2!R1C6", TableName:="PivotTable10" _ , DefaultVersion:=xlPivotTableVersion14 Sheets("Sheet2").Select Cells(1, 6).Select With ActiveSheet.PivotTables("PivotTable10").PivotFields("Plant") .Orientation = xlPageField .Position = 1 End With With ActiveSheet.PivotTables("PivotTable10").PivotFields("Week") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTable10").AddDataField ActiveSheet.PivotTables( _ "PivotTable10").PivotFields(" PPV"), "Sum of PPV", xlSum With ActiveSheet.PivotTables("PivotTable10").PivotFields("Vendor Name") .Orientation = xlRowField .Position = 1 End With Range("F4").Select ActiveSheet.PivotTables("PivotTable10").PivotFields("Vendor Name").ShowDetail _ = False ActiveSheet.PivotTables("PivotTable10").PivotFields("Plant").ClearAllFilters ActiveSheet.PivotTables("PivotTable10").PivotFields("Plant").CurrentPage = _ "1027" Sheets("ZPPV Final for March 2015").Select ActiveWorkbook.Worksheets("Sheet2").PivotTables("PivotTable10").PivotCache. _ CreatePivotTable TableDestination:="Sheet2!R1C10", TableName:= _ "PivotTable11", DefaultVersion:=xlPivotTableVersion14 Sheets("Sheet2").Select Cells(1, 10).Select With ActiveSheet.PivotTables("PivotTable11").PivotFields("Plant") .Orientation = xlPageField .Position = 1 End With ActiveSheet.PivotTables("PivotTable11").AddDataField ActiveSheet.PivotTables( _ "PivotTable11").PivotFields(" PPV"), "Sum of PPV", xlSum With ActiveSheet.PivotTables("PivotTable11").PivotFields("Material No.") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("PivotTable11").PivotFields("Plant").ClearAllFilters ActiveSheet.PivotTables("PivotTable11").PivotFields("Plant").CurrentPage = _ "1027" Range("A3").Select ActiveSheet.PivotTables("PivotTable9").CompactLayoutRowHeader = "Week" Range("F3").Select ActiveSheet.PivotTables("PivotTable10").CompactLayoutRowHeader = "Vendor" Range("J3").Select ActiveSheet.PivotTables("PivotTable11").CompactLayoutRowHeader = _ "Material Number" Range("A2").Select ActiveCell.FormulaR1C1 = "PPV By Week" Range("F2").Select ActiveCell.FormulaR1C1 = "PPV By Vendor" Range("J2").Select ActiveCell.FormulaR1C1 = "PPV By Material #" Range("J2").Select Selection.Font.Bold = True Range("F2").Select Selection.Font.Bold = True Range("A2").Select Selection.Font.Bold = True Range("D3").Select End Sub 

这是一个简单的例子

 Dim sh as worksheet Dim ws as worksheet set ws=sheets("Sheet2") set sh=activesheet sh.Range("Z3") = "Week" with ws 'do something end with 
  1. 如果您的工作簿中只有一个工作表,然后使用索引。

     Dim ws As Worksheet ' Declare a worksheet type variable Set ws = Thisworksbook.Sheets(1) ' assign the worksheet object 
  2. 如果还有其他工作表,但始终使用相同的工作表(即,工作表名称仅针对新月份进行编辑),请使用工作表codename

     Dim ws As Worksheet ' Declare a worksheet type variable Set ws = Sheet1 ' use Codename to assign worksheet object to variable 

在这里输入图像说明

您只能在属性窗口中编辑代码名,如上所示。
用户可以更改表单名称而不是代码名称。

  1. 如果每个月都创build一个新工作表,请使用循环。

     Dim ws As Worksheet, i As Integer Dim MoYr As String MoYr = Format(Date, "mmmm yyyy") ' Returns April 2015 if run now With ThisWorkbook For i = 1 To .Sheets.Count If InStr(.Sheets(i).Name, MoYr) <> 0 Then Set ws = .Sheets(i): Exit For End If Next End With If ws Is Nothing Then Exit Sub ' Just in case nothing is found