1

我怀疑它的.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_clickB 列中搜索任何匹配的条件,然后OffSet在我的条件都满足的情况下搜索正确的单元格。但是,它提示我一条消息Run-time error '1004': Application defined or object-defined error

我不知道问题出在哪里。举例说明:

在此处输入图像描述

4

2 回答 2

9

您当前的代码

  1. 大概发现B2rfound (注意:最好在with `If Not rfound Is Nothing Thenrfound之后测试是否存在)Find
  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

于 2012-12-27T13:12:44.517 回答
1

我的三分钱...

美妙之处不在于编写复杂的代码,而是将其分解为易于理解的行,以便更容易理解代码的作用。如果发生错误,它还有助于调试它......

  1. 你已经知道你必须写到 Col C 所以为什么要让它变得更复杂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
于 2012-12-27T15:24:40.833 回答