Оптимизация кода - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы