Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("B12:NC26")
Dim p, a As Integer
Dim date_row, begin_work_col, end_work_col, start_row, stop_row, start_col, stop_col, begin_work As Integer
Dim before_work() As Integer
Dim next_work_day As Variant
p = 0 date_row = 4 start_row = 12 stop_row = 26 start_col = 3 stop_col = 367 begin_work_col = 371 end_work_col = 372 expl_work_col = 373 begin_work = 0 ReDim before_work(stop_row) As Integer If Not Application.Intersect(KeyCells, Range(Target.Address)) _ Is Nothing Then For a = start_row To stop_row If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(a, 2))) <> 0 Then before_work(a) = 1 Else before_work(a) = 0 End If Next a
For i = start_row To stop_row For j = start_col To stop_col If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(i, j))) <> 0 Then 'j-êîëîíêè, i-ðÿäû (åñëè ÿ÷åéêà íå ïóñòàÿ) If begin_work = 1 Then Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day Else If before_work(i) = 1 Then begin_work = 1 Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day Else Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day begin_work = 1 End If End If End If Next j If begin_work = 0 Then Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = "" If before_work(i) <> 1 Then Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = "" End If End If begin_work = 0 Next i End If End Sub
[/vba]
Выдаёт ошибку как на скрине. Ячейки А4:А29 - типа Дата и содержать даты в формате хх.хх.хх
ПС Не знаю почему, в редакторе всё отображается нормально, а когда сохраняю, в коде каша без перевода строк, хотя символы CR LF есть на каждой строке
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("B12:NC26")
Dim p, a As Integer
Dim date_row, begin_work_col, end_work_col, start_row, stop_row, start_col, stop_col, begin_work As Integer
Dim before_work() As Integer
Dim next_work_day As Variant
p = 0 date_row = 4 start_row = 12 stop_row = 26 start_col = 3 stop_col = 367 begin_work_col = 371 end_work_col = 372 expl_work_col = 373 begin_work = 0 ReDim before_work(stop_row) As Integer If Not Application.Intersect(KeyCells, Range(Target.Address)) _ Is Nothing Then For a = start_row To stop_row If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(a, 2))) <> 0 Then before_work(a) = 1 Else before_work(a) = 0 End If Next a
For i = start_row To stop_row For j = start_col To stop_col If Len(RTrim(Worksheets("Ãðàôèê ïî äíÿì").Cells(i, j))) <> 0 Then 'j-êîëîíêè, i-ðÿäû (åñëè ÿ÷åéêà íå ïóñòàÿ) If begin_work = 1 Then Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day Else If before_work(i) = 1 Then begin_work = 1 Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day Else Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = Worksheets("Ãðàôèê ïî äíÿì").Cells(date_row, j) next_work_day = Application.WorksheetFunction.WorkDay((Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col) + 6), 1, Worksheets("Ãðàôèê ïî äíÿì").Range("A4:A29")) Worksheets("Ãðàôèê ïî äíÿì").Cells(i, expl_work_col).Value = next_work_day begin_work = 1 End If End If End If Next j If begin_work = 0 Then Worksheets("Ãðàôèê ïî äíÿì").Cells(i, end_work_col).Value = "" If before_work(i) <> 1 Then Worksheets("Ãðàôèê ïî äíÿì").Cells(i, begin_work_col).Value = "" End If End If begin_work = 0 Next i End If End Sub
[/vba]
Выдаёт ошибку как на скрине. Ячейки А4:А29 - типа Дата и содержать даты в формате хх.хх.хх
ПС Не знаю почему, в редакторе всё отображается нормально, а когда сохраняю, в коде каша без перевода строк, хотя символы CR LF есть на каждой строкеsupercelt