Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Оптимизация макроса в VBA, Готовый макрос не выполняет до конца задачу
 
Всем привет. Есть готовый макрос.
Код
Sub CopySelectedSheetsScheduledNoOpen()
    Dim SourceWorkbook As Workbook
    Dim DestinationWorkbook As Workbook
    Dim SourceSheet As Worksheet
    Dim DestinationSheet As Worksheet
    Dim LastRow As Long
    Dim LastCol As Long
    Dim SourceRange As Range
    Dim ScheduledTime As Date
    Dim FilePath As String
    
   'Путь к файлу
    FilePath = "\\bee.vimpelcom.ru\folders\MoscowTverScheduler\Teleopti\Единый РКЦ\Единый мониторинг\Свешников\макрос тест — 2листа — копия.xlsm"
    
    'Задать время для запуска макроса (например,каждый день в 8:41)
    ScheduledTime = DateSerial(Year(Now()), Month(Now()), Day(Now())) + TimeSerial(8, 41, 0)
    
    'Проверить, соответствует ли текущее время заданному времени
    If Now() < ScheduledTime Then Exit Sub
    
    'Открыть файл без отображения
    Set SourceWorkbook = Workbooks.Open(FilePath, UpdateLinks:=False, ReadOnly:=True)
    Set DestinationWorkbook = Workbooks.Open(FilePath, UpdateLinks:=False, ReadOnly:=False)
    
    'Копировать данные с нескольких листов
    CopySheetData SourceWorkbook, DestinationWorkbook, "Лист2", "Лист1"
    CopySheetData SourceWorkbook, DestinationWorkbook, "Лист4", "Лист3"
    'Добавить больше вызовов CopySheetData для других пар листов при необходимости
    
    'Сохранить и закрыть файлы
    DestinationWorkbook.Save
    SourceWorkbook.Close False
    DestinationWorkbook.Close True
End Sub
Private Sub CopySheetData(SourceWB As Workbook, DestWB As Workbook, SourceSheetName As String, DestSheetName As String)
    Dim SourceSheet As Worksheet
    Dim DestinationSheet As Worksheet
    Dim LastRow As Long
    Dim LastCol As Long
    Dim SourceRange As Range
    
    'Указать исходный и целевой листы
    Set SourceSheet = SourceWB.Worksheets(SourceSheetName)
    Set DestinationSheet = DestWB.Worksheets(DestSheetName)
    
    'Найти последнюю используемую строку и столбец на исходном листе
    LastRow = SourceSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    LastCol = SourceSheet.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    
    'Установить диапазон для копирования
    Set SourceRange = SourceSheet.Range(SourceSheet.Cells(1, 1), SourceSheet.Cells(LastRow, LastCol))
    
    'Скопировать данные как значения на целевой лист
    SourceRange.Copy
    DestinationSheet.Range("A1").PasteSpecial Paste:=xlPasteValues
    
    'Очистить буфер обмена
    Application.CutCopyMode = False
End Sub
Суть его как бы проста, он без физического открытия файла, в определённое время, запускает действия в нём:
условно есть 2 пары листов, как прописано в макросе лист1 и лист2-одна пара, лист3 и лист4 -другая, разбил образно на пары, так как в листах 2 и 4 содержится информация которая собирается формулами, связями из других файлов и копируется на лист 1 и 3 соответственно, как значение, после сохраняет и закрывает. Так вот проблема в том, что он для первой пары листов делает действие, для второй нет. Помогите пожалуйста, что я упустил в скрипте.
Изменено: Uupss_88 - 17.05.2024 19:47:27
Страницы: 1
Наверх