用户窗体在Excel中的应用.docx
《用户窗体在Excel中的应用.docx》由会员分享,可在线阅读,更多相关《用户窗体在Excel中的应用.docx(45页珍藏版)》请在冰点文库上搜索。
用户窗体在Excel中的应用
用户窗体在Excel中的应用(VBA)
概要
这篇文章介绍了如何更改用户窗体以编程方式在Excel中。
它包括示例和MicrosoftVisualBasic用于向您展示如何利用用户窗体的功能以及如何使用ActiveX™控件,供用户窗体的应用程序(VBA)宏。
用户窗体的基本原则的介绍,介绍如何显示用户窗体、如何暂时隐藏用户窗体,以及如何消除用户窗体。
您还显示了如何使用与用户窗体相关联的最常见事件——初始化事件、Click事件和终止事件。
一个或多个下面的示例演示如何在用户窗体中使用的每个以下ActiveX™控件:
标签控件
TextBox控件
命令按钮控件
列表框控件
组合框控件
框架控件
选项按钮控件
复选框控件
切换按钮控件
TabStrip控件
multiPage控件
滚动条控件
数值调节钮控件
RefEdit控件
图像控件
用户窗体基础知识
如何显示用户窗体
以编程方式显示用户窗体使用的语法是下列:
UserFormName.Show
若要显示名为UserForm1用户窗体,请使用下面的代码:
UserForm1.Show
您可以加载到内存用户窗体而不实际显示它。
可能需要复杂的用户窗体几秒钟,会出现。
因为您可以预用户窗体加载到内存中,您可以决定何时导致此开销。
而不显示它加载到内存的UserForm1,使用下面的代码:
若要显示该过程用户窗体的
LoadUserForm1
必须使用Show方法以前显示的。
如何暂时隐藏用户窗体
如果要暂时隐藏用户窗体,请使用隐藏方法。
您可能希望隐藏用户窗体,如果您的应用程序涉及到用户窗体之间移动。
若要隐藏用户窗体,请使用下面的代码:
UserForm1.Hide
有关更多的信息请单击下面的文章编号,以查看Microsoft知识库中相应的文章:
213747 (/213747/)XL2000:
如何使用命令按钮的自定义用户窗体之间移动
若要从内存中删除用户窗体的方法
若要从内存中删除用户窗体使用卸载语句。
若要卸载用户窗体名为UserForm1,使用下面的代码:
UnloadUserForm1
如果您卸载与用户窗体关联,或与用户窗体上的控件相关联的事件过程中用户窗体(例如对于单击命令按钮控件)时,您可以使用"me"关键字而不是用户窗体的名称。
若要使用"me"关键字卸载用户窗体,使用下面的代码:
UnloadMe
如何使用用户窗体事件
用户窗体支持许多预定义的事件您可以将附加的VBA过程。
当发生事件时您附加到该事件过程将运行。
由用户执行的单个操作可以启动多个事件。
最经常使用的用户窗体的事件包括初始化事件、Click事件和终止事件。
注意在VisualBasic模块包含事件过程可能被称为用户窗体后面的模块。
一个模块包含事件过程,将不可见的Microsoft项目资源管理器窗口VisualBasic编辑器的模块集合中。
您必须双击用户窗体可以查看用户窗体代码模块的正文。
如何捕获用户窗体事件
补漏白用户窗体事件,请按照下列步骤操作:
在Excel中创建一个新的工作簿。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
双击要为用户窗体显示在代码窗口在用户窗体。
在模块中键入以下代码:
PrivateSubUserForm_Click()
Me.Height=Int(Rnd*500)
Me.Width=Int(Rnd*750)
EndSub
PrivateSubUserForm_Initialize()
Me.Caption="EventsEventsEvents!
"
Me.BackColor=RGB(10,25,100)
EndSub
PrivateSubUserForm_Resize()
msg="Width:
"&Me.Width&Chr(10)&"Height:
"&Me.Height
MsgBoxprompt:
=msg,Title:
="ResizeEvent"
EndSub
PrivateSubUserForm_QueryClose(CancelAsInteger,CloseModeAsInteger)
msg="NowUnloading"&Me.Caption
MsgBoxprompt:
=msg,Title:
="QueryCloseEvent"
EndSub
PrivateSubUserForm_Terminate()
msg="NowUnloading"&Me.Caption
MsgBoxprompt:
=msg,Title:
="TerminateEvent"
EndSub
在运行菜单上单击运行子过程/用户窗体。
当首次加载用户窗体,时该宏使用初始化事件更改为"事件事件事件!
和背景色属性,以深蓝色的用户窗体的标题属性。
单击用户窗体,时您会触发Click事件。
Click事件调整用户窗体的大小。
因为您创建了的Resize事件过程,所以您会收到两个消息框,单击用户窗体后。
Resize事件发生两次,因为后Click事件的代码更改宽度属性和用户窗体的高度属性。
关闭用户窗体初始化QueryClose事件。
该QueryClose事件显示一个消息框,其中包含您在代码中赋予用户窗体,初始化事件的标题。
您可以使用QueryClose事件时要执行一组特定的操作,如果用户关闭用户窗体。
终止事件,然后将生成一个消息框指出用户窗体的标题是UserForm1。
在终止事件发生后就会从内存中删除用户窗体和用户窗体的标题返回到其原始状态。
如何防止用户窗体被关闭,通过使用关闭按钮
您在运行用户窗体时在用户窗体窗口的右上角添加一个关闭按钮。
如果要防止用户窗体通过使用关闭按钮关闭,您必须补漏白QueryClose事件。
用户窗体是从内存中卸载之前,将发生QueryClose事件。
使用QueryClose事件的CloseMode参数来确定如何关闭用户窗体。
CloseMode参数vbFormControlMenu值表明在关闭按钮被单击。
若要使用户窗体处于活动状态,请QueryClose事件的取消参数设置为True。
若要使用QueryClose事件来防止用户窗体通过使用关闭按钮关闭,请按照下列步骤操作:
在Excel中创建一个新的工作簿。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加命令按钮控件。
双击要为用户窗体显示在代码窗口在用户窗体。
在代码窗口中键入以下代码:
PrivateSubCommandButton1_Click()
UnloadMe
EndSub
PrivateSubUserForm_QueryClose(CancelAsInteger,CloseModeAsInteger)
IFCloseMode=vbFormControlMenuThen
Cancel=True
Me.Caption="ClicktheCommandButtontocloseMe!
"
EndIf
EndSub
在运行菜单上单击运行子过程/用户窗体。
当您单击关闭按钮时,用户窗体未关闭。
您必须单击关闭用户窗体的命令按钮控件。
有关更多的信息请单击下面的文章编号,以查看Microsoft知识库中相应的文章:
207714 (/207714/)XL2000:
使用用户窗体集合的运行时错误
211527 (/211527/)XL2000:
无法将用户窗体控件拖动到工作表
211868 (/211868/)XL2000:
错误运行宏的用户窗体中插入控件
213582 (/213582/)XL2000:
问题时,可以将控件添加到用户窗体中使用宏
213583 (/213583/)XL2000:
无法在其他项目中显示用户窗体
213736 (/213736/)XL2000:
如何确定键按下鼠标按钮一起
213744 (/213744/)XL2000:
如何暂时隐藏用户窗体
213747 (/213747/)XL2000:
如何使用命令按钮的自定义用户窗体之间移动
213749 (/213749/)XL2000:
如何使用用户窗体用于输入数据
213768 (/213768/)XL2000:
如何动态地调整用户窗体的大小
213774 (/213774/)XL2000:
如何使用用户窗体中创建一个启动屏幕
VBA代码
Excel包含15个不同的控件,您可以在用户窗体上使用。
此部分包含以编程方式使用这些控件的各种示例。
注意包括在本文中的VBA代码不包含影响所有属性和控件事件的示例。
如果必须为可以使用属性窗口以查看可用的控件的属性的列表。
若要查看的属性,列表在视图菜单上,单击属性窗口。
如何使用设计模式中编辑控件
当您使用VisualBasic编辑器设计对话框时,您正在使用设计模式中。
在设计模式中,您可以编辑控件并可以更改在属性窗口中的用户窗体上控件的属性。
若要显示在视图菜单上的属性窗口,单击属性窗口。
注意当您在设计模式中时,控件不响应的事件。
您在运行一个对话框,用户可以看到它的方式将其显示时该程序处于运行模式。
从内存中卸载用户窗体时,在运行模式中控件的属性所做的更改将不会保留。
注意控件响应在运行模式中的事件。
如何在用户窗体上的控件,请参阅
您如何引用的控件以编程方式取决于您在其中运行代码的VisualBasic模块工作表的类型。
如果从常规模块运行该代码,语法是下列:
=Value
如果要将名为TextBox1王俊元的值名为UserForm1用户窗体上的文本框控件的Text属性设置,例如对于使用下面的代码:
="Bob"
如果代码是通过控件的事件或用户窗体启动的过程中,您无需用户窗体的名称,请参阅。
而是,使用下面的代码:
TextBox1.Text="Bob"
时将代码附加到对象中,代码附加到该对象的事件之一。
在很多本文示例中将代码附加到命令按钮对象的Click事件。
回到顶端
标签控件
标签控件主要用于描述在用户窗体上的其他控件。
用户窗体运行时,不能由用户编辑标签控件。
若要设置或返回一个标签控件中的文本,请使用标题属性。
设置格式的Label控件的其他常用的属性包括Font属性并将前景色属性。
如何使用WITH语句设置Label控件的格式
要使用WITH语句更改Label控件的属性,请按照下列步骤,请执行以下操作:
启动Excel,然后打开一个新的空白工作簿。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加一个Label控件。
向用户窗体中添加命令按钮控件。
双击命令按钮控件的用户窗体中打开代码窗口。
在代码窗口中键入下面的代码为CommandButton1Click事件:
PrivateSubCommandButton1_Click()
WithLabel1
'Setthetextofthelabel.
.Caption="ThisisLabelExample1"
'Automaticallysizethelabelcontrol.
.AutoSize=True
.WordWrap=False
'SetthefontusedbytheLabelcontrol.
.Font.Name="TimesNewRoman"
.Font.Size=14
.Font.Bold=True
'Setthefontcolortoblue.
.ForeColor=RGB(0,0,255)
EndWith
EndSub
在运行菜单上单击运行子过程/用户窗体。
单击命令按钮。
文本加粗黑体字体大小为14中的标签控件"这是标签示例1"出现。
回到顶端
文本框控件
文本框控件经常用于收集用户的输入。
Text属性将包含由TextBox控件中的项。
如何使用验证密码TextBox控件
如果您设置TextBox控件的PasswordChar属性,则它将成为"伪装的编辑"控件。
您指定的字符以可视方式将取代TextBox控件中键入的每个字符。
要使用TextBox控件验证密码,请按照下列步骤,请执行以下操作:
启动Excel,然后打开一个新的空白工作簿。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加文本框控件。
在视图菜单上单击属性,以使属性窗口可见。
在文本框控件PasswordChar属性键入*。
注意您正将该值改为一个星号。
向用户窗体中添加命令按钮控件。
双击命令按钮控件的用户窗体中打开代码窗口。
在代码窗口中键入下面的代码为CommandButton1Click事件:
PrivateSubCommandButton1_Click()
IfTextBox1.Text<>"userform"Then
MsgBox"PasswordisIncorrect.Pleasereenter."
TextBox1.Text=""
TextBox1.SetFocus
Else
MsgBox"Welcome!
"
UnloadMe
EndIf
EndSub
在运行菜单上单击运行子过程/用户窗体。
键入密码userformTextBox控件中。
单击命令按钮控件。
此例如密码为"userform"。
如果您键入了不正确的密码,您将收到一个消息框,指出您的密码不正确、清除TextBox控件,然后重新键入密码。
当您键入正确的密码时,您会收到一个欢迎消息和用户窗体被关闭。
有关更多的信息请单击下面的文章编号,以查看Microsoft知识库中相应的文章:
213555 (/213555/)XL2000:
无数据验证属性的用户窗体文本框
回到顶端
命令按钮控件
使用命令按钮控件,可以启动VBA过程。
VBA过程通常被附加到命令按钮控件的Click事件。
若要将一个Click事件发生时运行一个过程的命令按钮控件,请按照下列步骤操作:
启动Excel,然后打开一个新的空白工作簿。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加命令按钮控件。
双击要为用户窗体显示代码窗口的命令按钮控件。
在代码窗口中键入以下代码:
PrivateSubCommandButton1_Click()
red=Int(Rnd*255)
green=Int(Rnd*255)
blue=Int(Rnd*255)
CommandButton1.BackColor=RGB(red,green,blue)
EndSub
在运行菜单上单击运行子过程/用户窗体。
背景色的CommandButton1控件更改每次单击它。
有关命令按钮控件的附加信息,请单击下面的文章编号,以查看Microsoft知识库中相应的文章:
213572 (/213572/)XL2000:
单击取消按钮可能不关闭用户窗体
213743 (/213743/)XL2000:
如何在用户窗体上设置为默认命令按钮
回到顶端
列表框控件
列表框控件的用途是向用户显示要从选择的项的列表。
您可以将存储在Excel工作表上的列表框控件的项列表。
若要填充列表框控件与单元格区域的工作表上,使用行来源属性。
您在使用MultiSelect属性时可以接受多个选定内容设置列表框控件。
如何获取当前选定的项从列表框控件
使用列表框控件的Value属性返回当前选定的项。
若要在单个选择列表框控件中返回当前选定的项,请按照下列步骤操作:
启动Excel,然后打开一个新的空白工作簿。
在单元格a1:
a5工作表Sheet1上,键入想要使用来填充列表框控件的值。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加列表框控件。
双击列表框控件以显示列表框控件在代码窗口。
在代码窗口中键入下面的代码为ListBox1Click事件:
PrivateSubListBox1_Click()
MsgBoxListBox1.Value
EndSub
在运行菜单上单击运行子过程/用户窗体。
当您单击列表中的某个项目时,当前选定的项将出现一个消息框。
如何获取多个选择列表框控件中的选定的项
若要确定在选择多个列表框控件中选定的项,您必须依次通过在列表中的所有项目,然后查询Selected属性。
若要选择多个列表框控件中返回当前选定的项目,请按照下列步骤操作:
启动Excel,然后打开一个新的空白工作簿。
在单元格a1:
a5工作表Sheet1上,键入想要使用来填充列表框控件的值。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加列表框控件。
在视图菜单上单击属性以显示的属性窗口。
键入表示为以下列表框控件属性的值:
PropertyValue
----------------------------------
MultiSelect1-frmMultiSelectMulti
RowSourceSheet1!
A1:
A8
向用户窗体中添加命令按钮控件。
双击要为用户窗体显示代码窗口的命令按钮控件。
在代码窗口中键入下面的代码为CommandButton1Click事件:
SubCommandButton1_Click()
'LoopthroughtheitemsintheListBox.
Forx=0toListBox1.ListCount-1
'Iftheitemisselected...
IfListBox1.Selected(x)=TrueThen
'displaytheSelecteditem.
MsgBoxListBox1.List(x)
EndIf
Nextx
EndSub
在运行菜单上单击运行子过程/用户窗体。
在列表中选择一个或多个项目。
单击CommandButton1。
单击CommandButton1后,您在列表框控件中选择的每个项目将出现在单独的消息框中。
在消息框中显示所有选定的项目后,用户窗体将自动关闭。
如何使用来填充列表框控件与单元格在工作表上的行来源属性
若要使用行来源属性来填充列表框控件中的单元格区域的工作表上,请按照下列步骤操作:
启动Excel,然后打开一个新的空白工作簿。
在单元格a1:
a5工作表Sheet1上,键入想要使用来填充列表框控件的值。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加列表框控件。
向用户窗体中添加命令按钮控件。
双击要为用户窗体显示代码窗口的命令按钮控件。
在代码窗口中键入下面的代码为CommandButton1Click事件:
PrivateSubCommandButton1_Click()
ListBox1.RowSource="=Sheet1!
A1:
A5"
EndSub
在运行菜单上单击运行子过程/用户窗体。
注意ListBox1不包含任何值。
单击CommandButton1。
ListBox1将用在工作表Sheet1上的单元格a1:
a5中值进行填充。
如何填充数组中的值与列表框控件
本示例显示如何填充列表框控件与一个数组变量。
您必须将数组中的值一次分配给列表框控件的一个项目中。
通常,此过程要求您使用如For…Next循环的循环结构。
若要填充列表框控件与一个数组变量,请按照下列步骤操作:
启动Excel,然后打开一个新的空白工作簿。
在工具菜单上指向宏,然后单击VisualBasic编辑器。
在插入菜单上单击用户窗体插入您的工作簿中的用户窗体。
向用户窗体中添加列表框控件。
在插入菜单上单击模块,插入模块工作表。
在代码窗口中键入以下代码:
SubPopulateListBox()
DimMyArrayAsVariant
DimCtrAsInteger
MyArray=Array("Apples","Oranges","Peaches","Bananas","Pineapples")
ForCtr=LBound(MyArray)ToUBound(MyArray)
MyArray(Ctr)
Next
UserForm1.Show
EndSub
在工具菜单上单击宏并单击PopulateListBox,然后单击运行。
PopulateListBox过程生成一个简单的数组,然后在数组中将项目添加到列表框控件中,通过使用AddItem方法。
然后,用户窗体将显示。
如何使用工作表上的水平单元格区域来填充列表框控件
如果将列表框控件的行来源属性设置为单元格的水平区域,只有第一个值将出现在列表框控件中。
通过使用AddItem方法来填充列表框控件中的单元格的水平区域,请按照下列步骤操作:
启动Excel,然后打开一