2013-09-10 6 views
1

У меня есть макрос для копирования всех используемых строк в одном листе Excel (ExcelA) к другому (ExcelB):заселить серийные номера на другом листе

Sub CopyFromOneXL() 
Dim myBook As Workbook, newBook As Workbook 

Set myBook = ThisWorkbook 
Set lRowMyBook = Range("A1").SpecialCells(xlCellTypeLastCell) 
Set newBook = Workbooks.Open("C:\Users\user\Desktop\EXCEL\ExcelB.xlsx") 

newBook.Activate 

Set lRowNewBook = Sheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell) 
lastRowNewBook = lRowNewBook.Row 
lastRowMyBook = lRowMyBook.Row 
lastRowNewBook = lastRowNewBook + 1 

    With newBook 
    myBook.Sheets("Sheet1").Rows("1:" & lastRowMyBook).Copy .Sheets("Sheet1").Rows(lastRowNewBook) 
    .Close savechanges:=True 
    End With 
End Sub 

ExcelB уже использует десять строк (серийные номера от 1 -10), и я использую макрос выше, чтобы добавить еще три строки данных (которые находятся в ExcelA). Есть ли способ добавить серийные номера в ExcelB для трех новых добавленных строк, начиная с 11?

Количество строк на обоих листах может меняться, но в конечном итоге я хочу добавить серийные номера в ExcelB, начиная с того места, где оно было остановлено.

+0

Вы можете добавить = ROW() в подходящую колонку. – pnuts

+1

Спасибо @ pnuts.' = Row() 'works Когда я даю его внутри цикла' For'. Мне было интересно, есть ли другой способ, не используя цикл 'For', для этого требуется слишком много времени, если есть 1000 строк. Просто любопытно. – Pheww

+0

Проще, если вы можете положить = ROW() в исходное? Скажем, добавьте ColumnA и сделайте его частью того, что копируется. – pnuts

ответ

0

OP хотел проиндексировать инкрементные записи, где удобно индексированные номера соответствовали номерам строк для записей, скопированных с кодом из другого листа. Вместо добавления такого индекса с циклом в код для копирования приращений было бы целесообразно добавить формулу (=ROW()) для нее в исходный лист, который затем будет автоматически копироваться с существующим кодом.

0

Когда я добавил код ниже, он сработал.

With newBook 
myBook.Sheets("Sheet1").Rows("1:" & lastRowMyBook).Copy .Sheets("Sheet1").Rows(lastRowNewBook) 
    Set newLRowNewBook = Sheets("Sheet1").Range("A1").SpecialCells(xlCellTypeLastCell) 
newLastRowNB = newLRowNewBook.Row 
'MsgBox newLastRowNB 
For i = lastRowNewBook To newLastRowNB 
    Cells(i, 1).Formula = "=Row()" 
Next 
.Close savechanges:=True 
End With 

Хотя макрос занимает некоторое время для запуска, если имеется 1000 строк. Просто интересно, есть ли другой способ достичь этого, не используя цикл For.

Спасибо.

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