'结束(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
。
我不知道问题在哪里。 为了说明:
您当前的代码
- 大概会发现
B2
为rfound
(注意:如果rfound
在“如果没有find什么东西”之后存在) - 然后
C2
被rfound.Offset(0, 1)
-
rfound.Offset(0, 1).End(xlDown)
find列C中的最后一个单元格,因为所有其他单元格都是空白的 -
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…
- 你已经知道你必须写给Col C,所以为什么使用
Offset
使它更复杂 - 按照brettdj的build议testing
rfound
存在 - 使用
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