VBA统计列并复制它们

下面的代码隐藏了一定数量的行(取决于我们所处的星期数),并只显示了与当前星期编号对应的单元格以及与未来星期编号对应的单元格。

Dim test As String test = Format(Now, "yyyy", vbMonday) & KW(Now) For k = 3 To lastColumn ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k).ColumnWidth = cWidth If ThisWorkbook.Worksheets(PlanningTableNameUG).Cells(1, k).Value = test Then today = True On Error Resume Next ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k - 1).Ungroup On Error GoTo 0 ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k - 1).Group End If If Not today Then On Error Resume Next ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k).Ungroup On Error GoTo 0 ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k).Group ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k).Hidden = True If Hidden = True Then ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k).Group.Copy ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k).Group.Insert Shift:=xlToRight End If Else ThisWorkbook.Worksheets(PlanningTableNameUG).Columns(k).Hidden = False End If Next k ' calculate the week number Function KW(d As Date) As Integer Dim Tag As Long Tag = DateSerial(Year(d + (8 - Weekday(d)) Mod 7 - 3), 1, 1) KW = (d - Tag - 3 + (Weekday(Tag) + 1) Mod 7) \ 7 + 1 End Function 

现在,我需要计算隐藏了多less列,并添加确切的列数,例如:

栏目:1,2,3,4,5,6,7,8,9,10(第4栏对应今天的周数)

我隐藏:1,2,3因为过去几周有,并且希望加上11,12,13和他们对应的星期数,但是从现在的date起不超过1年。

这个星期的计数从今年的乞讨开始。

当隐藏列时,你可以添加一个整数variables,然后使用这个variables来添加许多新的列。

然后添加星期编号,使用最后一个星期编号的列,并为每个新列添加一个…

要对使用的ThisWorkbook.Worksheets(PlanningTableNameUG)范围中的隐藏列进行计数:

 Dim col As Range Dim cnt As Long For Each col In ThisWorkbook.Worksheets(PlanningTableNameUG).UsedRange Debug.Print col.EntireColumn.Hidden cnt = cnt - col.EntireColumn.Hidden Next col 

如果隐藏,EntireColumn.Hidden返回True。 在VBA中为-1,这就是为什么我从计数器中扣除它以获得正值。