2017-02-08 4 views
1

Я пытаюсь настроить форму пользователя для выполнения цикла и поиска информации в моей таблице, которая находится в отдельном листе в той же книге.Мой код не будет работать с моей пользовательской формой, почему?

Я хочу, чтобы моя пользовательская форма искала информацию в моей таблице, когда я печатаю, а затем автоматически заполняю другие текстовые поля, чтобы я мог ограничивать нажатия клавиш и дубликаты.

Я нашел код, который работал с другой формой пользователя по желанию. Однако, когда я пытаюсь использовать тот же код для своей таблицы, он проходит через цикл, как будто он выглядит, но не заполняет пользовательскую форму. Я попытался изменить имена текстовых полей пользовательских форм и убедиться, что имена совпадают ... но безрезультатно. Мне также нужно пропустить поле со списком в моей пользовательской форме, может ли это повлиять на мой код?

Option Explicit 

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

Sub GetData() 

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 = 4 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 = 2 To 4 
     ' UserForm1.Controls("TextBox" & j).Value = "" 
    Next j 
    End If 

Else 

End If 

End Sub 
+0

Вы можете написать 'userform1.repaint' перед' End Sub' линии? – Vityata

+0

Когда вы запускаете эту пользовательскую форму, является ли «отдельный рабочий лист» активным? Если нет, квалифицируйте весь свой диапазон объектов до ссылки на рабочий лист – user3598756

+0

, почему вы устанавливаете i как строку, а затем используете ее для хранения чисел? наверно, ты бы смутил его как долго? – Zerk

ответ

0

пытаются квалифицировать свои диапазоны до рабочего листа ссылка:

Option Explicit 

Sub GetDataA() 
    Dim id As String, i As String, j As Integer, flag As Boolean 

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

     With Worksheets("myTableWorksheetName") '<--| change "myTableWorksheetName" to your actual worksheet with table name 
      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 
     End With 

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

@ Vicelikeelm, вы прошли через это? – user3598756

+0

Нет, мне не повезло с этим, но я все еще пытаюсь пройти через него, и я до сих пор не знаю, почему он не работает. – Vicelikeelm

+0

пройдите через свой код (F8, чтобы перейти к следующему оператору, который должен быть выполнен желтым выделенным) и используйте Immediate Window (CTRL + G), чтобы запросить значение соответствующих переменных (например, внутри цикла вы можете ввести '? .Cells (i + 1, 1) .Value' и нажмите «вернуться», чтобы увидеть результат – user3598756

Смежные вопросы