psiho, несколько соображений, если я все правильно понял:
1. Worksheets("Данные") - вынести в общий With
2. LastRowInRange = Sh.SpecialCells(xlCellTypeLastCell).Row
а если все-таки Public Function LastRowInRange(Sh As Range)
то Public Function LastRowInRange(Sh As Range) As Range
3. Вместо двух процедур:
Call SpeedOnOff(True)
Call SpeedOnOff(False)
Public Sub SpeedOnOff(pOn As Boolean)
With Application
.EnableEvents = pOn
.DisplayAlerts = pOn
.ScreenUpdating = pOn
End With
End Sub
4.
До цикла: sMask$ = String(Len(CStr(Количество)), "0")
В цикле: Worksheets("Данные").Cells(r, 4).Value = Название & "-" & Format(j, sMask)
Вместо:
If j < 10 Then
Worksheets("Данные").Cells(r, 4).Value = Название & "-" & "0" & j
Else
Worksheets("Данные").Cells(r, 4).Value = Название & "-" & j
End If
1. Worksheets("Данные") - вынести в общий With
2. LastRowInRange = Sh.SpecialCells(xlCellTypeLastCell).Row
а если все-таки Public Function LastRowInRange(Sh As Range)
то Public Function LastRowInRange(Sh As Range) As Range
3. Вместо двух процедур:
Call SpeedOnOff(True)
Call SpeedOnOff(False)
Public Sub SpeedOnOff(pOn As Boolean)
With Application
.EnableEvents = pOn
.DisplayAlerts = pOn
.ScreenUpdating = pOn
End With
End Sub
4.
До цикла: sMask$ = String(Len(CStr(Количество)), "0")
В цикле: Worksheets("Данные").Cells(r, 4).Value = Название & "-" & Format(j, sMask)
Вместо:
If j < 10 Then
Worksheets("Данные").Cells(r, 4).Value = Название & "-" & "0" & j
Else
Worksheets("Данные").Cells(r, 4).Value = Название & "-" & j
End If