Буфер обмена в VBA исчезает через несколько шагов - PullRequest
1 голос
/ 26 мая 2019

У меня есть код, который должен восстановить форматирование диапазона после применения нескольких шагов.

Sub MyCode()
Sheets("My sheet").ListObjects("My Table").DataBodyRange.Copy
...
refreshing connection and calling function that applies stored formulas to table columns
...
Sheets("My sheet").[A10].PasteSpecial Paste:=xlPasteFormats
End sub

Я получил ошибку PasteSpecial метод в диапазоне не удался Если я вставлю сразу, это работает.

Можно ли сохранить форматирование диапазона как переменную?

1 Ответ

0 голосов
/ 26 мая 2019

Вот пример того, как использовать переменные для хранения метода копирования и использовать его позже.Вы можете установить диапазон в переменную CopyRange и использовать CopyRange.Copy для его сохранения, а позже вы можете использовать его, поскольку диапазон был сохранен в CopyRange и не потерян по пути из-за других процессов, выполняющихся по линии.

Option Explicit
Sub CopyDataToTemplate()

Dim ws As Worksheet
Dim srcWB As Workbook
Dim destWB As Workbook
Dim srcWS As Worksheet
Dim destWS As Worksheet
Dim CopyRange As Variant

Dim i As Long, j As Long
Dim srcLRow As Long, destLRow As Long

Set destWB = Excel.Workbooks("DOLine_example.xlsx")
Set srcWB = ActiveWorkbook
Set srcWS = srcWB.ActiveSheet
Set destWS = destWB.Sheets("DOLine")

srcLRow = srcWS.Cells(srcWS.Rows.Count, "A").End(xlUp).Row
destLRow = destWS.Cells(destWS.Rows.Count, "A").End(xlUp).Row

Application.ScreenUpdating = False
'loop through column 1 to 19
For i = 1 To 19
    For j = 1 To 13
        'loop through columns

            If destWS.Cells(3, i).value = srcWS.Cells(1, j).value Then    
                ' Copy column B to Column D as written in your code above
                Set CopyRange = srcWS.Range(Cells(2, j), Cells(srcLRow, j))
                    CopyRange.Copy
                ' paste columns from one wb to Columns to another wb
                destWS.Cells(destLRow, i).PasteSpecial Paste:=xlPasteAll, Transpose:=False
                Application.CutCopyMode = False
            End If
    Next j
Next i
Application.ScreenUpdating = True
MsgBox "Process completed!", vbInformation
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...