Избегайте копирования кнопок в диапазоне - PullRequest
0 голосов
/ 06 марта 2020

У меня есть макрос, в который я копирую, вставляю диапазон, в котором также есть кнопки. Теперь я не хочу, чтобы кнопки были скопированы. Как я могу это сделать?

Я копирую всю таблицу и вставляю ее снова в A32.

lrow = .Cells(Rows.Count, 1).End(xlUp).row
Do While counter = 0
  For i = 32 To lrow
    If .Cells(i, 1).Value = "Review Participants" And counter = 1 Then
     lastrev = lrowrev
     lrowrev = i - 1 'row where the second last review starts
     aboveR = lrowrev - lastrev
     Exit For
    ElseIf .Cells(i, 1).Value = "Review Participants" And counter <> 1 Then
     counter = counter + 1
     lrowrev = i


     lcol = 11  'hardcode last col ~~ Alt:  'lcol = .Cells(i + 1, .Columns.Count).End(xlToLeft).Column 'last meeting of the review is our reference for lastcol
        ElseIf counter = 1 And i = lrow Then
        lrowrev = i + 2
        aboveR = (i + 2) - 32
        Exit For
End If
Next
Loop

lastcolumn = Split(Cells(, lcol).Address, "$")(1)
Set rngtocopy = .Range("A" & 32 & ":" & lastcolumn & lrowrev)

Debug.Print rngtocopy.Address

'aboveR = .Range("A" & 32 & ":" & lastcolumn & lrowrev - 1).Rows.Count ' amount of rows copied

Set rngins = .Range("A32").EntireRow
Debug.Print rngins.EntireRow.Resize(aboveR + 2).Address


        rngins.EntireRow.Resize(aboveR + 2).Insert xlShiftDown 'insert the amount of rows, we copied
        'Range("A" & lrow).Offset(5).EntireRow.Hidden = False

             Set rngins = .Range("A32")
             Debug.Print rngins.Address
             rngtocopy.Copy
             rngins.PasteSpecial Paste:=xlPasteAll

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Теперь я не хочу, чтобы кнопки копировались. Как я могу это сделать?

Вы также можете использовать PasteSpecial . Вы можете воспользоваться перечислением XlPasteType , чтобы скопировать и вставить только соответствующую часть. Например, вот один вкладыш на случай, если вы хотите вставить

A . Все кроме изображения

rng.PasteSpecial Paste:=xlPasteAllUsingSourceTheme

B . Только Значения

rng.PasteSpecial Paste:=xlPasteValues

В действии

enter image description here

0 голосов
/ 06 марта 2020

Попробуйте этот код, пожалуйста:

Sub copyRangeNoButt()
  Dim sh As Worksheet, rng As Range, arrRng As Variant
  Set sh = ActiveSheet
   Set rng = sh.Range("D2:E10"): rng.Copy
   arrRng = rng.value
   With sh.Range("H2").Resize(UBound(arrRng, 1), UBound(arrRng, 2))
        .value = arrRng
        .PasteSpecial xlPasteFormats'comment this line if format is not needed. It takes much more time than all the rest of the code, in case of a big range...
   End With
End Sub

Конечно, вы должны адаптировать код, чтобы использовать определение диапазона для копируемого определения и ячейку для вставки (даже если в другом листе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...