如何根据用户表单组合框选择查询单元格中的数据并将数据复制到用户表单文本框中

Posted

技术标签:

【中文标题】如何根据用户表单组合框选择查询单元格中的数据并将数据复制到用户表单文本框中【英文标题】:How to query data in cells based off of userform combo box selection and copy data into userform textbox 【发布时间】:2019-07-24 22:04:08 【问题描述】:

我确信这是一个简单的问题,但我对此仍然很陌生,并且正在努力学习。你们已经给了我很大的帮助。

我在工作簿中有一个工作表,用于存储我输入到用户表单文本框中的数据选项。这个想法是,我在用户窗体上的组合框中输入一个名称,然后单击“保存”按钮,该按钮将文本从各种文本框中复制到隐藏的电子表格中,稍后我可以使用另一个按钮“加载”该电子表格。

我保存文本框数据的代码工作正常,但是我在让组合框引用我创建的动态范围(在一列中)时遇到问题。另外我不确定如何编写代码来从组合框选择所在的行中复制数据。

例子:

名称 Datafield1 Datafield2 Datafield3 Preset1紫色10000香蕉

我希望我的组合框在名称下填充动态范围,并自动将“紫色”、“10000”、“香蕉”复制到文本框 1、2 和 5 中

我之前已经让组合框填充静态范围,但我从未尝试过根据我在组合框中选择的内容来填充用户表单测试框

对于动态范围部分,我有几行代码可以使范围处于活动状态的工作表并为组合框设置行源

我不确定从哪里开始引用组合框选择行中的其他单元格

到目前为止,我没有收到任何错误消息,因为我不知道如何让动态范围工作或如何让文本框填充。提前感谢您的帮助,你们太棒了。


Private Sub Userform_Initialize() 

'Empty preset name combo box 

presetname.value = ""

With Sheet6
   Range("A2", Range("A" & Rows.count).end(xlUp)).name = "presetnamerange"
End With 
   Me.presetname.rowsource = "presetnamerange"

End Sub



'I have a sub for the combo box but I'm not sure what to put in it

Sub presetname_change()

With Sheet6

'????

End With 

End Sub 




【问题讨论】:

【参考方案1】:

我不确定您要将文本框值存储在哪里,所以我只是将它们存储在单元格 A1、B1、C1 的隐藏工作表中。这可以轻松更改以满足您的需求。

我会这样做:

Userform_Initialize() 子位于模块中,通过单击位于数据所在工作表中的按钮来调用:

Option Explicit

Sub Userform_Initialize()
Dim sht As Worksheet
Dim sourceRng As Range
Set sht = ThisWorkbook.Worksheets("Name of the Sheet") 'where the data is

With sht
    Set sourceRng = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp))
End With
UserForm1.ComboBox1.List = sourceRng.Value
Load UserForm1
UserForm1.Show

End Sub

当按钮被按下时,用户窗体出现并且组合框已经被初始化。

位于用户窗体本身的ComboBox1_Change() sub 会在组合框的值更改时触发。发生这种情况时,文本框会自动加载相应的值。

Option Explicit

Private Sub ComboBox1_Change()
Dim sht As Worksheet
Dim dataRng As Range
Set sht = ThisWorkbook.Worksheets("Name of the Sheet") 'where the data is

With sht
    Set dataRng = .Range(.Range("A2"), .Range("D" & .Rows.Count).End(xlUp))
End With
TextBox1.Value = Application.WorksheetFunction.VLookup(ComboBox1.Value, dataRng, 2)
TextBox2.Value = Application.WorksheetFunction.VLookup(ComboBox1.Value, dataRng, 3)
TextBox3.Value = Application.WorksheetFunction.VLookup(ComboBox1.Value, dataRng, 4)

End Sub

最后,点击保存按钮,将文本框的值写入隐藏的工作表。 SaveButton_Click() 子也位于用户表单中。

Private Sub SaveButton_Click()
Dim sht As Worksheet
Dim dataRng As Range
Set sht = ThisWorkbook.Worksheets("Name of hidden Sheet") 'where the data should be stored
With sht
    .Range("A1").Value = TextBox1.Value
    .Range("B1").Value = TextBox2.Value
    .Range("C1").Value = TextBox3.Value
End With
Unload UserForm1
UserForm1.Hide
End Sub

【讨论】:

非常感谢,这绝对有帮助。一切正常,除了我无法让组合框填充 dataRng 值。我确定我做错了什么,但我无法弄清楚。我会上传代码,但它位于独立系统上。我会继续检查,看看我是否胖了一些东西。再次感谢! @ARCHER1919 我不确定我是否理解问题所在。请记住,上面代码中的组合框填充了sourceRng 而不是dataRng。所以基本上当组合框展开时,您会看到Preset1Preset2 等作为下拉菜单的选项。这不是你需要的吗? dataRng 仅用作变量来保存数据所在的范围,以便可以执行 VLookUp 我很抱歉。我遇到的问题是组合框根本没有填充。这是我的一个错字。看起来我需要更好地关注细节。再次感谢您帮助我解决这个问题!

以上是关于如何根据用户表单组合框选择查询单元格中的数据并将数据复制到用户表单文本框中的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 Microsoft Access 中的组合框选择导航到表单

如何根据组合框选择使子表单显示数据?

如何根据在表单上的组合框控件中输入的内容从查询中选择所有记录

限制DataGridView c#中的输入

如何根据多个单元格中的值自动填充

在MS访问中的子表单上显示查询结果