VBA 计数列并复制它们
VBA count columns and copy them
下面的代码隐藏一定数量的行(取决于我们所在的周数)并且只显示与当前周数对应的单元格和与未来周数对应的单元格。
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
现在,我需要计算隐藏了多少列并添加准确的列数,示例:
列:
1,2,3,4,5,6,7,8,9,10(第4列对应今天的周数)
我隐藏:1,2,3,因为过去几周有,想加上11,12,13,连同它们对应的周数,但距离当前日期不超过1年。
周数从当年年初开始计算。
计算 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 returns 如果隐藏则为真。 VBA 中的 True 是 -1,这就是为什么我从计数器中减去它以获得正值。
隐藏列时,您可以添加一个以 1 为增量的整数变量,然后使用该变量添加那么多新列。
然后添加周数,使用带有周数的最后一列,并为每个新列添加一个...
下面的代码隐藏一定数量的行(取决于我们所在的周数)并且只显示与当前周数对应的单元格和与未来周数对应的单元格。
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
现在,我需要计算隐藏了多少列并添加准确的列数,示例:
列: 1,2,3,4,5,6,7,8,9,10(第4列对应今天的周数)
我隐藏:1,2,3,因为过去几周有,想加上11,12,13,连同它们对应的周数,但距离当前日期不超过1年。
周数从当年年初开始计算。
计算 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 returns 如果隐藏则为真。 VBA 中的 True 是 -1,这就是为什么我从计数器中减去它以获得正值。
隐藏列时,您可以添加一个以 1 为增量的整数变量,然后使用该变量添加那么多新列。
然后添加周数,使用带有周数的最后一列,并为每个新列添加一个...