#excel #vba #windows
#excel #vba #Windows
Вопрос:
Я просмотрел код для копирования-вставки в VBA. Когда вы это делаете, .PasteSpecial
есть ли какая-либо разница между Paste:=
или ()
(просто используя круглые скобки); например:
Worksheets(1).Range("A2").PasteSpecial Paste=:xlPasteValues
или
Worksheets(1).Range("A2").PasteSpecial (xlPasteValues)
отличается ли это каким-либо образом?
Комментарии:
1. Я не думаю, что понимаю ваш запрос, но разница в двух операторах заключается в том, что: ваш оператор post или копирует данные в диапазон, ничего не помещая в буфер обмена. Ваша инструкция pre или копирует данные из буфера обмена в соответствии с указанными вами требованиями
Ответ №1:
Да, они разные
полная функция
PasteSpecial([Paste As XlPasteType = xlPasteAll], [Operation As XlPasteSpecialOperation = xlPasteSpecialOperationNone], [SkipBlanks], [Transpose])
вы можете заметить, что все аргументы являются необязательными
это .PasteSpecial Paste=:xlPasteValues
означает Set arg Paste to xlPasteValues
а также
.PasteSpecial SkipBlanks:=True, Paste:=xlPasteValues
означает Set arg SkipBlanks to True and Set arg Paste to xlPasteValues
Но
.PasteSpecial (xlPasteValues)
означает Set FIRST arg to xlPasteValues
Ответ №2:
Исследование копирования / вставки (PasteSpecial)
- Поместите некоторые данные в диапазон
A1:A10
и прокомментируйте те части кода, которые вам в данный момент не нужны, чтобы увидеть различия.
Код
Option Explicit
Sub PSpecInv()
Const wsID As Variant = 1 ' e.g. "Sheet1" or 1 or...
Const srcAddress As String = "A1:A10"
Const tgtAddress As String = "B1"
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = wb.Worksheets(wsID)
Dim src As Range: Set src = ws.Range(srcAddress)
Dim tgt As Range: Set tgt = ws.Range(tgtAddress)
' Copy/Paste
' Equivalents of a 'normal' copy/paste
'The 'Selection' stays the same, 'CutCopyMode' is set to 'False'.
src.Copy tgt
src.Copy Destination:=tgt
' Copy/PasteSpecial
' After each of the following three code blocks, the 'Selection'
' on the worksheet becomes the Target Range ('B1:B10') and
' the 'CutCopyMode' gets set to 'True'.
' Equivalents of a 'PasteValues' copy/paste
src.Copy
tgt.PasteSpecial xlPasteValues
tgt.PasteSpecial Paste:=xlPasteValues
' I don't know why the following line even works!
tgt.PasteSpecial (xlPasteValues) ' works only if first argument (solo).
'Application.CutCopyMode = False
' Copy/PasteSpecial: Two Ways
' You have to know the order of the arguments:
src.Copy
tgt.PasteSpecial xlPasteValues, , True
'Application.CutCopyMode = False
' You don't care about the order of the arguments:
src.Copy
tgt.PasteSpecial SkipBlanks:=True, Paste:=xlPasteValues
'Application.CutCopyMode = False
' The 'Assign' method (preferred)
'The 'Selection' stays the same, 'CutCopyMode' stays the same.
tgt.Resize(src.Rows.Count, src.Columns.Count).Value = src.Value
End Sub