Поиск последних строк в трех (3) отдельных листах.VBA Excel 2007 - PullRequest
0 голосов
/ 01 августа 2011

Я пытался написать несколько кодов для копирования и вставки данных между листами в Excel.И часть этого процесса включает в себя поиск последнего ряда или второго-последнего ряда каждого из трех листов.Но после нахождения последней строки на первом листе и после активации 2-го листа программа продолжает выдавать ошибку «Ошибка 13: несоответствие типов».Как мне решить эту проблему ??

  Sub DeleteRow()

 Dim StartRow, Lastrow2, NuRow As Long
StartRow = 3
 Dim LastColumn As Long
 Dim LastRow As Long
 Dim LastCell As Long

Sheets("Sheet1").Activate
    'Search for any entry, by searching backwards by Rows.

LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows,  SearchDirection:=xlPrevious).Row

NuRow = LastRow - 1
Range(StartRow & ":" & NuRow).Select
Rows(StartRow & ":" & NuRow).Delete

Sheets("Sheet2").Activate
LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Range(1 & ":" & LastRow).Select
Selection.Copy

Sheets("Sheet1").Select
Selection.Insert Shift:=xlDown



    'Delete first two and last lines

Range("A1").Select
Rows("1:2").Delete
Range("A65536").End(xlUp).EntireRow.Delete Shift:=xlUp

Sheets("Sheet2").Activate
'Error 13: Type Mismatch -->Lastrow2 = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row  

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Ниже приведен код, основанный на моей интерпретации того, что вы пытаетесь сделать. Вам не нужно выбирать ячейки для работы с ними, и 99,9% времени вам действительно не следует.

Dim StartRow As Long

StartRow = 3

With Sheets("Sheet1")
    LastRow = .Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    .Rows(StartRow & ":" & LastRow - 1).Delete
End With

With Sheets("Sheet2")
    LastRow = .Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    .Rows(1).Resize(LastRow).Copy
    .Rows(1).Resize(LastRow).Insert Shift:=xlDown

    .Rows("1:2").Delete

    .Range("A" & Rows.Count).End(xlUp).EntireRow.Delete Shift:=xlUp
End With

Также при измерении переменных вы должны измерять, как это:

Dim StartRow as long, Lastrow2 as long, NuRow As Long

В вашем исходном коде, поскольку вы только измеряли размер последней переменной, startrow и lastrow2 будут вариантами данных, а не long.

0 голосов
/ 01 августа 2011

Если у вас есть непрерывные данные, вы можете использовать CurrentRegion или, если вы знаете, что у вас есть данные вплоть до полных, например, с помощью

lrow = Range("A65000").end(xlup).row

, чтобы найти последнюю строку.

...