我怀疑.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
。
我不知道问题出在哪里。例如:
答案 0 :(得分:9)
您当前的代码
B2
为rfound
(注意:最好在rfound
之后测试Find
是否存在,如果不是那么) C2
为rfound.Offset(0, 1)
rfound.Offset(0, 1).End(xlDown)
找到C列中的最后一个单元格,因为所有其他单元格都是空白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
答案 1 :(得分:1)
我的三分钱......
美丽不在于编写复杂的代码,而是在易于理解的行中分解它,以便更容易理解代码的作用。如果发生错误,它也有助于调试它......
Offset
rfound
是否存在为brettdj建议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