如果可能的话,无论表单的名称是什么,我都希望下面的宏以相同的方式运行。例如,在这个文件中它是2015年3月和#34;的ZPPV决赛。但那个三月,可能会改为4月或5月等。无论该工作表标签上的月份是什么,我都能运行此宏吗?请参阅以下内容:
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
答案 0 :(得分:1)
这是一个简单的例子
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 :(得分:1)
如果工作簿中只有一个工作表,请使用索引。
Dim ws As Worksheet ' Declare a worksheet type variable
Set ws = Thisworksbook.Sheets(1) ' assign the worksheet object
如果有其他工作表,但始终使用相同的工作表(意味着,工作表名称仅针对新月编辑),请使用工作表codename
。
Dim ws As Worksheet ' Declare a worksheet type variable
Set ws = Sheet1 ' use Codename to assign worksheet object to variable
您只能在属性窗口中编辑Codename
,如上所示
用户可以更改工作表名称,但不能更改Codename
。
如果每月创建一个新工作表,请使用循环。
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