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_clickすると、コードは列 B で一致する条件を検索し、OffSet条件がすべて満たされている場合は右側のセルを検索します。ただし、メッセージが表示されますRun-time error '1004': Application defined or object-defined error

どこに問題があるのか​​ わかりません。説明のために:

ここに画像の説明を入力

4

2 に答える 2

1

私の3セント...

美点は、複雑なコードを書くことではなく、コードが何をするのかを理解しやすくするために、理解しやすい行に分割することです。また、エラーが発生した場合のデバッグにも役立ちます...

  1. Col C に書き込む必要があることは既にわかっているのに、なぜそれをより複雑にするのかOffset
  2. rfoundbrettdjが提案したように存在するかどうかをテストします
  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 に答える