Excel VBA - 在最后一个非空行中插入值时出现错误“1004”

时间:2017-01-11 09:38:35

标签: excel vba excel-vba

我得到运行时错误'1004'

  

应用程序定义或对象定义的错误

当我尝试从B19开始插入值时。

以下是代码:

Private Sub test()

If Application.CountIf(Sheets("Sheet1").Columns(2), Range("A5").Value) Then
    MsgBox "Already taken, try another username"
Else
    MsgBox "Done"
    Sheets("Sheet1").Range("B19" & Rows.Count).End(xlUp).Offset(1, 0) = Range("A5").Value

End If

End Sub

此代码的目的是将值从A5插入到从B19开始的最后一个非空行。

2 个答案:

答案 0 :(得分:0)

2条评论:

首先:CountIf返回一个数字,所以如果至少有一个Count,你应该检查结果是否是> 0(不是True)。

第二:使用Range之后的数据到达最后一行(" B19"),您需要使用.Range("B" & .Rows.Count).End(xlUp).Offset(1, 0)

尝试以下代码:

Private Sub test()

With Sheets("Sheet1")
    If Application.CountIf(.Columns(2), .Range("A5").Value) > 0 Then
        MsgBox "Already taken, try another username"
    Else
        If .Cells(.Rows.Count, "B").End(xlUp).Row < 19 Then ' <-- check if the last row in Column B is less than 19
            .Range("B19").Value = .Range("A5").Value
        Else
            .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("A5").Value
        End If

        MsgBox "Done"           
    End If
End With

End Sub

答案 1 :(得分:0)

你可以试试这个:

Private Sub main()
    With Sheets("Sheet1")
        With .Range("B19:B" & WorksheetFunction.Max(.Cells(.Rows.Count, 2).End(xlUp).Row, 19))
            If Application.CountIf(.Cells, .Parent.Range("A5").Value) > 0 Then
                MsgBox "Already taken, try another username"
            Else
                .Cells(.Rows.Count + IIf(IsEmpty(.Cells(.Rows.Count)), 0, 1)).Value = .Parent.Range("A5").Value
                MsgBox "Done"
            End If
        End With
    End With
End Sub