“结束(xlDown)”怪怪的('End(xlDown)' acting weird

2019-08-04 19:52发布

我怀疑.end(xlDown)行事有点怪异。

Dim rfound As Range

Set rfound = Columns("B:B").Find(What:=Me.ComboBox1.Value, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)

If ComboBox1.Value <> "" And WorksheetFunction.CountIf(Range("B:B"), _
ComboBox1.Value) > 0 And rfound.Offset(0, 1).Value <> "" Then
rfound.Offset(0, 1).End(xlDown).Offset(1, 0).Value = TextBox1.Value

CommandButton1_click ,代码将在B列中搜索任何匹配的标准,然后OffSet到右边的单元格提供我的条件全部满足。 然而,它提示我的消息Run-time error '1004': Application defined or object-defined error

我不知道哪里出了问题。 为了说明:

Answer 1:

您当前的代码

  1. 据推测认为B2作为rfound (注:这将是更好的测试,如果rfound存在后Find以'如果不rfound是Nothing然后)
  2. 然后C2rfound.Offset(0, 1)
  3. rfound.Offset(0, 1).End(xlDown)找到在列C中的最后一个单元的所有其他细胞是空白
  4. rfound.Offset(0, 1).End(xlDown).Offset(1, 0)试图在最后一行下面的单元格一列中输入一个值-没有做不到的。

从下仰望代替,即而不是

Then rfound.Offset(0, 1).End(xlDown).Offset(1, 0).Value = TextBox1.Value
使用
Then Cells(Rows.Count, rfound.Offset(0, 1).Column).End(xlUp).Offset(1, 0) = TextBox1.Value



Answer 2:

我的三个仙...

美丽不编写复杂的代码,但打破它在简单易懂线,使其更容易理解的代码做什么。 此外,它可以帮助如果发生错误,调试它...

  1. 你已经知道你要写信给上校ç何必让它更复杂更通过Offset
  2. 如果测试rfound存在的brettdj建议
  3. 使用xlUp找到了最后一排。

看到这个例子。 (

Sub Sample()
    Dim rfound As Range
    Dim lRow As Long

    With ThisWorkbook.Sheets("Sheet1")
        Set rfound = .Columns(2).Find(What:=Me.ComboBox1.Value, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext)

        If Not rfound Is Nothing Then
            If ComboBox1.Value <> "" And _
            WorksheetFunction.CountIf(.Range("B:B"), ComboBox1.Value) > 0 And _
            rfound.Offset(, 1).Value <> "" Then

                '~~> Find the next available row in Col C
                lRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1

                '~~> Directly write to the cell
                .Cells(lRow, 3).Value = TextBox1.Value
            End If
        Else
            MsgBox "Not Found"
        End If
    End If
End Sub


文章来源: 'End(xlDown)' acting weird