2017-01-10 4 views
0

Я пытаюсь выбрать последнюю ячейку в столбце, скопировать его значение и вставить в другую книгу. В первой книге я создал кнопку в пространстве. Как только вы нажмете на эту кнопку, я хочу, чтобы она исчезла, возьмите значение из другой книги (журнал NCR), добавьте 1 к значению и вставьте его в первую книгу, где была кнопка. Я предположил, что это будет легко, но когда я запускаю макрос, я получаю ошибку времени выполнения 424: Object Required. Что-нибудь здесь выглядит странно? Журнал - это всего лишь набор столбцов и строк в excel ... Ничего уникального в этом нет.Выбор последней ячейки в столбце - Ошибка 424?

Для справки: Журнал NCR - это книга, с которой я пытаюсь получить значение. NCRDONE - это книга, в которую я пытаюсь включить значение. Столбец B в журнале - это то, откуда я хочу получить последнюю ячейку. I4 - это ячейка, в которой мне бы хотелось, чтобы значение было в NCRDONE.

Sub tryingtoaDD() 

With ActiveSheet 
For Each Sh In .Shapes 
    If Not Application.Intersect(Sh.TopLeftCell, .Range("H3:J5")) Is Nothing Then 
     Sh.Delete 
    End If 
Next Sh 
End With 

ScreenUpdating = False 

Workbooks.Open ("R:\Quality\NCR's\NCR Log\NCR Log.xlsm") 

ActiveSheet.Range("B" & Cells.Rows.Count).End(xlUp).Select.Copy 

Workbooks.Open ("R:\Quality\NCR's\NCR Log\NCRDONE.xlsm") 

Range("I4").Select.Paste.Select 


ActiveCell.Value = ActiveCell.Value + 1 




ScreenUpdating = True 
End Sub 

Любая помощь была бы принята с благодарностью!

+3

Удалить «.Select» это команда типа '.copy' или' .paste' и не имеет детей. –

+0

'Range (" I4 "). Вставить 'вставьте его для вас. Вам не нужно выбирать ячейку, поскольку код знает, что I4 - это то, где паста должна идти –

+0

@ Mr.Burns нет, это не так. Объект Range/cell не имеет метода Paste. –

ответ

2

Это следует сделать это:

Sub tryingtoaDD() 

Dim WBLog as Workbook 
Dim WBDone as Workbook 

With ActiveSheet 
For Each Sh In .Shapes 
    If Not Application.Intersect(Sh.TopLeftCell, .Range("H3:J5")) Is Nothing Then 
     Sh.Delete 
    End If 
Next Sh 
End With 

ScreenUpdating = False 

Set WBLog = Workbooks.Open("R:\Quality\NCR's\NCR Log\NCR Log.xlsm") 
Set WBDone = Workbooks.Open("R:\Quality\NCR's\NCR Log\NCRDONE.xlsm") 
WBLog.ActiveSheet.Range("B" & Cells.Rows.Count).End(xlUp).Copy _ 
    Destination:=WBDone.ActiveSheet.Range("I4") 

ActiveCell.Value = ActiveCell.Value + 1 

ScreenUpdating = True 
End Sub 

В исходном коде, это не получится:

ActiveSheet.Range("B" & Cells.Rows.Count).End(xlUp).Select.Copy 

Поскольку Select является метод, который не возвращение объекта, следовательно, 424 (Object Required): вы пытаетесь вызвать метод (.Copy) из не-объекта.

Эта линия также будет работать по аналогичным причинам.

Range("I4").Select.Paste.Select 

Обратите внимание, что метод Copy имеет дополнительный параметр, Destination который мы можем использовать, чтобы точно определить, где паста должна привести. Вот что я сделал в ответе выше.

+1

Вы избили меня до этого и сделали лучшую работу, вы заслужили мою +1 –