单击列表框

时间:2016-03-18 19:09:04

标签: excel vba listbox

我有一个列表框(例如:数据来自A4:A100来自属性菜单中的rowsource)

如果有人点击列表框中的顶部项目(单元格A4),则在文本框中我想显示其旁边的单元格中的内容(单元格B4),下一个文本框I想要显示单元格C4等中的任何内容......

这对我来说是新的,所以请用你的术语轻松 - 到目前为止我有这个:

Private Sub ListBox1_AfterUpdate()
Me.TextBox1.Value = Application.WorksheetFunction.VLookup(ListBox1.Value, Range("A1:B1"), 4, False)

End Sub

我哪里错了?

CLICK HERE TO SEE THE PICTURE

2 个答案:

答案 0 :(得分:0)

使用此:

Private Sub ListBox1_AfterUpdate()
    Me.TextBox1.Value = Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Sheets("the_sheet_name").Range("A1:D100"), 2, False)
    Me.TextBox2.Value = Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Sheets("the_sheet_name").Range("A1:D100"), 3, False)
    Me.TextBox3.Value = Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Sheets("the_sheet_name").Range("A1:D100"), 4, False)
End Sub

如果您使用range names会更好,因为您可以在工作簿中“全局”使用它,那么您可以在没有the_sheet_name部分的情况下使用。

Private Sub ListBox1_AfterUpdate()
    Me.TextBox1.Value = Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Range("myRange"), 2, False)
    Me.TextBox2.Value = Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Range("myRange"), 3, False)
    Me.TextBox3.Value = Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Range("myRange"), 4, False)
End Sub

其中Range("myRange")Sheets("the_sheet_name")内的名称范围,范围为Range("A1:D100")

您可以在子徽章Me.Textbox1.value =...ListBox1_AfterUpdateListBox1_Click

中使用代码ListBox1_Change

好吧,当你使用VlookUp时,你会说:

VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

先生。 VloopUp,在这个单元格/列中查找此值,并返回列号#中的值,并且数据不是ordened = False | is ordened = True

如果您使用range("K1:N100")列中的K,您不知道您在哪一行拥有您正在寻找的价值,那就是您使用VlookUp的原因,并且您说,返回第1列或第2列或第3列或第4列(K - N),如果您想要列O中的值,则需要将范围设置为{{1} },并要求返回第5列,因为,不是工作表中列的编号,是您选择的范围内的列数。

有关VlookUp

的详情,请参阅此处

编辑#2

正如您在评论中提到的那样,您可以格式化range("K1:O100")返回的值的格式为VlookUp

Format

其中:

a = Format(Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Range("myRange"), 2, False), "dd-mmm-yyyy") :是一个变量,您可以存储,可以是aString类型

Variant:是执行操作的函数

Format:是您想要的日期格式。并且可以按照您的需要。例如:

"dd-mmm-yyyy"

玩得开心。

您可以在此处详细了解Format

答案 1 :(得分:0)

你可以避免VLooking

Private Sub ListBox1_AfterUpdate()
Dim ws As Worksheet
Dim iRow As Long

Set ws = ThisWorkbook.Worksheets("textbox")
With Me
    iRow = Me.ListBox1.ListIndex + 4

    .TextBox1.Value = ws.Cells(iRow, 2)
    .TextBox2.Value = ws.Cells(iRow, 3)
    .TextBox3.Value = ws.Cells(iRow, 4)
End With

End Sub