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

Страницы: 1
Ошибка буфера обмена run-time error '-2147221040 (800401d0)'
 
Столкнулся с проблемкой при работе с буфером обмена. При попытке скопировать в буфер, возникает ошибка - run-time error '-2147221040 (800401d0)'

У экселя бывает такой глючёк - иногда при перемещении ячеек/строк/столбцов, он выдает ошибку "Не удалось освободить буфер обмена". Так вот именно в этом случае VBA и спотыкается. Причем если нажать debug и затем продолжить выполнение макроса, то всё проходит нормально.
Спотыкается на строке S = .GetText
Код
Sub CopyList()
    Dim S As String
    Application.ScreenUpdating = False
    Sheets("Заявка").Activate
    Sheets("Заявка").Select
    Worksheets("Заявка").Range("Заявка_текст").Copy
    With New DataObject
        .GetFromClipboard
        S = .GetText
        .Clear
        .SetText S
        .PutInClipboard
    End With
    Worksheets("Продажи").Activate
    Application.ScreenUpdating = True
End Sub


P.S. В архиве форума уже есть аналогичная тема, но проблема там не решена: Парсер VBA
Изменено: O_Lex - 03.06.2021 11:58:36
Копирование листа в новую книгу с определенным именем.
 
Моя задача скопировать лист в новую книгу, для последующего сохранения.
Столкнулся с парочкой проблем:

1.   Несмотря на явно указанное имя, при сохранении файла всё равно предлагается стандартное "КнигаN.xlsx" (где N это номер присвоенный экселем)
Делал так:
Код
target_workbook.Windows(1).Caption = "Продажи.xlsx"
Других способов не нашел.

2.   Заметил, что если при копировании конкретно указать книгу в которую копировать, то операция копирования выполняется дольше, чем без указания (новая книга создается автоматически).
Код
    Select Case N
        Case 1                                                        '  Способ 1
            Sheets("Продажи").Copy
            Set NewSheet = ActiveWorkbook.ActiveSheet
        Case 2                                                        '  Способ 2
            Set source_worksheet = ThisWorkbook.Sheets("Продажи")
            Set target_workbook = Workbooks.Add()
            source_worksheet.Copy Before:=target_workbook.Sheets(1)
            Set NewSheet = target_workbook.Sheets("Продажи")
    End Select

Есть ли у кого нибудь какие либо соображения на этот счёт?

P.S.
От первого способа решил отказаться по той причине, что если во время экспорта происходит какой-то сбой, то новый лист иногда теряет фокус, и дальнейший код выполняется с дочерним листом (ActiveWorkbook.ActiveSheet). Что приводит к безвозвратной утере важных данных. (хорошо что регулярно делаю бэкапы).
Страницы: 1
Наверх