2016-09-26 7 views
0

データを検索してそれを読み取ることができるユーザーフォームを作成しようとしています。記録のために、私はthis tutorialに従っています。私のフォームの仕組みはID番号を入力する必要があるので、どのようなデータ(ある意味ではVlookupのようなもの)が分かるようにする必要があります。問題は、コマンドボタンを押すとデータが取得されないことです!ここに私のコードです:ExcelVBA:データを検索して読み取るユーザーフォームを作成しようとしています

Private Sub CommandButton1_Click() 

row_number = 0 
Do 
DoEvents 
row_number = row_number + 1 
item_in_review = Sheets.("Ark1").Cells(row_number, "A") 
    If item_in_review = TextBox1.Text Then 
     TextBox2.Text = Sheets("Ark1").Cells(row_number, "B") 
     TextBox3.Text = Sheets("Ark1").Cells(row_number, "C") 
    End If 
Loop Until item_in_review = "" 

End Sub 

助けていただければ幸いです。

+0

私たちはあなたを助けました。今すぐ約束された_appreciation_を表示し、いくつかのフィードバックを送ってください。ありがとうございました – user3598756

答えて

0

ここは私が通常行っていることです。すべての(または最初の)結果を配列にロードしてみてください。その行番号を使用して他のすべての情報を検索してください。

rowsArray(i) = ActiveSheet.Range("A:A").EntireColumn.Find _ 
       (What:=productsArray(i), _ 
         LookIn:=xlValues, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False).Row 
0

まずオフ

Sheets.("Ark1").Cells(row_number, "A")

Sheets("Ark1").Cells(row_number, "A")

でなければなりませんそして、私は次のようにあなたが最初TextBox1.Text

に有効な任意の値をチェックしなければならないと思います:

Option Explcit 

Private Sub CommandButton1_Click() 
    Dim row_number As Long 

    With Me 
     If .TextBox1.Text = "" Then 
      MsgBox "please input valid text in 'TextBox1'", vbExclamation 
      Exit Sub 
     End If 
     Do 
      DoEvents '<-- what's this for? 
      row_number = row_number + 1 
      item_in_review = Sheets("Ark1").Cells(row_number, "A") 
      If item_in_review = .TextBox1.Text Then 
       .TextBox2.Text = Sheets("Ark1").Cells(row_number, "B") 
       .TextBox3.Text = Sheets("Ark1").Cells(row_number, "C") 
       Exit Sub '<--| if you want the first match to fill TextBox2 and TextBox3 
      End If 
     Loop Until item_in_review = "" 
    End With 
End Sub 
関連する問題