'End(xlDown)' acting weird

不羁岁月 提交于 2019-12-02 07:00:22

Your current code

  1. Presumably finds B2 as rfound (Note: It would be better to test if rfound exists after the Find with `If Not rfound Is Nothing Then)
  2. Then C2 is rfound.Offset(0, 1)
  3. rfound.Offset(0, 1).End(xlDown) find the last cell in column C as all other cells are blank
  4. rfound.Offset(0, 1).End(xlDown).Offset(1, 0) tries to enter a value in the cell one row below the very last row - no can do.

Look up from the bottom instead, ie rather than

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

My three cents...

The beauty is not in writing complex codes but breaking it up in easy to understand lines so that it is easier to understand what the code does. Also it helps in debugging it if an error occurs...

  1. You already know that you have to write to Col C so why make it more complex by using Offset
  2. Test if rfound exists as brettdj suggested
  3. Use xlUp to find the last row.

See this example. (UNTESTED)

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!