2009-10-21 2 views
1

В Excel VBA (или если вы можете использовать C#, я использую библиотеку объектов Excels от .NET), как скопировать лист из одной книги на другой лист в другую книгу. В основном, то, что я делаю, копирует каждый мой лист в центральный рабочий лист в другой книге, а затем сделает все, что мне нужно сделать. Я попытался использовать метод Range.Copy, я дал параметр Destination в качестве диапазона другой книги. Он работал отлично, но есть одна проблема: каждый раз, когда я копирую, он заменяет старые данные на этом листе. Как мне сделать что-то подобное, чтобы при вставке пасты в конец листа.Таблица Excel copy

EDIT: Я искал и нашел способ, но теперь, когда я копирую клетки я получаю COM исключение с сообщением «Для того, чтобы вставить все ячейки из листа Excel в текущий лист, необходимо вставить в первой ячейки (A1 или R1C1) ".

Ниже приводится код, он находится в C#

logWorksheet = logWorkbook.ActiveSheet as Excel.Worksheet; 

Excel.Range tempRange = logWorksheet.Cells[logWorksheet.Rows.Count, "A"] as Excel.Range; 
tempRange = tempRange.get_End(Excel.XlDirection.xlUp); 

int emptyRow; 

if (tempRange.Row > 1) 
    emptyRow = tempRange.Row + 1; 
else 
    emptyRow = tempRange.Row; 

string copyLocationAddress = Convert.ToString(emptyRow); 

Excel.Range copyLocation = logWorksheet.get_Range(
          "A" + copyLocationAddress, Type.Missing) as Excel.Range; 

// copy whole workbook to the central workbook 
tempLogSheet.Cells.Copy(copyLocation); 
+0

Worksheets имеют конечный размер, так что если вы копируете целые листы , нет места для «добавления» более одного на один рабочий лист. – wakingrufus

ответ

1

- ОБНОВЛЕНИЕ -

Этот фрагмент кода копирует клетки A1: A3 из BOOK1 в Book2. Он найдет последнюю использованную ячейку в книге 2 и добавит данные под нее.

Sub CopyRange() 

Dim source As Worksheet 
Dim destination As Worksheet 
Dim emptyRow As Long 

Set source = Workbooks("Book1.xlsx").Sheets("Sheet1") 
Set destination = Workbooks("Book2.xlsx").Sheets("Sheet1") 

'find empty row (actually cell in Column A)' 
emptyRow = destination.Cells(destination.Rows.Count, 1).End(xlUp).Row 
If emptyRow > 1 Then 
    emptyRow = emptyRow + 1 
End If 

source.Range("A1:A3").Copy destination.Cells(emptyRow, 1) 

End Sub 

- OLD -

Этот образец копии всех листов Book1.xlsx к Book2.xlsx:

Workbooks("Book1.xlsx").Worksheets.Copy Before:=Workbooks("Book2.xlsx").Sheets(1) 
+0

Действительно, да. Но я хочу скопировать содержимое листа на другой лист, который находится в другой книге;) – akif

+0

Возможно, вы должны уточнить заголовок как «лист рабочей таблицы Excel» вместо простого листа;) – Marc

+0

ну, он возвращает 1048577 – akif