2013-12-10 9 views
3

Я пробовал различные способы сделать эту пасту, но ни один из них не работает. Я чрезвычайно новичок в программировании, поэтому мне нужна помощь с пониманием того, почему я продолжаю получать либо ошибку 1004, либо 5. Я даже не понимаю, что означают эти ошибки.Excel VBA: проблемы с вставкой

Cells(hotcell).Copy 
Cells.Offset(0, 1).PasteSpecial 

или ... Вставить, ... PasteSpecial = xlpasteall ... pastespecial Paste: = xlpasteall, Range (Cells ("B" & я)) паста, Range ("B" & я.) .paste и т. д., как указано выше.

У меня полная потеря. Все остальное в программе работает нормально. Я просто не могу заставить его вставить мои скопированные значения в нужные ячейки (все они смещены на определенное количество столбцов, но в той же строке). Помощь и объяснение оба оценены.

Редактировать Благодаря ОБОИХ из ответов, которые я получил, я смог решить свою проблему. Я действительно не мог найти хороший ответ в любом месте, где бы я ни выглядел. Спасибо!

Решение, которое я использовал, был один из самых простых:

rng.Offset(0, 1) = rng.Text 

Еще раз спасибо плакатах, которые ответили, и те, кто комментировал. Я делал это слишком сложно.

+0

Добро пожаловать! Это не ответ, просто комментарий: часто начинающие пытаются с копией и вставкой, когда более простые «Ячейки (R1, C1) .Value = Cells (R2, C2) .Value' будет делать работу лучше и быстрее. Будет ли это работать на вас? – stenci

+0

Когда вы используете «Ячейки», вы ссылаетесь на весь «Диапазон» листа, и вы не можете использовать «Смещение» в нем, потому что его некуда компенсировать. Таким образом, вы получите сообщение об ошибке '1004'. Чтобы узнать способы копирования и вставки, см. Сообщение BK201. Это должно заставить вас начать. – L42

+0

Также мне интересно, какая ценность 'hotcell' в вашем коде. 'Ячейки', я думаю, принимают числовой аргумент. Если значение 'hotcel' не является числовым значением, вы получите' error 5'. см. мое сообщение для полного объяснения – L42

ответ

3

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

Нет Пасты подход

Sub CP1() 
    'This basically just transfers the value without fuss. 
    Dim Rng As Range 
    Set Rng = Range("A1") 
    Rng.Offset(0,1) = Rng.Value 
End Sub 

Простая паста подход

Sub CP2() 
    'This copies a cell exactly as it is. 
    Dim Rng As Range 
    Set Rng = Range("A1") 
    Rng.Copy Rng.Offset(0,1) 'Read: Copy Rng to Rng.Offset(0,1). 
    Application.CutCopyMode = False 
End Sub 

Специальная паста подход

Sub CP3() 
    'This copies the format only. 
    Dim sRng As Range, tRng As Range 
    Set sRng = Range("A1") 
    Set tRng = sRng.Offset(0, 1) 
    sRng.Copy 
    tRng.PasteSpecial xlPasteFormats 
    Application.CutCopyMode = False 
End Sub 

Попробуйте определить из трех, которые вы хотите, и соответствующим образом измените. ;)

Надеюсь, это поможет.

+0

Очень полезно спасибо! – lizard053

3

Объяснение:

Cells.Offset(0,1).PasteSpecial 

Это даст Error 1004 так Cells относятся ко всему диапазону листа, и нет никакого способа для вас, чтобы компенсировать это.

Cells(hotcell).Copy 

Это даст вам Error 5, если значение hotcell не является числовым значением.
я думаю Cells только принимается числовой аргумент, если вы использовали выше синтаксис.

Как использовать клетки: (Excel 2007 и выше версии)

1.Определение синтаксиса R, C: клетки (RowNumber, ColumnNumber)

Cells(1,1) 'refers to Range("A1") 
Cells(1,2) 'refers to Range("B1") 
Cells(2,1) 'refers to Range("A2") 

2.Use Ряд только

Cells(1) 'refers to Range("A1") 
Cells(2) 'refers to RAnge("B1") and so on 
Cells(16385) 'refers to Range("A2") 

3.using клетки только

Cells.Copy 'copies the whole range in a sheet 
Cells.Resize(1,1).Copy 'copies Range("A1") 
Cells.Resize(1,1).Offset(0,1).Copy 'copies Range("B1") 
Cells.Resize(2,1).Copy 'copies Range("A1:A2") 

4.Using числа и буквы (Это работает только на Ячейки (RowNum, ColNum) синтаксис)

Cells(1, "A").Copy 'obviously copies A1 
Cells(1, "A").Resize(2).Copy 'copies A1:A2 

Теперь, как скопировать и вставить.
Предположим, вы хотите скопировать A1: A5 и вставьте в следующую колонку, которая Б.

Cells.Resize(5,1).Copy Cells.Resize(5,1).Offset(0,1) 

выше будет работать, потому что вы ResizeCells первым, прежде чем делать Offset.
Значения A1: A5 теперь будут скопированы в B1: B5.
Надеюсь, это вам поможет.

+0

Огромное спасибо за всю информацию! Это действительно помогло тонну. – lizard053

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