VBA 动态添加控件

VBA 动态添加控件,第1张

vb和vba还是有区别的,尽管他们的语法大致相同。

1应该是控件编号,如果是手动画控件,第一个的编号默认为1

至于为添加的控件添加代码,百度有很多

’将程式码复制到Module中,然後执行 GetOption程序

Sub 察念GetOption()

Dim TempForm 'As VBComponent

Dim NewOptionButton As MSForms.OptionButton

Dim LeftPos As Integer

Dim X As Integer, i As Integer, TopPos As Integer

' 隐藏VBE视窗预防萤幕更新

Application.VBE.MainWindow.Visible = False

' 动态新增UserForm

Set TempForm = ActiveWorkbook.VBProject.VBComponents.Add(3)

' 新增 OptionButtons

LeftPos = 4

k = 1

TopPos = 5

For i = 1 To 3

LeftPos = 4

For j = 1 To 败销困10

'动态新增OptionButton控件

Set NewOptionButton = _

TempForm.Designer.Controls.Add("forms.OptionButton.1")

With NewOptionButton

.Width = 60

.Caption = k & "℃"

.Height = 15

.Left = LeftPos

.Top = TopPos

.Tag = k & "℃"

.AutoSize = True

End With

LeftPos = LeftPos + 30

k = k + 1

Next j

TopPos = i * 20 + 5

Next i

'【写入Click 事件】

For i = 1 To 30

With TempForm.CodeModule

X = .CountOfLines

.InsertLines X + 1, "Private Sub OptionButton" & i & "_Click()"

.InsertLines X + 2, " Cells(8, 8) = Me.ActiveControl.Tag"

.InsertLines X + 3, "End Sub"

End With

Next i

With TempForm

.Properties("Caption") = "温度选项"

.Properties("Width") = LeftPos + 20

.Properties("Height") = TopPos + 20

.Properties("Left") = 160

.Properties("Top") = 150

End With

'显示窗体

VBA.UserForms.Add(TempForm.Name).Show

'关闭後一橱窗体

ActiveWorkbook.VBProject.VBComponents.Remove VBComponent:=TempForm

End 斗扒Sub

VB6有一个新功能,可以动态添加控件,不用控件数组:

object.Add

(ProgID,

name,

container)

参数说明

Object

必需的。一个对象表达式,其值是“应用于”孙团亩列表中的一个对象。

ProgID

必需的。一个标识控件的字符串。大多数控件的

ProgID

都可通过查看对象浏览器来决则森定。控件的

ProgID

是由控件的库和类组成的。

例如,CommandButton

控件的

ProgID

VB.CommandButton。在ProgID

与对象浏览器中所显示的不一样的情况下,Visual

Basic

将显示一个包括正确

ProgId

的错误信息。

name

必要的。一个字符串,用来标识集合的成员。

container

可选的。一个对象引用,或拍它指定控件的容器。如果没有指定或为NULL,缺省值为

Controls

集合所属的容器。通过指定该参数,可以把一个控件放置在任何现存的容器控件(如

Frame

控件)中。用户控件或

ActiveX

文档也可以作为一个容器。

举例:

//在picture1上面添加一个commandbutton

Private

Sub

Form_Load()

Form1.Controls.Add

"VB.CommandButton",

"cmdOk",

Picture1

With

Form1.cmdOk

.Visible

=

True

.Width

=

500

.Caption

=

"确认(&Y)"

End

With

End

Sub

当然,我个人觉得更好的办法还是用控件数组,例如现在首先建立一个TextBox控件,并把Index属性改成0(注意,原来是空的,必须写上0)。

然后在程序中任意地方,采用例如Load

TextBox1(1)就可以创建一个新的TextBox对象,通过TextBox1(1)访问。

当然你可以用循环创建指定数量的文本框,在不用的时候记得用

Unload

TextBox1(1)给他注销掉。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12446844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存