excel 通过在组合框中选择名称来搜索单元格的行

jvlzgdj9  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(178)

我有一个从Excel工作表中收集数据的用户表单。当用户表单初始化组合框时,从Excel工作表中导入“A”列中的名称。我想要的是从组合框中选择名称,并从名称所在的行中选择信息(例如,所选名称在B4中)textBox1导入单元格B5中的信息,textBox2导入单元格B6中的信息,依此类推。

ljsrvy3e

ljsrvy3e1#

我很难理解你想要什么。
(E.g.所选名称在B4中)textBox 1导入单元格B5中的信息,textBox 2导入单元格B6中的信息,依此类推

案例A

看起来您想从名称为...的单元格下的行中检索信息。

但从下面引用:
我想要的是从组合框中选择一个名称,并从名称为的行中选择信息

案例B

看起来你想从列名和行名旁边的列中检索信息。如果名称在单元格B4中,那么你想textbox 1的值是单元格C4的值,textbox 2的值是单元格D4,依此类推。

病例A代码:

Private Sub ComboBox1_Click()
Dim c As Range: Dim i
With ComboBox1
Set c = Range(.List(.ListIndex, 0))
End With
For i = 1 To 3
Controls("TextBox" & i).Value = c.Offset(i, 0)
Next
End Sub

Private Sub UserForm_Initialize()
Dim rg As Range: Dim cell As Range

With Sheets("Sheet1")
Set rg = .Range("A1", .Range("A1").End(xlToRight))
End With

With ComboBox1
  .ColumnCount = 2
  .ColumnWidths = "0,25"
End With

For Each cell In rg
    With ComboBox1
        .AddItem Replace(cell.Address, "$", "")
        .List(.ListCount - 1, 1) = cell.Value
    End With
Next

End Sub

案例B代码

Private Sub ComboBox1_Click()
Dim c As Range: Dim i
With ComboBox1
Set c = Range(.List(.ListIndex, 0))
End With
For i = 1 To 3
Controls("TextBox" & i).Value = c.Offset(0, i)
Next
End Sub

Private Sub UserForm_Initialize()
Dim rg As Range: Dim cell As Range

With Sheets("Sheet1")
Set rg = .Range("A2", .Range("A2").End(xlDown))
End With

With ComboBox1
  .ColumnCount = 2
  .ColumnWidths = "0,25"
End With

For Each cell In rg
    With ComboBox1
        .AddItem Replace(cell.Address, "$", "")
        .List(.ListCount - 1, 1) = cell.Value
    End With
Next

End Sub

将文本框命名为:TextBox 1、TextBox 2、TextBox 3等。根据文本框的数量更改代码中的循环数。
基本上该代码“偷偷地”做了一个两列的组合框,其中第一列包含的单元格地址是隐藏的(列宽为0)。
当组合框中的项目被选择时,使用来自所选择项目的组合框隐藏列的地址,它用该值填充每个文本框。
请注意,使用这种代码,您不能跳过要在文本框中显示的列/行值。示例案例A:选定单元格A1中的名称时,您希望TextBox 1显示单元格A2的值,TextBox 2显示单元格A4的值。选定单元格A2中的名称时,您希望TextBox 1显示单元格B2的值,TextBox 2显示单元格D2的值。

相关问题