1

VBAは初めてで、Excelで使用できます。

ユーザーフォームがあり、ルックアップを使用して、ComboBox3に入力された値からTextBox4に入力しようとしています。コンパイルする次のコードがありますが、文字列が見つからないことを示すmsgboxを生成しています...

Private Sub ComboBox3_Change()

    Dim strFind As String
    Dim rFound As Range
    ws = "Year-to-Date Summary"

    If ComboBox3.ListIndex > -1 Then
        strFind = ComboBox3
        On Error Resume Next
        With ws.Column(2, 3)
            Set rFound = .Find(What:="strFind", After:=.Cells(39, 49), _
            LookIn:=.Cells(39, 49), LookAt _
            :=.Cells(39, 49), SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
            MatchCase:= False)
        End With

        If rFound Is Nothing Then
            MsgBox strFind & " cannot be found"
            Exit Sub
        Else
            TextBox4 = rFound(1, 2)
        End If

    End If

End Sub

Vlookupも試しましたが、このエラーメッセージが表示されました...

Private Sub ComboBox3_Change()

TextBox4.Text = WorksheetFunction.VLookup(Val(ComboBox3.Text), _
Sheets("Year-to-Date Summary").Range("C39:C49" & LastRow), 2, False)

End Sub
4

4 に答える 4

1
  1. wsはバリアントです。このようなワークシートは割り当てません。あなたは使用する必要がありますSet
  2. strFindは引用符で囲まれているため、文字列と見なされます

この例を参照してください(未テスト

Private Sub ComboBox3_Change()
    If ComboBox3.ListIndex = 0 Then Exit Sub

    Dim strFind As String
    Dim ws As Worksheet
    Dim rFound As Range

    Set ws = ThisWorkbook.Sheets("Year-to-Date Summary")

    strFind = ComboBox3.Value

    Set rFound = ws.Columns(3).Find(What:=strFind, LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    If Not rFound Is Nothing Then
        TextBox4 = rFound.Offset(,1)
    Else
        MsgBox strFind & " cannot be found"
    End If
End Sub

範囲が固定されている場合 は、上記のコードでに変更ws.Columns(3)してください。ws.Range("C39:C49")

ワークシート関数を使用したい場合は、これ(試してテスト済み

:以下のコードではエラートラップを使用していません。私はあなたがそれの世話をすることができると確信しています。

Private Sub ComboBox3_Change()
    If ComboBox3.ListIndex = 0 Then Exit Sub

    TextBox4.Text = Application.WorksheetFunction.VLookup( _
                    Val(ComboBox3.Value), _
                    Sheets("Year-to-Date Summary").Range("C39:D49"), _
                    2, _
                    False _
                    )
End Sub

C39:C49 / Columns(3) + Offset最初の例でどのように使用C49:D49したか、2番目の例でどのように使用したかに注意してください

編集:コメントするのを忘れましたOn Error Resume Next。必要になるまで、絶対に使用しないでください。これは、コードに「黙れ」と言っているようなものです。エラーが見つかった場合:)

于 2012-11-22T13:25:37.747 に答える
0

wsは明らかに文字列であり、.columnプロパティはありません。行をに
置き換えて、それが役立つかどうかを確認します。 ws = "Year-to-Date Summary"
set ws = worksheets("Year-to-Date Summary")

すべてのモジュールに「Option Explicit」があり、アプリが正常にコンパイルされていることを確認しますか?あなたは私が思うそのエラーを見つけたでしょう。

于 2012-11-22T11:17:13.147 に答える
0
Private Sub ComboBox3_Change()

TextBox4.Text = WorksheetFunction.VLookup(Me.ComboBox3.Text, Sheets("Year-to-Date Summary").Range("$B$39:$C$49"), 2, False)

TextBox3.Text = WorksheetFunction.VLookup(Me.TextBox4.Text, Sheets("Year-to-Date Summary").Range("$C$39:$D$49"), 2, False)

End Sub

これは、コンボボックスから2つのテキストボックスを実行するために機能しました

于 2012-11-22T12:49:01.383 に答える
-1

プライベートサブComboBox3_Change()

Dim strFind As String
Dim rFound As Range
Dim ws As Worksheet
Set ws = ActiveWorkbook.Sheets("Year-to-Date Summary")

If ComboBox3.ListIndex > -1 Then
    strFind = ComboBox3.text
    On Error Resume Next

'vlookup部分全体を削除して編集...'範囲内のテキストを検索するためのforループを追加

    Set rSearch = ws.Range("B:C")            
            For Each rFound In rSearch
                If rFound.Value = strFind Then
                 TextBox4.Text = rFound.value
                else
                 MsgBox strFind & " cannot be found"
                 Exit Sub
                End If                
            Next rFound        
End Sub
于 2012-11-22T10:46:30.517 に答える