Как извлечь данные из 2 листов Excel и отобразить их в полях формы VB - PullRequest
1 голос
/ 14 мая 2011

У меня есть данные на 2 листах, скажем, sheet2 и sheet3, и значения в столбце1 обоих листов одинаковы.Поэтому я создал пользовательскую форму с 1 раскрывающимся списком (Combobox1), 4 полями для текстового поля и 1 полем для списка.

раскрывающийся список выбирает данные из столбца 1 (например, A2: 20) листа 2, а затем после выбора значения он должен отображать соответствующие значения строки в текстовом поле, например, соответственно: из листа 2 соответствующий столбец 2 должен отображаться вtextbox1, col-3 в textbox2, col4 в textbox3, col5 в textbox4.в то время как из sheet3 он должен соответствовать строке, в которой значение column1 соответствует выбранному значению из выпадающего списка (выпадающий список), и все соответствующие значения (в Col 2 - Col52) должны отображаться в пользовательской форме ListBox1.Я новичок в VBA и Excel, поэтому с помощью Google, наконец, я смог выполнить некоторые из вышеупомянутых задач, но я не понимаю, как подключить выбранные значения диапазона к textbox'ам и списку.Любая помощь будет высоко оценена и станет хорошим уроком для меня.вот половина и не рабочий код, который я создал.

Private Sub ComboBox1_Change()

Application.ScreenUpdating = False


Dim CL As Object

Worksheets(2).Select

For Each CL In Worksheets(2).Range("A2:A20")
If CL = ComboBox1.Text Then
Range(ActiveCell, ActiveCell.Offset(0, 4)).Copy Destination:=ActiveCell.Offset(0, 5)

End If
Next
Worksheets(2).Select
End Sub



Private Sub UserForm_Activate()
ComboBox1.RowSource = "A2:A20"
End Sub

1 Ответ

1 голос
/ 14 мая 2011

Это может привести вас на правильный путь:

Private Sub ComboBox1_Change()
    Dim rw As Long, cl As Range

    rw = WorksheetFunction.Match(Me.ComboBox1.Value, Worksheets("Sheet2").Range("A1:A20"), 0)
    TextBox1 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 1)
    TextBox2 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 2)
    TextBox3 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 3)
    TextBox4 = Worksheets("Sheet2").Range("A" & rw).Offset(0, 4)

    ListBox1.Clear

    For Each cl In Worksheets("Sheet3").Range("B" & rw & ":AZ" & rw) //Here AZ is column 52 in worksheet
        ListBox1.AddItem cl
    Next cl
End Sub

Private Sub UserForm_Activate()
    ComboBox1.RowSource = "A1:A20"
End Sub

Обновление

Если вы хотите, чтобы ListBox отображал данные горизонтально, то:

  1. В свойствах ListBox установите ColumnHeads на True
  2. В свойствах ListBox установите ColumnCount равно 52

Теперь замените For each cl... код aboe на:

Dim rng As Range
Set rng = Worksheets("Sheet3").Range("B" & rw & ":AZ" & rw)
Me.ListBox1.RowSource = rng.Address
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...