'结束(xlDown)'表现得很奇怪

时间:2012-12-27 12:42:31

标签: excel vba excel-vba row offset

我怀疑.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

我不知道问题出在哪里。例如:

enter image description here

2 个答案:

答案 0 :(得分:9)

您当前的代码

  1. 可能会发现B2rfound (注意:最好在rfound之后测试Find是否存在,如果不是那么)
  2. 然后C2rfound.Offset(0, 1)
  3. rfound.Offset(0, 1).End(xlDown)找到C列中的最后一个单元格,因为所有其他单元格都是空白
  4. rfound.Offset(0, 1).End(xlDown).Offset(1, 0)尝试在最后一行下面一行的单元格中输入一个值 - 不能这样做。
  5. 从底部向上看,即而不是

    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

答案 1 :(得分:1)

我的三分钱......

美丽不在于编写复杂的代码,而是在易于理解的行中分解它,以便更容易理解代码的作用。如果发生错误,它也有助于调试它......

  1. 您已经知道必须写入Col C,为什么要使用Offset
  2. 使其更复杂
  3. 测试rfound是否存在为brettdj建议
  4. 使用xlUp查找最后一行。
  5. 请参阅此示例。 (的 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