Оптимизация кода - VBA (48931)
Формулировка задачи:
Есть код для копирования листа в созданную книгу, листы копируются с системной датой. Можно ли как то уменьшить код?
Решение задачи: «Оптимизация кода»
textual
Листинг программы
Sub копиялиста()
Dim NameBookKop$, NameList$, newName$
Dim Sh As Worksheet, ActBook As Workbook
Set ActBook = ActiveWorkbook
NameList = "Дневная сводка" ' Имя листа для копии
newName = NameList & Format(Date, " dd.mm.yyyy") ' новое наименование листа
NameBookKop = "Копия листов тест.xlsm" ' Имя файла в который будет копироваться
If MsgBox("Сохранить дневную сводку в архив?", vbOKCancel, "Внимание!") <> vbOK Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
Workbooks(NameBookKop).Close ' если файл не открыт то идем дальше, если открыт то закрываем
With Workbooks.Open(Filename:=ActBook.Path & "\" & NameBookKop) 'открываем файл для копирования
Set Sh = .Sheets(newName)
On Error GoTo 0
If Not Sh Is Nothing Then
If MsgBox("Лист уже сохранен! Удалить его? После удаления, данные вернуть не возможно!!!", _
vbOKCancel + vbExclamation, "Внимание!") = vbOK Then
Application.DisplayAlerts = False ' выключаем все предупреждения
Sh.Delete
Application.DisplayAlerts = True 'обратно включаем предупреждения.
.Close True
With ActBook.Sheets("Главная").CommandButton1
.Caption = "Лист " & newName & " был удален! " 'пишем в кнопке
.BackColor = RGB(255, 0, 0) 'расскрашиваем кнопку красным
MsgBox "Лист " & newName & " был удален! Сделайте копию листа!", vbInformation, "Внимание!"
End With
End If
Else
ActBook.Sheets(NameList).Copy After:=.Sheets(.Sheets.Count) 'копия листа
.Sheets(.Sheets.Count).Name = newName
.Close True
MsgBox "Данные успешно сохранены!", vbInformation, "Внимание!"
With Sheets("Главная").CommandButton1
.Caption = "Лист сохранен!" 'пишем в кнопке
.BackColor = RGB(0, 255, 0) 'расскрашиваем кнопку зеленым
End With
End If
End With
Application.ScreenUpdating = True
End Sub