VBA中动态生成的控件

Irocyx 2019-08-06 01:17:13
经上次发帖求助,自动创建了ComboBox控件

Set mcolCombos1 = New Collection
For i = 1 To 5
Dim ctlCombo1 As ComboBox
Set ctlCombo1 = Frame1.Controls.Add("Forms.combobox.1", "modular subbce" & i, True)

With ctlCombo1
.Left = 200
.Top = 30 + (i - 1) * 50 + 6
.Width = 120
.Height = 20
.AddItem "M 5/2 Monostable"
.AddItem "B 5/2 Bistable"
End With

Dim objMyCombo1 As MyCombo
Set objMyCombo1 = New MyCombo

Set objMyCombo1.mctlCombo = ctlCombo1
objMyCombo1.mlngIndex = i

mcolCombos1.Add objMyCombo1
Next i

此外自己创建了几个TextBox控件

Dim oTX As Control
Dim i As Integer
With UserForm1
For i = 1 To 5
Set oTX = Frame1.Controls.Add("Forms.textbox.1", "Txt" & i, True)
With oTX
.Left = 100
.Top = 30 + (i - 1) * 50 + 6
.Width = 80
.Height = 20
End With
Next i
End With

目的是用户自行选择窗体动态生成的ComboBox中的Additem值,选择完分别将值的代码部分显示在TextBox中,将解释保留在ComboBox中。如若选择"M 5/2 Monostable"则TextBox中显示为“M”,ComboBox中显示为“5/2 Monostable”。
由于水平有限,现有以下几个问题:
1.若为窗体控件很容易将两者区分,用窗体控件的change()事件就可解决,但若为动态添加的控件无法进行操作。
2.曾尝试在类模块中加以处理,代码如下:

Option Explicit

Public WithEvents mctlCombo As ComboBox

Public mlngIndex As Long
Public mcolCombosVal1 As String
Public mcolCombosVal1x As String

Private Sub mctlCombo_Change()
MsgBox mcolCombosVal1
mcolCombosVal1x = mcolCombos(1).mctlCombo.Value
mcolCombosVal1 = Mid(mcolCombosVal1x, 1, 1)
UserForm1.Controls("Txt1").Text = mcolCombosVal1
mcolCombos(1).mctlCombo.Value = Mid(mcolCombosVal1x, 4)
End Sub

运行时提示错误“对象变量或with变量块未设置”
不知是为何错误?请指导,水平有限敬请谅解,谢谢!
...全文
538 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
milaoshu1020 2019-08-07
  • 打赏
  • 举报
回复
如果只处理第一个combobox控件的话,可以这样:

Option Explicit

Public WithEvents mctlCombo As ComboBox

Public mlngIndex As Long
Public mstrCombosVal1 As String
Public mstrCombosVal1x As String

Private Sub mctlCombo_Change()
if mlngIndex <> 1 Then
Exit Sub
End If
MsgBox mstrCombosVal1
mstrCombosVal1x = mctlCombo.Text
mstrCombosVal1 = Mid(mstrCombosVal1x, 1, 1)
UserForm1.Controls("Txt1").Text = mstrCombosVal1
mctlCombo.Text = Mid(mstrCombosVal1x, 4)
End Sub
milaoshu1020 2019-08-07
  • 打赏
  • 举报
回复
试试这样:

Option Explicit

Public WithEvents mctlCombo As ComboBox

Public mlngIndex As Long
Public mstrCombosVal1 As String
Public mstrCombosVal1x As String

Private Sub mctlCombo_Change()
MsgBox mstrCombosVal1
mstrCombosVal1x = mctlCombo.Text
mstrCombosVal1 = Mid(mstrCombosVal1x, 1, 1)
UserForm1.Controls("Txt1").Text = mstrCombosVal1
mctlCombo.Text = Mid(mstrCombosVal1x, 4)
End Sub
笨狗先飞 2019-08-06
  • 打赏
  • 举报
回复
https://download.csdn.net/download/bakw/9619630 我原来发过一个例子,参考一下.
经验证,可于EXCEL的VBA使用的二维码(QRMAKER)控件VBA调用QRmaker 由于VBA的窗体环境和VB的差不多,所以在VBA窗体调用QRmaker就不再描述,这里主要说明一下如何在表格引用QRmaker。 第一步:单击Office按钮,在Excel选项开启“开发工具”项,从而让“开发工具”选项卡显示出来。 第二步,插入→其他控件,选择QRmaker。 然后就是在合适的地方绘出QRmaker控件,这时会自动进入“设计模式”,单击“属性”可以展开控件的“属性”栏,可根据需要设置相关属性,和VB的操作雷同。 接下来与VB不一样的地方就是如何在VBA代码引用QRmaker控件了,这点和VB有点小区别。 添加“模块”,添加“过程”,输入代码。 Public Sub QRCodeTest() '定义QRString变量,存储要生成二维码的字符串 Dim QRString As String '给QRString赋值,根据实际情况赋值 QRString = Sheet1.Range("E14") & Sheet1.Range("F14") & ";" & Sheet1.Range("E15") & Sheet1.Range("F15") & ";" & Sheet1.Range("E16") & Sheet1.Range("F16") & "_" & Sheet1.Range("G16") & "_" & Sheet1.Range("F17") & "_" & Sheet1.Range("G17") Sheet1.Select '设置QRmaker的AutoRedraw属性为ArOn Sheet1.QRmaker1.AutoRedraw = ArOn '将字符串传递给QRmaker控件 Sheet1.QRmaker1.InputData = QRString '刷新QRmaker的内容,如果AutoRedraw属性为On,则无需此句 'Sheet1.QRmaker1.Refresh End Sub 然后就可以在Excel表格生成二维码了,根据实际情况,在填写相关数据后,执行上面的语句就可以了,其他的工作该咋的就咋的吧。

2,461

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧