2016-04-05 4 views
0

Я пытаюсь создать код, который позволяет мне вставлять выбранный диапазон данных и вставлять его в Book2 в первую пустую ячейку в столбце A, начиная с A1. Это то, что я получил до сих пор:.Вставить в первую доступную ячейку

Sub Macro 1()   
     Range(Selection, Selection.End(xlToRight)).Select 
     Range(Selection, Selection.End(xlDown)).Select    
     Selection.Copy 

     Windows("Book2.xlsm").Activate 
     **CurrentRow = Range("A1").End(xlDown).Offset(1, 0).Row** 
     ActiveSheet.Paste 
    End Sub 

Я считаю, что проблема является линией со звездочками (**) Может кто-то помочь мне переписать эту строку/код, скопированные данные можно вставить в первом доступная ячейка от A1 вниз? (Up не будет работать, так как я заполнил ячейки дальше по диаграмме). . Сейчас код вставки данных в любой выделена ячейка :(

Спасибо за вашу помощь всем

+1

Вы даже не указали таблицу см [Как избежать использования Выберите в Excel VBA макросов] (http://stackoverflow.com/questions/10714251/how-to-avo id-using-select-in-excel-vba-macros) для методов отказа от использования выбора и активации для достижения ваших целей. – Jeeped

+0

Спасибо за подсказку @ Jeeped Я прочитаю статью :) – BMRobin

ответ

1

Попробуйте это:

Dim book2 As Excel.Window 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 

    Workbooks("Book2").Activate 
    Range("A1").Select 
    Selection.End(xlDown).Select 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    ActiveSheet.Paste 
+1

Это сработало отлично @michwalk Огромное спасибо! – BMRobin

0

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

Sub Better() 

Dim Wb As Workbook 
Dim rng1 As Range 
Dim rng2 As Range 

Set rng1 = Range(ActiveCell, ActiveCell.End(xlToRight)) 
Set rng1 = Range(rng1, rng1.End(xlDown)) 

On Error Resume Next 
Set Wb = Workbooks("book2.xlsm") 
On Error GoTo 0 

If Wb Is Nothing Then Exit Sub 

Set rng2 = Wb.Sheets(1).Columns(1).Find("*", Wb.Sheets(1).[a1], , , xlByRows, xlPrevious) 
If rng2 Is Nothing Then Set rng2 = Wb.Sheets(1).[a1] 
rng1.Copy rng2.Offset(1, 0) 

End Sub 
+0

Спасибо @brettdj Должен ли я что-то делать с зеленой звездочкой? – BMRobin

+0

О, я наклеил имя документа. Это сработало. Но он вставил его в A1, а не первую доступную ячейку в столбце A, начиная с вершины :(@brettdj. Есть ли что-то, что мы можем изменить в коде? Спасибо! – BMRobin