На основе одного текстового поля другие текстовые поля будут автоматически заполняться данными с нескольких листов

#excel #vba #userform

#excel #vba #пользовательская форма

Вопрос:

У меня есть пользовательская форма, которая извлекает данные из более чем одного листа на основе записи в первом текстовом поле («Число»). До сих пор мне удавалось заставить его вводить данные с одного листа, но не с другого. Моя пользовательская форма («LineView») имеет следующие текстовые поля: Number — это то, в которое я ввожу номер задания (например, «J1234») и на основе этого заполняет остальные. Эти извлекаются из листа («Задания»), JobName — Это извлекается из столбца 2, CustomerName — Это извлекается из столбца 3, Адрес — Столбец 7, Инструкции по доставке — Столбец 8, Контакт — Столбец 5, Контактный телефон — Столбец 6, Остальные извлекаются из листа («Двери») Код, который я написал для текстовых полей, которые берут данные с рабочего листа («Двери»), работает. У меня возникают проблемы только с извлечением информации из листа («Задания»). Это код, который я написал до сих пор.

 Private Sub Number_Change()
   Dim j As Worksheet
   Dim d As Worksheet
   Set j = Sheets("Jobs")
   Set d = Sheets("Doors")
   Dim LR As Long
   Dim r As Long
   Dim i As Long
   DoorList.Clear
    With Worksheets("Doors")
    LR = .Range("A" amp; .Rows.Count).End(xlUp).row
    For r = 2 To LR
        If .Cells(r, 5).Value = Number.Value Then
            DoorList.AddItem .Cells(r, 1).Value
            DoorList.List(i, 0) = .Cells(r, 1).Value
            DoorList.List(i, 1) = .Cells(r, 2).Value
            DoorList.List(i, 2) = .Cells(r, 4).Value
            DoorList.List(i, 3) = .Cells(r, 6).Value
            DoorList.List(i, 4) = .Cells(r, 7).Value
            DoorList.List(i, 5) = .Cells(r, 15).Value
            i = i   1
End If
Next r
End With
With DoorList
.ColumnCount = 6

'Fill Time Cells
Jbox.Value = Application.SumIf(d.Range("E:E"), Number.Value, d.Range("H:H"))
DMBox.Value = Application.SumIf(d.Range("E:E"), Number.Value, d.Range("I:I"))
SBox.Value = Application.SumIf(d.Range("E:E"), Number.Value, d.Range("J:J"))
PHBox.Value = Application.SumIf(d.Range("E:E"), Number.Value, d.Range("K:K"))
CDBox.Value = Application.SumIf(d.Range("E:E"), Number.Value, d.Range("L:L"))
CJBox.Value = Application.SumIf(d.Range("E:E"), Number.Value, d.Range("M:M"))
COBox.Value = Application.SumIf(d.Range("E:E"), Number.Value, d.Range("N:N"))

End Sub
  

Я перепробовал много разных способов, но не могу заставить ни один из них работать.

Заранее спасибо за вашу помощь и время.

Комментарии:

1. Похоже, что там нет никакого кода, который извлекает информацию из «Заданий», поэтому трудно сказать, в чем может быть проблема.

2. Я ввел то, что, как я думал, было одним из способов, которыми я выполнял эту часть ранее, и просто протестировал это, и это сработало !!!? Я не знаю, чем я отличаюсь от других времен!? Это то, что я сейчас ввел и работает:

3. ‘Заполните детали задания с помощью листов («Задания») Для r = 2 до LR, если .Ячейки (r, 1).Значение = Число.Значение, затем JobName. Значение = .Ячейки (r, 2) имя_пользователя. Значение = .Адрес ячеек (r, 3). Значение = .Cells(r, 7) DeliveryInstructions. Значение = .Ячейки(r, 8) контактируют. Значение = .Ячейки (r, 5) Контактный телефон. Значение = .Ячейки(r, 6) заканчиваются, если следующее r заканчивается на