VB 组合框的问题,在当前的窗体中有很多个combobox,想在加载当前窗体时对这每个组合框添加同样的下拉内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB 组合框的问题,在当前的窗体中有很多个combobox,想在加载当前窗体时对这每个组合框添加同样的下拉内容相关的知识,希望对你有一定的参考价值。

VB 组合框的问题,在当前的窗体中有很多个combobox,名字为combobox1,combobox2,combobox3,combobox4……combobox16,我想在每次加载当前窗体的时候对这每个组合框添加同样下拉内容A,B,C……H,请给出代码!~~谢谢!

参考技术A 那就用一个combobox控件数组呗!
for i=1 to 16
For j = Asc("a") To Asc("h")
Combo(i).AddItem Chr(j)
Next j
next i追问

我的名字是ComboBoxi,而不是ComboBox(i)

参考技术B Private Sub Form_Load()
Dim x As Control
For Each x In Me.Controls
If TypeName(x) = "ComboBox" Then
For j = Asc("A") To Asc("H")
x.AddItem Chr(j)
Next
End If
Next
End Sub追问

不行哇~~~,
Dim x As Control
For Each x In Me.Controls
If TypeName(x) = "ComboBox" Then
是不是有问题

追答

你用的是什么版本
我在VB6.0上测试过了才发出来的

追问

VBA,是集成在一款三维CAD软件内部的开发工具,首先要谢谢你的关注,其次我把我的问题再详细的实际描述下,希望得到解决:如下,
在当前的窗体中有很多个combobox,名字其实是为
批处理名称1,批处理名称2,批处理名称3,批处理名称4……批处理名称16,我想在每次加载当前窗体(窗体NAME为“批处理增加”)的时候对这每个组合框添加同样下拉内容 中文名称,英文名称,日文名称,请给出代码!~~谢谢

追答

代码在Excel的VBa编辑器上通过

Private Sub UserForm_Activate()'这里注意一下事件 不知道CAD 里的窗体事件是不是一样的
Dim x As ComboBox
For Each x In Me.Controls
x.Clear
For j = Asc("A") To Asc("H")
x.AddItem Chr(j)
Next
Next
End Sub

追问

弹出出差:“For Each x In Me.Controls”,错误13,类型不匹配,事件有可能应该是UserForm_Activate(),但是后面的我不太理解,能麻烦解释下吗?或者按照我上面详述的实际情况再重新做段代码?麻烦你了!~

追答

试试这个吧 如果这样中规中矩的写还不行的话那我也无能为力了
反正这些代码我在VBa里测试通过了的
Private Sub UserForm_Activate()
For i = 0 To Me.Controls.Count - 1 '窗体上所有的控件
If TypeName(Me.Controls(i)) = TypeName(批处理名称3) Then '当控件为ComboBox的时候
Me.Controls(i).AddItem "a" '添加项
End If
Next
End Sub

追问

OK,可以了,感谢@~

本回答被提问者采纳
参考技术C 是vb6还是vb.net?请务必说清楚!追问

精确的说VBA,谢谢!~

参考技术D 不会

VBA - 在 msgbox 之后返回用户窗体

【中文标题】VBA - 在 msgbox 之后返回用户窗体【英文标题】:VBA - Go back to Userform after msgbox 【发布时间】:2022-01-19 21:20:55 【问题描述】:

我有一个用户窗体,其中当前有 15 个组合框。允许用户选择本季度、上季度和去年的 5 个报告。由于有很多可供选择的框,我认为最好应用一些错误处理以避免遗漏任何框。

我的代码是这样的(显然每个盒子都重复了):

If IsNull(UF_RM_Reports.Report1.Value) Then

MsgBoxResult = MsgBox("No report selected for Report 1 current quarter, is this correct?", vbYesNo + vbQuestion, "Report Template")

    If MsgBoxResult = vbNo Then
        End

    Else

    End If

End If

我遇到的问题是,如果用户意识到他们没有选择报告并按否,我已经结束,这不仅会结束宏,还会关闭组合框。如果您然后重新打开它,所有选择都消失了。有点挫败错误处理的意义,因为他们需要重新开始。

我想知道是否有什么可以更改 End 的内容,以停止代码但允许用户返回并选择丢失的报告。

提前致谢

【问题讨论】:

您想退出子,这会将过程返回到表单。 组合框是否命名为 Report1、Report2 等到 Report15 ?如果是这样,您不需要 15 块代码。您可以遍历它们并构建一条消息。 【参考方案1】:

有几种方法可以处理这种情况。由于我不知道您的 UserForm 的详细信息,我将概述一般方法。我倾向于在按下用户窗体上的按钮时验证控件,这表明用户已准备好生成报告:

Private Sub CommandButton1_Click()
   If Trim(Report1.Value) = "" Then
      If MsgBox("No report selected for Report 1...", vbYesNo + vbQuestion, "Report Template") = vbNo Then
         Report1.SetFocus
         Exit Sub
      End If
   End If

   If Trim(Report2.Value) = "" Then
      If MsgBox("No report selected for Report 2...", vbYesNo + vbQuestion, "Report Template") = vbNo Then
         Report2.SetFocus
         Exit Sub
      End If
   End If

   'create the reports when nothing has been missed or
   'the user wants to proceed anyway
   MsgBox "create reports"
End Sub

因为有很多控件,你可以用循环来完成同样的事情:

Private Sub CommandButton1_Click()
   Dim c As Control
   
   For Each c In Me.Controls
      If TypeOf c Is ComboBox Then
         If Trim(c.Value) = "" Then
            If MsgBox("You have not selected all reports.  Is this correct?", vbYesNo + vbQuestion, "Report Template") = vbNo Then
               Report1.SetFocus
               Exit Sub
            Else
               Exit For
            End If
         End If
      End If
   Next
   
   'create the reports when nothing has been missed or
   'the user wants to proceed anyway
   MsgBox "create reports"
End Sub

【讨论】:

【参考方案2】:

如果要求是让用户注意到他/她错过了报告选择这一事实,为什么不在任何一个事件中尝试摆弄组合框的颜色属性——比如?

    在useform激活事件中设置组合框的颜色状态

    Private Sub UserForm_Activate()
    
      ComboBox1.BackColor = vbRed
      UserForm1.ComboBox1.AddItem "A"
      UserForm1.ComboBox1.AddItem "B"
      UserForm1.ComboBox1.AddItem "C"
    
    End Sub
    

    然后在组合框更改事件中将颜色改回原来的颜色

    Private Sub ComboBox1_Change()
         If ComboBox1.value = "" Then
            ComboBox1.BackColor = vbRed
         Else
           ComboBox1.BackColor = &H80000005
         End If
    End Sub
    

【讨论】:

以上是关于VB 组合框的问题,在当前的窗体中有很多个combobox,想在加载当前窗体时对这每个组合框添加同样的下拉内容的主要内容,如果未能解决你的问题,请参考以下文章

谁知道VB中列表框这几个属性的区别

动态改变ComboBox下拉框的宽度

vb 释放Webbrowser控件

列表框的示例

单击保存按钮后如何在用户窗体中添加依赖于另一个组合框的excel vba组合框而不影响清除数据功能

C# 关于在panel中显示窗体的问题