在Excel中找到第一个空行并选择

时间:2015-06-29 22:19:11

标签: excel vba excel-vba

我尝试根据自己的需要改编这篇文章:Error in finding last used cell in VBA,但无法让它发挥作用。

我将数据粘贴到新工作表中,然后想要选择数据后的第一个空行。目前正在发生的是粘贴数据,然后选择工作表中的第一行。见下面的代码。有什么想法吗?

'runs when user enters data
If Target.Cells.Count = 1 And _
   Not Application.Intersect(Target, [I3:I10000]) Is Nothing Then

    Application.EnableEvents = False
    'User inputs type of event
    Archive = InputBox("Was this event a Win, Loss, or Close? (Please input Win/Loss/Close)")
With Target

    If Archive = "Win" Then
    'all data to transfer is selected and cut
            .EntireRow.Select
            Selection.Cut
    'the receiving sheet is selected and data is pasted to the selected cell
        Sheets("Win").Select
            ActiveSheet.Paste
    'the selection on the sheet the data was cut from is deleted
        Sheets("Begin").Select
            Selection.Delete
    'this is the issue I'm having - I want to select the row below the row I just copied into.
        Sheets("Win").Select
           lastRow = Range("C" & .Rows.Count).End(xlUp).Row
           ActiveSheet.Range("C" & lastRow & ":C" & lastRow).EntireRow.Select
       Sheets("Begin").Select

2 个答案:

答案 0 :(得分:2)

尝试替换它:

'this is the issue I'm having - I want to select the row below the row I just copied into.
Sheets("Win").Select
    lastRow = Range("C" & .Rows.Count).End(xlUp).Row
    ActiveSheet.Range("C" & lastRow & ":C" & lastRow).EntireRow.Select

用这个:

With Sheets("Win")
    lastRow = .Range("C" & .Rows.Count).End(xlUp).Row
    .Cells(lastRow + 1, 1).EntireRow.Select
End With

答案 1 :(得分:1)

只是添加到现有答案。你可以通过使用更像这样的结构来避免做出这么多的选择:

On Error GoTo problem

Dim Archive As String

If (Target.Cells.Count = 1) And _
   Not (Excel.Application.Intersect(Target, [I3:I10000]) Is Nothing) Then

    Excel.Application.EnableEvents = False
    'User inputs type of event
    Archive = InputBox("Was this event a Win, Loss, or Close? (Please input Win/Loss/Close)")

    With Target

        '>>>> good idea to defend against users entering "win" instead of "Win"
        If (LCase(Archive) = "win") Then

            '>>>> find the last row in Win sheet at the beginning
            With Sheets("Win")
               lr = .Range("C" & .Rows.Count).End(Excel.xlUp).Row
            End With

            '>>>> as you are cutting there should be no need to do any subsequent deletion or clearcontents 
            .EntireRow.Cut Sheets("Win").Rows(lr + 1)

        End If

    End With
End If

problem:
Excel.Application.EnableEvents = True