2017-01-28 13 views
0

ユーザーフォームを設定してループを実行しようとしています。シートにあり、大きなデータベースである自分のテーブルを参照するために参照しています。ループを使用したユーザーフォームのロックアップ

私は入力した内容を調べ、他のテキストボックスを自動入力して、重複の数を制限してストリームをより多く並べることができます。

私のコードはTextbox1に埋め込まれており、変更後にコードを実行するように設定されています。それはまだ働いていないし、私はこれを理解しようと何日も何週間も働いてきました。

Option Explicit 

Dim id As String, i As String, j As Integer, flag As Boolean 

Sub GetDataA() 

If Not IsNumeric(UserForm1.TextBox1.Value) Then 
    flag = False 
    i = 0 
    id = UserForm1.TextBox1.Value 

    Do While Cells(i + 1, 1).Value <> "" 
     If Cells(i + 1, 1).Value = id Then 
      flag = True 
      For j = 2 To 7 
       UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value 
      Next j 
     End If 
     i = i + 1 
    Loop 

    If flag = False Then 
     For j = 5 To 10 
      UserForm1.Controls("TextBox" & j).Value = "" 
     Next j 
    End If 
Else 

End If 

End Sub 
+0

ときのテスト 'IsNumeric関数'が失敗すると、ループに入るべきではありません。 –

答えて

0

あなたのコードのこのリファクタリングを採用することもできます

Option Explicit 

Sub GetDataA() 
    Dim j As Integer 
    Dim f As Range 

    With UserForm1 '<--| reference your userform 
     If Not IsNumeric(.TextBox1.Value) Then Exit Sub '<--| exit sub if its TextBox1 value is not a "numeric" one 

     Set f = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Find(what:=.TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole) '<--| try and find its TextBox1 value along column "A" cells from row 1 down to last not empty one 
     If f Is Nothing Then '<--| if not found 
      For j = 5 To 10 
       .Controls("TextBox" & j).Value = "" 
      Next j 
     Else '<--| if found 
      For j = 2 To 7 
       .Controls("TextBox" & j).Value = f.Offset(, j - 1).Value 
      Next j 
     End If 
    End With 
End Sub 

注:このサブはあなたが変更することができますよりも、UserForm1のコードウィンドウの内側に実際にある場合With UserForm1からWith Me

+0

@Vicelikeelm、あなたはそれを通過しましたか? – user3598756

+0

私はそれを見て、それを私のために働かせようとしていますが、私はそれが文字列のような価値を見て、あなたがコード作業をするので、私がやっていることではないことを調べる必要があります。 – Vicelikeelm

+0

私はあなたを得ません:私のコードは、あなたがあなたの質問に答えたのですか? – user3598756

関連する問題