2016-09-23 78 views
0

我使用的代码:Excel的VBA透视ISO周选择

Sub weekselect() 
Dim CurWkNum As Integer: CurWkNum = 31 
Dim pvtI As PivotItem 

With Worksheets("PIVOT 4").PivotTables(1) 
    .PivotCache.Refresh 
    .ClearAllFilters 
    For Each pvtI In .PivotFields("WEEK_NUMBER").PivotItems 
     If pvtI > CurWkNum Then 
      CurWkNum = pvtI 
     End If 
    Next pvtI 
    For Each pvtI In .PivotFields("WEEK_NUMBER").PivotItems 
     pvtI.Visible = (CInt(pvtI.Name) = CurWkNum) 
    Next pvtI 
End With 

End Sub 

这是选择的最后一个星期在枢轴和上述要求的伟大工程。不过,我现在希望能够根据当前的ISO周选择当前周和当前周和/或

任何帮助将不胜感激!

非常感谢!

有没有好的撒玛利亚人在那里?我对VBA毫无希望,并且已经在网上搜索这个,并在几个论坛上提出问题。我希望这将是一个简单的编辑。我设法解决了我原来的一些需求,现在只需要按照上面的方法选择宏,再加上接下来的4周数据。所以我想是这样的:

If pvtI > CurWkNum Then 
CurWkNum = pvtI +1 
CurWkNum = pvtI +2 
CurWkNum = pvtI +3 
CurWkNum = pvtI +4 

真的坚持了这一点,如果任何VBA优点在那里可以采取可怜可怜我,指出我在正确的方向,将不胜感激。

回答

0

好到目前为止,我得到这个:

Sub Test() Dim ISOweekNum AsInteger Dim pvtI As PivotItem Dim ws As Worksheet 

ForEach ws In ThisWorkbook.Worksheets(Array("PIVOT", "PIVOT 2", "PIVOT 3", "PIVOT 4")) With ws.PivotTables(1) 
      .PivotCache.Refresh 
      .ClearAllFilters 
     ISOweekNum = DatePart("ww", Date, vbMonday, vbFirstFourDays) 

ForEach pvtI In .PivotFields("WEEK_NUMBER").PivotItems 
      pvtI.Visible = (CInt(pvtI.Name) >= ISOweekNum And CInt(pvtI.Name) <= ISOweekNum + 4) Next pvtI EndWith Next ws EndSub 

Onedrivexlsworkbooksample

我无法得到它的工作尚未虽然不过相信它越来越接近。我已将上面的示例工作簿附加为module1。

任何专业人士可以腾出5分钟把我的权利,将不胜感激,因为我正在努力通过这个拙劣。

谢谢!