Столкнулся с проблемкой при работе с буфером обмена. При попытке скопировать в буфер, возникает ошибка - 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
Моя задача скопировать лист в новую книгу, для последующего сохранения. Столкнулся с парочкой проблем:
1. Несмотря на явно указанное имя, при сохранении файла всё равно предлагается стандартное "КнигаN.xlsx" (где N это номер присвоенный экселем) Делал так:
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). Что приводит к безвозвратной утере важных данных. (хорошо что регулярно делаю бэкапы).