2016-12-06 12 views
0

У меня есть кадр данных из R, который мне нужно вставить в первую пустую строку открытой таблицы Excel. Я пробовал много вещей, но мне не повезло. Ниже приведена последняя попытка. Этот первый набор кодов генерирует «Ошибка времени выполнения» 1004: «Определенная приложением или объектная ошибка».Вставка значений из буфера обмена в Excel с использованием VBA

Dim NextRow As Range 
Set NextRow = Range("B" & Sheets("TC-9").UsedRange.Rows.Count + 1) 
Worksheets("TC-9").Range("A" & NextRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

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

Cells(Range("C1000000000").End(xlUp).Row + 1, 3).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

Любые предложения? Я новичок в VBA.

+1

можно дублировать http://stackoverflow.com/questions/5552299/how-to-copy-to-clipboard-using-access-vba –

+0

Что такое рабочий процесс, что вы следуете : вы копируете R-код, затем вы выбираете свой открытый лист, верно? ... У вас есть кнопка в вашем файле excel с рутиной или что-то в этом роде? – Hackerman

+0

http://stackoverflow.com/questions/9022245/get-text-from-clipboard-using-gettext-avoid-error-on-empty-clipboard вы можете использовать R Addin? –

ответ

1

Попробуйте

dim lastrow as integer 

With Worksheets("TC-9") 
    lastrow = .UsedRange.Rows(.UsedRange.Rows.Count).Row 
    .Range("A" & lastrow + 1).PasteSpecial xlPasteValues, _ 
     Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

End With 
0

В вашей строке PasteSpecial вы указываете Range как Range("A" & NextRow). NextRow был определен как сам Range, и конкатенация String с Range недействительна.

Измените код следующим образом:

Dim NextRow As Long 
NextRow = Sheets("TC-9").Range("B" & Sheets("TC-9").Rows.Count).End(xlUp).Row + 1 
Worksheets("TC-9").Range("A" & NextRow).PasteSpecial 

Примечание: Это скопирует одно значение из буфера обмена. Если вы хотите, чтобы несколько значений копировались в одну строку, они будут работать, если они разделены табуляцией, но не в том случае, если они разделены запятой. (Это, вероятно, может быть сделано, но потребует немного больше работы.)


В вашей второй части кода вы использовали Range("C1000000000"), но в настоящее время Excel имеет ограничение 1048576 строк.

0

Если я понимаю, вы пытаетесь вставить значение в буфер обмена Windows. Проблема в том, что вы не можете использовать значения вставки при вставке из Windows, потому что это не копирование объекта Excel.

Вместо того чтобы использовать Range.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, попробуйте просто с помощью PasteSpecial по себе:

Range.PasteSpecial 

Вы также можете просто использовать метод .Paste, но вам нужно, чтобы выбрать диапазон первого:

Range("A1").select 
ActiveSheet.Paste 

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

Смежные вопросы