'结束(xlDown)'怪异

我怀疑.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中search任何匹配的条件,然后OffSet到右侧的单元格,条件是我的条件都满足了。 但是,它提示我一条消息Run-time error '1004': Application defined or object-defined error

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

在这里输入图像说明

您当前的代码

  1. 大概会发现B2rfound (注意:如果rfound在“如果没有find什么东西”之后存在)
  2. 然后C2rfound.Offset(0, 1)
  3. rfound.Offset(0, 1).End(xlDown)find列C中的最后一个单元格,因为所有其他单元格都是空白的
  4. rfound.Offset(0, 1).End(xlDown).Offset(1, 0)尝试在最后一行下面的一行中input一个值 – 不行。

而不是从底部往上看

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

我的三分钱…

美不是在编写复杂的代码,而是在易于理解的行中分解,以便更容易理解代码的function。 如果发生错误,它也有助于debugging…

  1. 你已经知道你必须写给Col C,所以为什么使用Offset使它更复杂
  2. 按照brettdj的build议testingrfound存在
  3. 使用xlUp来查找最后一行。

看到这个例子。 ( 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