我有一个列表框(例如:数据来自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
我哪里错了?
答案 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_AfterUpdate
或ListBox1_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")
:是一个变量,您可以存储,可以是a
或String
类型
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