Вставка значений только с использованием VBA: ошибка "Невозможно получить свойство PasteSpecial класса Range - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь заставить работать небольшой макрос. По сути, все, что я хочу изменить, - это вставить только значения.

Я не написал большую часть этого кода, только несколько фрагментов. И это выглядит так:

Private Sub CommandButton1_Click()

Dim LRSrc As Long, LRDest As Long, SrcRng As Range

With Sheets("Input sheet")
    LRSrc = .Cells(.Rows.Count, 1).End(xlUp).Row 'assumes column 1 is contiguous
    Set SrcRng = .Range("A2:G" & LRSrc)
End With
If WorksheetFunction.CountA(Range("A2:G2")) = 0 Then
Dim emptyErr As Integer
emptyErr = MsgBox("Data missing or incomplete! Please type in all the fields, starting from row 2", vbOKOnly, "No data")

Else

With Sheets("General inventory")
    LRDest = .Cells(.Rows.Count, 2).End(xlUp).Row
    SrcRng.Copy .Cells(LRDest + 1, 2)
End With
Dim answer As Integer
answer = MsgBox("Data sent to inventory! Do you wish to clear the sheet?", vbYesNo + vbQuestion, "Empty Sheet")
If answer = vbYes Then
    SrcRng.ClearContents

End If

End If

End Sub

Я пытался решить это, внося следующие изменения:

With Sheets("General inventory")
    LRDest = .Cells(.Rows.Count, 2).End(xlUp).Row
    SrcRng.Copy .Cells(LRDest + 1, 2).PasteSpecial(xlPasteValues)
End With
Dim answer As Integer
answer = MsgBox("Data sent to inventory! Do you wish to clear the sheet?", vbYesNo + vbQuestion, "Empty Sheet")
If answer = vbYes Then
    SrcRng.ClearContents

Но это дает мне ошибку

Ошибка времени выполнения'1004':

Невозможно получить специальное свойство вставки класса Range

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

Я ценю время, которое вы потратили на чтение этого письма, и благодарю вас за любые советы, которые вы можете дать.

Приветствия,

Дэвид .-

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

, так как вы заинтересованы только в вставке значений, одна строка будет иметь следующий вид:

.Cells(LRDest + 1, 2).Resize(SrcRng.Rows.Count, SrcRng.Columns.Count).Value = SrcRng.Value            

и сократить все это еще немного:

With Sheets("General inventory")
    .Cells(.Rows.Count, 2).End(xlUp).Offset(1).Resize(SrcRng.Rows.Count, SrcRng.Columns.Count).Value = SrcRng.Value
End With
0 голосов
/ 17 октября 2019

Я не думаю, что вы можете вставить значения с 1 строкой в ​​VBA, поэтому вам нужно разделить это на две строки:

SrcRng.Copy
.Cells(LRDest + 1, 2).PasteSpecial (xlPasteValues)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...