Excel 单击列表框中的某个项目时填充文本框数据

Excel 单击列表框中的某个项目时填充文本框数据,excel,vba,listbox,Excel,Vba,Listbox,我有一个列表框(例如:数据来自属性菜单中的rowsource的A4:A100) 如果有人单击列表框(单元格A4)中的顶部项目,那么在文本框中,我想显示它旁边单元格中的任何内容(单元格B4),在下一个文本框中,我想显示单元格C4中的任何内容,等等 这对我来说是新的,所以请简单地使用您的术语-到目前为止,我有: Private Sub ListBox1_AfterUpdate() Me.TextBox1.Value = Application.WorksheetFunction.VLookup(Li

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

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

这对我来说是新的,所以请简单地使用您的术语-到目前为止,我有:

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

End Sub
我哪里做错了

使用以下方法:

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
如果您使用
范围名称
会更好,因为您可以在工作簿中“全局”使用它,然后您可以不使用
工作表名称
部分

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”)
工作表(“工作表名称”)
中的名称范围,范围为
范围(“A1:D100”)

您可以在更新后的子runtine
ListBox1\u中使用代码
Me.Textbox1.value=…
,或单击
ListBox1\u更改

嗯,当你使用
VlookUp
时,你会说:

VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])
VloopUp先生,在该单元格/列中查找该值,并在列编号#中返回该值,数据未排序=False |排序=True

如果在列
K
中取
范围(“K1:N100”)
,您不知道在哪一行中有您要查找的值,这就是为什么要使用
VlookUp
,并且您说,返回列1或2或3或4(
K
-
N
),如果需要列
O
中的值,则需要将范围设置为
范围(“K1:O100”)
,并要求返回列5,因为,不是表中的列数,而是所选范围内的列数

有关详细信息,请参阅此

编辑#2

正如您在注释中所要求的,格式化从
VlookUp
返回的值的方法是使用
format

a = Format(Application.WorksheetFunction.VLookup(Me.ListBox1.Value, Range("myRange"), 2, False), "dd-mmm-yyyy")
其中:

a
:是一个可以存储的变量,可以是
字符串
变量
类型

格式
:是执行操作的函数

“dd-mmm-yyyy”
:是您想要的日期格式。可以是你需要的。例:

mmmm >>> January
yyyy >>> 2016
dd   >>> 02
d    >>> 2
dddd >>> Monday
mmm  >>> Jan
mm   >>> 01
m    >>> 1 
祝你玩得开心


在这里,您可以了解更多信息。

您可以避免偷看

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

太棒了,真是太棒了,谢谢你!你能更详细地解释一下这个部分吗?因为我看不出它是如何工作的“范围(“A1:B100”),2,False”。如果我把它改为A1:C100,那么它将从C列搜索。难以置信!很高兴找到这个网站,发现你这么有帮助。谢谢,祝你在未来好运进一步提问,道歉-你给我的很好,但只是注意到日期以不同的格式显示-这是一个简单的修复,比如修改文本框的属性吗?我花了点时间把它放在正确的位置,但它起了作用!在过去的一个小时里,我学会了更多的与你交谈,这比我过去几天试图通过互联网获取的东西还要多。高度赞赏