Раннее связывание может загрузить объект словаря в исходном объявлении.
Set dctUnique_WorkWeek = New Dictionary
Это создает одномерный массив, но вы начинаете приращение в For ... Next с 1, а не с нуля.Вероятно, лучше просто использовать двумерный массив.На самом деле, целесообразно всегда использовать LBound to UBound для For ... Next с массивом.
With Sheet1
All_Submitted_Dates = Application.Transpose(.Range(.Range("K2"), .Cells(.Rows.Count, "K").End(xlUp)))
End With
Кодовое имя Sheet1 будет ссылаться на Sheet1 в рабочей книге, содержащей VBA.проект.Используйте имя рабочего листа и предоставьте явную родительскую рабочую книгу, если она внешняя.
Sheet1.Activate
Фактически, нет необходимости. Активировать рабочую таблицу, чтобы ссылаться на нее, если предоставляется явно указанная родительская рабочая книга.
dctUnique_WorkWeek("WW" & WorksheetFunction.WeekNum(All_Submitted_Dates(DateCounter))) = dctUnique_WorkWeek("WW" & WorksheetFunction.WeekNum(All_Submitted_Dates(DateCounter))) + 1
a) Формат VBA использует маску формата ww , чтобы получить тот же номер, что и WorksheetFunction.WeekNum.b) Существует сокращенное обозначение «показатель в словаре», которое обходит метод словаря Exists.
WorkWeekCounter , по-видимому, не используется после его объявления и ему присваивается значение 1.
WorkWeekCounter = 1
Вы можете написать все ключи и предметы одновременно.Формулы потребуют 2 шага из-за различных формул.
For Each varKey In dctUnique_WorkWeek.Keys()
Ваши формулы, кажется, ссылаются на столбец B, но никакие значения не помещаются в столбец B на новом листе.
Option Explicit
Sub Full_Automation()
Dim All_Submitted_Dates As Variant, dctUnique_WorkWeek As New Dictionary
Dim dc As Long
With ActiveWorkbook 'better as With Workbooks("Book1.xlsx")
With .Worksheets("Sheet1")
All_Submitted_Dates = .Range(.Cells(2, "K"), .Cells(.Rows.Count, "K").End(xlUp)).Value2
End With
For dc = LBound(All_Submitted_Dates, 1) To UBound(All_Submitted_Dates, 1)
dctUnique_WorkWeek.Item("WW" & Right(Format(All_Submitted_Dates(dc, 1), "\0ww"), 2)) = _
dctUnique_WorkWeek.Item("WW" & Right(Format(All_Submitted_Dates(dc, 1), "\0ww"), 2)) + 1
Next dc
Worksheets.Add After:=.Sheets(.Sheets.Count)
With .Sheets(.Sheets.Count)
'name = "give the new worksheet a name"
.Cells(2, "A").Resize(dctUnique_WorkWeek.Count, 1) = Application.Transpose(dctUnique_WorkWeek.keys)
.Cells(2, "D").Resize(dctUnique_WorkWeek.Count, 1) = Application.Transpose(dctUnique_WorkWeek.items)
'optionally sort the weeks
With .Cells(2, "A").Resize(dctUnique_WorkWeek.Count, 4)
.Sort key1:=.Cells(1), order1:=xlAscending, Header:=xlNo
End With
.Cells(2, "C").Formula = "=B2"
.Cells(2, "E").Formula = "=D2"
.Range(.Cells(3, "C"), .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 2)).Formula = "=C2+B3"
.Range(.Cells(3, "E"), .Cells(.Rows.Count, "A").End(xlUp).Offset(0, 4)).Formula = "=E2+D3"
End With
End With
End Sub