【问题标题】:Excel VBA: Userfom - textbox value depends on combobox valueExcel VBA:用户表单 - 文本框值取决于组合框值
【发布时间】:2014-03-29 15:52:51
【问题描述】:

我正在创建用户表单,我将使用它来插入数据,然后制作一些其他东西。

我有一个带有组合框和几个文本框的用户窗体。 ComboBox 填充了范围内的数据。我想根据 ComboBox 值更改 TextBoxes 的值。文本框的值应填充工作表中的特定值。我考虑过创建 For Each 循环以确定所选 ComboBox 值的 Row,然后使用 Row number 更改 TextBoxes 并设置适当的偏移量。

工作表是带有标题的表格,并填充了姓名、城市等数据。

但是我的代码在 Userform 中不起作用。

有什么想法有什么问题或者解决问题的方法不同吗?

kclient = 组合框名称

Private Sub klient_Change()

Dim MyCell As Range, MyRange As Range
Dim wiersz As Long

Set MyRange = Range("klienci")

For Each MyCell In MyRange
    If klient.Value = MyCell.Value Then
    wiersz = MyCell.Value
    Exit For:
    End If
Next

MsgBox (wiersz)

End Sub

【问题讨论】:

  • 如何初始化组合框?像这样Klient.List = Range("klienci")?在这种情况下,您可以像这样使用 sth 从命名范围获取客户端索引:Klient.ListIndex
  • @simoco 我对 Userforms 很陌生...我的初始化是用 ComboBox RowSource 属性编写的。您是否建议将此声明发送至Userform_initialize
  • 使用RowSource 很好:) 关于你的主要问题,你可以使用这一行来获取范围内组合框的选定项目的地址:MsgBox Range("klienci").Cells(1 + Klient.ListIndex, 1).Address(我想你的 rowSource 正好是klienci范围)
  • 所以本质上 - 您是否想在另一个文本框或 MsgBox 中显示组合框中选择的值...您的 IF 要求相同的值...所以您可以删除 IF 和直接将klient.Value 分配给文本框...否则您的范围必须至少为2 列宽,您遍历第1 个comumn 并返回第2 个列(或这样...)?
  • @simoco 你的代码:MsgBox Range("klienci").Cells(1 + Klient.ListIndex, 1).Address 正是我想要的。现在引用这个单元格,我可以显示不同的值。我根据自己的需要对其进行了修改,非常棒!请发布anwser,以便我接受;)

标签: excel combobox textbox userform vba


【解决方案1】:

随着 cmets 对问题的跟进,此代码有效:

Private Sub klient_Change()
    MsgBox Range("klienci").Cells(1 + Klient.ListIndex, 1).Address
    'do something else, e.g. get element one to the right:
    MsgBox Range("klienci").Cells(1 + Klient.ListIndex, 1).Offset(,1).Address
End Sub

【讨论】:

  • 确实,我所做的只是从Address 更改为Row 并且msgbox 可以更改为我现在需要的任何内容。如果我的代码按预期工作,我总是使用 msgbox 作为测试;)谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多