第6章 控件与用户窗体代码【超实用VBA】
VBA中的GUI设计与窗体操作技巧
VBA中的GUI设计与窗体操作技巧VBA(Visual Basic for Applications)作为一种常用的编程语言,广泛应用于Microsoft Office套件中,能够为用户提供更好的用户界面(GUI)和窗体操作体验。
在本文中,将介绍VBA中的GUI设计与窗体操作技巧,帮助读者更好地了解和应用这些功能。
GUI设计是指在编程过程中,通过设计精美的用户界面来提高程序的整体体验和交互性。
在VBA中,我们可以使用用户窗体(UserForm)来实现GUI设计,并通过各种控件(例如文本框、按钮、下拉列表等)来实现用户与程序的交互。
下面将介绍一些常用的GUI设计技巧。
首先,为了保证用户界面的一致性和美观性,可以使用VBA内置的控件样式。
在用户窗体的“属性”窗格中,可以选择标题栏样式、背景颜色和文本颜色等,以使窗体的外观与整个应用程序保持一致。
其次,在设计用户界面时,需要考虑布局的合理性和易读性。
可以使用容器控件(如分组框、标签页)来将相关控件组织在一起,并使用布局控件(如表格布局、流式布局)来实现各种排列方式。
此外,还可以使用标签(Label)控件来提供文字说明,帮助用户理解和使用程序。
另外,为了增加程序的交互性,可以根据用户的操作来动态改变控件的属性。
例如,可以根据复选框的选中状态来启用或禁用其他控件,或者根据下拉列表的选项来改变文本框的内容。
这些动态改变控件属性的技巧可以使程序更加智能和灵活。
除了GUI设计,窗体操作也是VBA中重要的一部分。
窗体操作指的是如何管理和控制用户窗体的显示和隐藏。
下面将介绍一些窗体操作的技巧。
首先,可以使用窗体的Show方法来显示用户窗体,并在需要的地方调用Hide方法来隐藏窗体。
通过管理窗体的显示和隐藏,可以使用户在需要时看到所需的窗体,提高程序的可用性。
其次,可以使用窗体的Modal属性来设置窗体的模式。
当模式属性为True时,用户需要先处理完窗体上的事件,才能继续使用应用程序中的其他功能。
vba编程代码大全
vba编程代码大全VBA编程代码大全。
VBA是Visual Basic for Applications的缩写,是一种用于Microsoft Office应用程序的编程语言。
通过VBA,用户可以编写自定义的宏和程序,以实现自动化操作和定制功能。
VBA编程在Excel、Word、PowerPoint等Office应用中都有广泛的应用,可以大大提高工作效率和数据处理的灵活性。
本文将为大家详细介绍VBA 编程中常用的代码,帮助大家更好地掌握VBA编程技能。
一、基本操作。
1. 打开VBA编辑器。
在Office应用程序中,按下Alt + F11快捷键即可打开VBA编辑器。
在VBA 编辑器中,可以编写和管理VBA代码。
2. 编写子程序。
使用Sub关键字定义一个子程序,然后在其中编写具体的VBA代码。
例如:Sub HelloWorld()。
MsgBox "Hello, World!"End Sub。
3. 运行宏。
在VBA编辑器中,可以直接运行编写好的宏程序。
也可以在Office应用程序中,通过快捷键或菜单来运行宏。
二、常用代码。
1. 操作单元格。
在Excel中,可以使用VBA来操作单元格,例如:Range("A1").Value = 100。
Range("A1").Interior.Color = RGB(255, 0, 0)。
2. 循环结构。
使用VBA可以编写各种类型的循环结构,例如For循环、Do While循环等,来实现对数据的遍历和处理。
3. 条件判断。
VBA中的If语句可以用来进行条件判断,根据不同的条件执行不同的操作,例如:If Range("A1").Value > 0 Then。
Range("B1").Value = "Positive"Else。
Range("B1").Value = "Negative"End If。
VBA中的用户界面设计和自定义控件
VBA中的用户界面设计和自定义控件随着计算机技术的不断发展,用户界面设计在软件开发中扮演着越来越重要的角色。
VBA(Visual Basic for Applications)作为一种强大的编程语言,提供了丰富的工具和功能,使得用户界面设计和自定义控件变得更加灵活和易于实现。
本文旨在介绍VBA中的用户界面设计和自定义控件的相关内容。
在VBA中,用户界面设计往往基于表单(Form)。
通过表单,可以创建交互性强、用户友好的应用程序。
VBA提供了丰富的控件类型,如文本框、标签、按钮、列表框等,可以用来构建界面元素。
用户可以通过拖拽的方式将这些控件添加到表单上,并进行相应的属性设置和事件编写,实现丰富的用户界面交互效果。
在进行用户界面设计时,设计原则和技巧是非常重要的。
首先,界面整洁简明,避免过多的控件和复杂的布局,以免用户感到困扰。
其次,界面要符合用户的直观操作习惯,提供清晰明了的导航和操作指引。
此外,界面的美观性和色彩搭配也是需要考虑的因素,可以根据应用程序的定位和目标用户来选择适合的主题和风格。
除了基本的表单控件外,VBA还支持自定义控件的创建和使用。
自定义控件可以满足特定业务需求,并且可以根据个人偏好进行灵活的定制。
VBA中的自定义控件可以通过编程方式创建,也可以通过ActiveX控件或Windows API实现。
编程方式创建自定义控件需要使用VBA提供的控件对象模型。
通过创建类模块和控件模块,可以定义新的控件类型,并在需要的地方使用。
自定义控件具有更高的灵活性和扩展性,可以根据实际需求设置不同的属性和事件,实现个性化的用户界面。
通过ActiveX控件,开发者可以使用第三方控件库,如Microsoft Office裡的常用控件,以扩展VBA的功能。
ActiveX控件是可重用的二进制组件,可以在VBA开发环境中进行使用。
这些控件具有更丰富的功能和更好的性能,可以提升用户界面的体验和效果。
另外,使用Windows API可以调用操作系统提供的功能和控件,实现更高级的用户界面效果。
excelvba用户窗体编程基础
ExcelVBA用户窗体编程基础概述当使用MsgBox函数和InputBox函数不能满足与用户交互的需求时,您能使用用户窗体来自定义对话框。
您能使用用户窗体来显示所输入的数据,您甚至能使用用户窗体创建一个完整的用户界面,而不会让用户接触到电子表格本身。
您在Windows对话框中所看到的大多数控件都能在用户窗体中实现——命令按钮,选项按钮,复选框,文本框,组合框——加上一些其它不常用的控件像图像,日历,等等。
本文介绍了用户窗体的基本概念,并介绍了使用用户窗体的常用技术。
其中,也讲解了一些最通用的思路。
在文章中列举了一个包含所有过程的完整的示例文件,以及实现这些过程的代码,让您能在实践中看到所有工作的基本原理和方法。
本文包含以下内容:● 基本的用户窗体操作● 用户窗体和控件的属性● 一个用户窗体的生命周期● 用户窗体和控件的事件● 问题1:如何在用户窗体间传递数据?● 问题2:如何找到我的窗体中的某类控件?● 问题3:如何获取数据到列表框中?● 问题4:如何为循环创建进度条?● 一个完整的用户窗体综合示例基本的用户窗体操作•创建一个窗体。
打开VBE编辑器(选择菜单“工具——宏——Visual Basic编辑器”或按Alt+F11组合键),选择菜单“插入——用户窗体”,或者在工程窗口中单击右键,从弹出的快捷菜单中选择“插入——用户窗体”,即可创建一个窗体。
•添加控件。
当你创建了一个窗体后,将会显示一个名为“控件工具箱”的浮动工具箱(如果没有该工具箱的话,您可以从视图菜单中找到它),其中显示了最普遍的控件类型。
单击您想要的控件,拖动它到您的用户窗体中。
•更多的控件。
有一些更多的可用的控件,您可以在控件工具箱中单击右键,从中选择“附加控件”,您能添加日历、电子表格、图形,等等。
•添加事件程序。
事件允许当用户对窗体和控件进行操作时作出相应的反应,事件程序要放置在用户窗体模块中,您能通过双击窗体或控件来打开代码模块窗口,或者在窗体或控件中单击右键,从快捷菜单中选择“查看代码”来打开代码模块窗口,或者在工程窗口中的用户窗体图标上单击右键后选择“查看代码”来打开代码模块窗口。
《Access2016数据库教程》第6章窗体
1. 控件的类型
(1)绑定控件。与表或查询中的字段捆绑在一起。Access会 自动更新当前记录中与绑定控件相关联的表字段的值。 (2)未绑定控件。与表中字段无关联,不会更新表中字段值。 (3)计算控件。使用表达式作为其控件来源。计算控件必须 在表达式前先键入一个等号“=”。 例如,要在一个文本框中显示当前日期,则其“控件来源”属 性应指定为:=Date(); 要想在文本框中显示学生哪年出生,需将其“控件来源”属性 指定为:=Year([出生日期])。
6.3.2 属性表
在Access中,属性决定对象的特性。窗体属性决定窗体的 结构、外观和行为;控件属性决定控件的外观、行为以及其中 所含文本或数据的特性。
属性表窗格包含5个选项卡: 格式、数据、事件、其他、全部
Access对各个属性都提供 了相应的默认值,在“属性表”中 可以重新设置其属性值。
1.窗体的基本属性
是
导航按钮
否
记录选择器 否
分隔线
是
窗体属性设置 属性名称 设置值
导航按钮 否
记录选择器 滚动条 弹出方式
否 两者均无 是
5.复选框、选项按钮、切换按钮和选项组
【例6-15】创建学生信息查询窗体。该窗体中有一个选 项组,包含了3个选项,选中某个选项后,单击“开始 查询”按钮可以打开相应的查询界面完成查询。窗体为 弹出式窗体,不设导航按钮、滚动条、记录选择器。
本例操作主要分两部分,一是使用设计视图按要求创建 主窗体,二是将“例6-3选课成绩表(数据表)”窗体添加 到主窗体中作为子窗体。
1.使用设计视图创建主/子窗体
主窗体属性设置
属性名称 设置值
记录源
学生表
导按钮 否
记录选择器 否 允许编辑 否
第6章 宏
引航教育
利用宏运行宏 利用“子宏示例”中的宏,创建一个“运行子宏示例中的宏2” 的宏,宏中利用操作RunMacro运行宏2
引航教育
利用控件事件中运行宏 创建一个“运行宏示例”窗体。窗体上有两个按钮: Command0标题为“运行操作宏”,实现单击该宏按钮运 行“Autoexec宏”,另一按钮Command1标题为“运行 子宏中的宏”,实现单击该按钮运行子宏示例中的宏2
知道宏可以转换为 VBA 代码即可。
常见宏命令
Access2010把宏操作分成8组,一共有66年操作。打开宏对 象窗口 给宏添加注释
给宏分组
条件函数 嵌入宏操作
引航教育
(1)打开或关闭数据库对象。
命令 OpenTable 功能 打开指定数据表
OpenForm
OpenQuery OpenReport
先创建好命令按钮和文 本框
引航教育
通过拖动if实现, 添加else语句
引航教育
应实现如下操作:
引航教育
常见宏的条件表达式 Msgbox(“确认更改”,1)=1 有两个按钮“确认”和“取消”, 点确认返回结果为1 1=1 结果为真,执行下一步 Dcount(“[订单ID]”,“订单”)>35 统计订单表里的订单 ID,若大于35条件 为真,执行下一步 [发货日期]Between#2001年2月2日#and#2001年3月2日# 发货日期字段的值 是否在这一日期范围内,若在条件 为真。 [Forms]![产品]![库存量]<5 产品窗体里的库存量<5条件 为真。 isNull([名字]) 名字字段里值为空条件 为真 [国家]in(“法国”,“意大利”,“英国”) 国家字段里的 值在括号里时条件 为真。 引航教育
VBA中窗体和控件的设计和使用技巧
VBA中窗体和控件的设计和使用技巧在Excel的VBA编程环境中,窗体和控件是非常有用的工具,可以提供一个可交互的界面,使用户能够方便地与程序进行互动。
本文将介绍一些在VBA中设计和使用窗体与控件的技巧,帮助您更好地利用这些功能。
1. 窗体的设计和创建窗体是用来容纳和组织控件的容器,我们可以在窗体上添加各种控件,如按钮、文本框、复选框等。
以下是一些窗体设计和创建的技巧:1.1 设计图形化界面:在Excel的VBA环境中,打开“工具箱”窗口,选择“用户窗体”并插入一个窗体对象。
然后,您可以使用工具箱中的各种控件在窗体上构建图形化的界面。
1.2 窗体属性设置:窗体对象有许多属性可以设置,如大小、位置、背景颜色等。
您可以通过代码来设置这些属性,也可以通过右键单击窗体并选择“属性”来直接修改属性值。
1.3 窗体样式:您可以通过设置窗体的样式属性来美化窗体的外观。
可以选择窗体的边框样式、标题栏样式、背景颜色等。
2. 控件的添加和布局控件是窗体上的各个元素,用于与用户交互和显示信息。
下面是一些控件添加和布局的技巧:2.1 添加控件:在窗体上插入控件前,您需要确保已经打开了“工具箱”窗口。
然后,您可以从工具箱中选择对应的控件,并将其拖放到窗体上。
2.2 控件属性设置:与窗体类似,控件也有一些属性需要设置。
通过代码或者属性窗口,您可以设置控件的大小、位置、字体颜色、字体大小等。
2.3 控件布局:为了使窗体看起来整洁并且易于使用,您可以使用布局控件(如分组框)将相关的控件放在一起。
另外,您还可以使用布局管理器(如表格布局管理器)来自动调整控件的位置和大小。
3. 控件的事件处理控件的事件是指当用户与控件进行交互时,所触发的特定动作。
以下是一些控件事件的处理技巧:3.1 事件的绑定:在VBA中,控件的每个事件都有一个对应的子过程。
您可以通过双击控件,或者在窗体的代码窗口中选择控件和事件,并自动生成事件处理程序的框架。
使用代码添加窗体及控件
技巧1使用代码添加窗体及控件VBA中的用户窗体为用户提供了可视化的操作界面,在用户窗体中一般都包含控件以便与用户进行交互。
我们通常是在VBE中使用菜单“插入”→“用户窗体”来创建用户窗体,然后拖动工具箱中的控件到用户窗体中,也可以使用代码来添加用户窗体及其控件,代码如下:Private Sub CommandBu tton1_Cli ck()Dim myForm As VBCompone ntDim myTextBox AsControlDim myButton AsControlDim i As IntegerSet myForm= ThisWorkb ook.VBPro ject.VBCo mponents. Add(vbext _ct_MSFor m)With myForm.Properti es("Name" )= "Formtest ".Properti es("Capti on")="演示窗体".Properti es("Heigh t")= "180".Properti es("Width ")= "240"Set myTextBox =.Designer .Controls .Add("For man dButton.1 ")With myTextBox.Name= "myTextBo x".Caption ="新建文本框".Top = 40.Left= 138.Height= 20.Width= 70End With Set myButton =.Designer .Controls .Add("For man dButton.1 ")With myButton .Name= "myButton ".Caption ="删除文本框".Top = 70.Left= 138.Height= 20.Width= 70End WithWith.CodeModu lei= .CreateEv entProc(" Click", "myTextBo x").ReplaceL ine i+ 1,Space(4) &"Dim myTextBox As Control" &Chr(10) &Space(4) &"Dim i As Integer" &Chr(10) &Space(4) &"Dim k As Integer" _&Chr(10) &Space(4) &"k= 10"& Chr(10)& Space(4) &"For i =1To5" &Chr(10) &Space(8) &"Set myTextBox =Me.Contro ls.Add(bs trprogid: =""Forms. TextBox.1 "")" _&Chr(10) &Space(8) &"With myTextBox "& Chr(10)& Space(12) &".Name = ""myTextB ox""&i" &Chr(10) &Space(12) &".Left = 20" _&Chr(10) &Space(12) &".Top= k"& Chr(10)& Space(12) &".Height =18"& Chr(10)& Space(12) &".Width = 80" _&Chr(10) &Space(12) &"k= .Top+ 28"& Chr(10)& Space(8) &"End With"& Chr(10)& Space(4) & "Next" i= .CreateEv entProc(" Click", "myButton ").ReplaceL ine i+ 1,Space(4) &"Dim i As Integer" &Chr(10) &Space(4) &"On Error Resume Next"& Chr(10)& Space(4) &"For i =1To5" &Chr(10) &Space(8) & "Formtest .Controls .Remove ""myTextB ox""&i" &Chr(10) &Space(4) & "Next"End WithEnd WithEnd Sub 代码解析:使用代码添加一个用户窗体及其两个按钮控件,并为按钮控件添加单击事件及其相应的代码。
本一CAD课程设计VBA参数化编程方法及实例
本一CAD课程设计VBA参数化编程方法及实例12020年4月19日第6章化学工程常见图形VBA参数化编程方法及实例6.1 VBA参数化编程方法简介VBA的全称是Visual Basic for Application,它有着与VB 几乎相同的语法和开发环境。
基于VBA的参数化编程允许用户对AutoCAD进行二次开发,由用户输入(或选择)参数值,程序自动绘制相应的图形。
其编程的一般步骤是先由用户输入一个基准点,然后根据基准点计算出其它各点的位置,调用AutoCAD命令进行绘图,最后还要对绘制的图形进行编辑修改,达到最终的效果,具体来说,二维、三维参数化编程主要分为下面几个步骤:(1)绘制图形并确定点图①交互绘制:拿到一个图形,首先要进行分析,这是必不可少的步骤。
先要交互将图形绘制出来。
②确定基点和其它点名:基点就是用户绘图的插入点,要根据实际情况确定,例如圆的基准点一般选择圆心,螺钉类图形一般选其结合面的中心点等。
用文字命令将点名写到交互绘制图形上,例如0、1、2…n以便后面编程用到时候方便。
③复杂图形:如果图形复杂,应该找出其相似的部分,单12020年4月19日独编成函数,这样能够减少程序的代码量。
④特点分析:对称性、重复性、循环性是某些编程图形的特点,符合这种特点的图形,在编程中只需绘出一个单元图,其余经过镜像、复制、循环语句即可绘出,这在编程中也是很重要的,它能够大大降低编程的工作量,提高程序的质量。
(2)确定参数和尺寸参数表①独立参数:参数化编程必须有参数,注意有些参数是独立的,需要由用户交互式输入,有些参数是不独立的,可能与某些独立参数相关,只需保留独立参数,不独立参数经过计算得到即可;②尺寸参数表:另外一般标准件在手册上给出了图形各个尺寸参数的表格,技术人员需要根据表格中的参数及数据,将其输入使得计算机或CAD软件能够应用它们。
③参数取舍:有些参数比较多,像化工上用的法兰或螺钉标准件,编程的参数太多,使得其工作量增加很多,有些参数对于设计人员来说是不重要的,此时将其适当简化是应该的,比如倒角半径、螺纹内外直径差、一些非常小的无关尺寸,当然一定是不重要的尺寸能够简化,重要的尺寸决不能采用这种方法,由此达到尽可能简化参数的数量,降低编程的工作量。
VBA窗体设计入门指南
VBA窗体设计入门指南VBA(Visual Basic for Applications)是一种基于微软的编程语言,用于自动化和定制Microsoft Office应用程序。
VBA窗体设计指南旨在帮助初学者了解VBA窗体设计的基础知识,并教授如何创建、定制和使用窗体来增强用户界面的交互性。
第一部分:了解VBA窗体设计的基础知识1. 什么是VBA窗体设计?VBA窗体设计是一种用于创建用户界面的工具,它允许用户与VBA代码交互。
通过创建窗体,用户可以通过按钮、复选框、下拉菜单等元素来执行特定的任务或触发特定的事件。
2. 为什么使用VBA窗体设计?使用VBA窗体设计可以提供更好的用户体验,并使用户能够更轻松地与你的应用程序进行交互。
通过添加窗体元素,你可以简化复杂的操作,并提高应用程序的可用性。
3. 如何打开VBA编辑器?要打开VBA编辑器,可以在Microsoft Office应用程序的"开发者"选项卡中选择"Visual Basic"按钮。
这将打开VBA编辑器窗口,你可以在其中编写和编辑VBA代码。
第二部分:创建和定制VBA窗体1. 创建窗体在VBA编辑器中,选择"插入"菜单下的"用户窗体"选项,然后选择所需的窗体类型(如用户窗体、对话框或用户控件)。
你可以选择创建一个空白窗体,或使用预定义的模板来快速创建窗体。
2. 添加窗体元素使用窗体设计器工具箱中的控件,你可以向窗体中添加各种元素,如按钮、文本框、标签、复选框等。
选择所需的控件,然后在窗体上绘制它们的矩形。
之后,可以通过右键单击控件并选择属性来自定义它们的外观和行为。
3. 设置控件属性每个控件都有各自的属性,你可以通过设置这些属性来定制控件的外观和行为。
例如,你可以设置按钮的文本、字体、大小、颜色以及关联的VBA代码等。
4. 设置窗体属性除了控件属性,还有一些窗体级别的属性可用于自定义整个窗体。
第六章 ExcelVBA常用对象与应用案例
计 算 中 心 编 制
3
上海大学
Shanghai University
Excel VBA常用对象
Private Sub CommandButton1_Click() „动态设置Excel的标题 Application.Caption = "动态设置Excel的标题" End Sub Private Sub CommandButton2_Click() „设置Excel标题为当前日期 Application.Caption = Date End Sub Private Sub CommandButton3_Click() „隐藏滚动条 Application.DisplayScrollBars = False End Sub Private Sub CommandButton4_Click() „显示滚动条 Application.DisplayScrollBars = True End Sub Private Sub CommandButton5_Click() „隐藏状态栏 Application.DisplayStatusBar = False End Sub Private Sub CommandButton6_Click() „显示状态栏 Application.DisplayStatusBar = True End Sub Private Sub CommandButton7_Click() „隐藏编辑栏 Application.DisplayFormulaBar = False End Sub Private Sub CommandButton8_Click() „显示编辑栏 Application.DisplayFormulaBar = True End Sub
第6章控件与用户窗体代码【超实用VBA】
第6章控件与用户窗体代码【超实用VBA】第6章控件与用户窗体范例67 文本框只能输入数值Private Sub T extBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger) With TextBox1Select Case KeyANSICase Asc("0") To Asc("9")Case Asc("-")If InStr(1, .Text, "-") > 0 Or .SelStart > 0 ThenKeyANSI = 0End IfCase Asc(".")If InStr(1, .Text, ".") > 0 Then KeyANSI = 0Case ElseKeyANSI = 0End SelectEnd WithEnd SubPrivate Sub TextBox1_Change()Dim i As IntegerDim Str As StringWith TextBox1For i = 1 To Len(.Text)Str = Mid(.Text, i, 1)Select Case StrCase ".", "-", "0" To "9"Case Else.Text = Replace(.T ext, Str, "")End SelectNextEnd WithEnd Sub范例68 限制文本框的输入长度Private Sub TextBox1_Change()TextBox1.MaxLength = 6End Sub范例69 验证文本框输入的数据Private Sub CommandButton1_Click()With TextBox1If (Len(Trim(.Text))) = 15 Or (Len(Trim(.Text))) = 18 ThenCells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .TextElseMsgBox "身份证号码错误,请重新输入!"End If.Text = "".SetFocusEnd WithEnd Sub范例70 文本框回车自动输入Private Sub T extBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)Dim r As Integerr = Cells(Rows.Count, 1).End(xlUp).RowWith TextBox1If Len(Trim(.Text)) > 0 And KeyCode = vbKeyReturn ThenCells(r + 1, 1) = .Text.Text = ""End IfEnd WithEnd Sub范例71 文本框的自动换行Private Sub UserForm_Initialize()With TextBox1.WordWrap = True.MultiLine = True.Text = "文本框是一个灵活的控件,受下列属性的影响:T ext、" _& "MultiLine、WordWrap和AutoSize。
Excel VBA用户窗体常用的方法
Excel VBA用户窗体常用的方法2009-06-20 23:401、显示用户窗体用于以编程方式显示用户窗体的语法是:UserFormName.Show若要显示用户窗体名为 UserForm1,使用以下代码:UserForm1.Show时可以加载到内存用户窗体而不实际显示它。
可能需要复杂的用户窗体几秒钟才显示。
可以预用户窗体加载到内存中,因为您可以决定何时引发此开销。
但不显示加载到内存的UserForm1,使用以下代码:Load UserForm1您必须使用 Show 方法时以前显示的。
2、如何临时隐藏用户窗体如果想要临时隐藏用户窗体,请使用隐藏方法。
可以隐藏用户窗体,如果您的应用程序涉及用户窗体之间移动。
若要隐藏用户窗体,使用以下代码:UserForm1.Hide3、如何从内存中删除用户窗体要从内存中删除用户窗体使用在卸载语句。
若要卸载一个名为 UserForm1 用户窗体,使用以下代码:Unload UserForm1如果卸载与用户窗体或与用户窗体上的控件相关联的事件过程中用户窗体(例如,您单击CommandButton 控件),您可以使用"Me"关键字而不是用户窗体的名称。
要使用"Me"关键字卸载用户窗体,使用以下代码:Unload Me4、如何使用用户窗体事件用户窗体支持许多预定义的事件,您可以将附加 VBA 过程。
在事件发生时, 该过程附加到该事件就会运行。
由用户执行的单个操作可以启动多个事件。
最频繁用户窗体使用的事件包括 Initialize 事件、 Click 事件和终止事件。
请注意 Visual Basic 模块包含事件的过程可能被称为"隐藏"用户窗体的模块。
看Microsoft Project Explorer 窗口的 Visual Basic 编辑器的 Modules 集合中不包含事件过程的模块。
您必须双击用户窗体可以查看用户窗体的主体代码模块。
VBA代码窗口、模块的简单讲解及ThisWorkbook工作簿代码应用
VBA代码窗口、模块的简单讲解及ThisWorkbook工作簿代码应用讲了很长时间的VBA,今日和大家讲解一下VBA代码的简单知识。
一代码窗口VBA的代码窗口包括工作表事件代码窗口、ThisWorkbook事件代码窗口、窗体代码窗口、标准模块代码窗口和类模块代码窗口。
打开某个对象的代码窗口的方法是在该对象上单击右键,从中选择【查看代码】。
或者双击进入。
例如:要进入ThisWorkbook的代码窗口,在左方的工程资源管理器中右击ThisWorkbook,在弹出的快捷菜单中选择【查看代码】,右边的代码窗口将切换到ThisWorkbook的代码窗口。
注意点:在VBA中,过程包括子过程(Sub开头)、函数过程(Function开头)和属性过程(Property开头)。
每一段完整的程序都是一个独立的过程,每录制一次宏将产生一个过程。
一个模块中可以存放多个过程,但同一个过程的代码不能放在多个代码窗口中,因为过程中的代码必须是连续的。
然而VBA允许不同模块中的过程相互调用,即A过程可以执行B过程的功能。
二工作簿代码事件ThisWorkbook对象代表代码所在的工作簿,ThisWorkbook代码窗口也称为工作簿事件代码窗口。
VBA中的事件是指对象在满足指定的条件时需要做出的反应,其中工作簿事件代码是指工作簿在满足代码所指定的条件时自动执行的代码。
如果工作簿事件代码存放在ThisWorkbook以外的窗口,则将失去其自动性,代码同时也失去了存在的价值。
所以对于一切工作簿事件相关的代码,都必须保存在ThisWorkbook代码窗口中。
例如工作簿的Workbook_open事件代码的存放方式,它的功能是打开工作簿时提示'陆漫漫修远VBA'。
由于采用了事件,所以不需要手动执行代码,一切自动执行。
如果代码保存在其他地方将会失效。
注意点:事件过程有别于标准子过程,它的命名有相当严格的规定,过程的名字和参数差一个字母或者空格都将失去预设的功能,而标准子过程的名字或者参数可以随意定义。
VBA窗体和控件设计技巧
VBA窗体和控件设计技巧VBA(Visual Basic for Applications)是一种用于在Microsoft Office应用程序中编写宏的编程语言。
在VBA 中,使用窗体和控件可以更加方便地与用户进行交互,使软件界面更加友好和易于操作。
本文将介绍一些VBA窗体和控件设计的技巧,帮助您更好地利用这些功能。
一、窗体和控件的基本概念在开始讨论VBA窗体和控件的设计技巧之前,首先需要了解一些基本概念。
窗体是一个容器,用于承载各种控件,并提供与用户的交互界面。
控件是窗体中的可见或不可见对象,用于实现特定的功能。
VBA提供了多种类型的控件,如文本框、标签、按钮、复选框、下拉列表等。
每种控件都有其特定的属性和方法,可以通过编程来控制其行为和外观。
二、布局和排列控件在设计窗体时,合理的控件布局和排列是十分重要的。
以下是一些布局和排列控件的技巧:1. 使用容器控件:在窗体中使用容器控件(如分组框或面板)可以将相关的控件组合在一起,并提供更好的可视化效果。
2. 使用网格对齐:通过启用网格对齐功能,可以确保控件在窗体上的对齐和间距一致,提高整体的美观性。
3. 使用布局控件:VBA提供了一些布局控件(如表格布局或流式布局),可用于自动调整和排列控件,简化控件的布局过程。
4. 考虑窗体的尺寸:在设计窗体时,需要考虑到窗体的尺寸和分辨率适配问题,以确保在不同的显示环境下,窗体和控件的布局都能正常显示。
三、控件事件处理控件事件处理是指在用户与控件进行交互时,程序能够响应相应的事件并执行相应的操作。
以下是一些控件事件处理的技巧:1. 按钮的单击事件:在按钮的单击事件中编写代码,可以实现在用户单击按钮时执行相应的操作,如保存数据、打开其他窗体等。
2. 文本框的焦点事件:在文本框的焦点事件中编写代码,可以实现在用户进入或离开文本框时执行相应的操作,如验证用户输入、显示提示信息等。
3. 复选框的选中事件:在复选框的选中事件中编写代码,可以实现在用户选择或取消选择复选框时执行相应的操作,如显示或隐藏其他控件、更新数据等。
Excel基础知识,VBA编程必学内容之控件系统,窗体控件userform
Excel基础知识,VBA编程必学内容之控件系统,窗体控件userformVBA是Excel表格的一项拓展功能.事实上,使用Excel表格本身的一些公式函数已经完全可以满足日常工作的需要了,只是VBA可以这一事情更加完美罢了,编程语言不只VBA,还有phython等,但它们都有一个共同的特点,基于即Excel表格的二次开发.在这里,咱们只说VBA.前面的图文咱们说过,所谓VBA其实就是VB高级编程语言的面向对象的编程.在这里又引出一个概念'对象'.何谓对象?在Excel里,工作表,工作簿,单元格及区域,一个shapes形状,一条线,一种字体,一种颜色等等,似乎只要能用名词来表达的都可以叫做对象.窗体,Userform,也是一种对象,只是其中之一.这篇短文,咱们就说一说窗体的作用.1.窗体的作用.窗体,像是一块画布,在这里,我们可以如画画一般,把各类控件画上去,标签,文本框,命令按钮,checkbox,optionbutton等,在工具箱里我们点选其中任意一个控件之后,回到窗体点击窗体,拖拽一段距离,然后松开鼠标,这时便可以勾画出刚才所点选的控件.窗体,其实就是控件的容器.我们根据自己的实际的设计需要随心所欲设计窗体,但这时我们所设计出来的窗体是没有功能的.窗体与其中的控件一起构成了通向数据管理的界面,但具体的功能还要靠代码来实现,窗体界面只是数据管理的窗口,而代码才是灵魂.2,窗体的常用代码,事件与属性(1),窗体的常用代码:userform1.show,调出窗体1;userform1.hiden,隐藏窗体1;unloaduserform1.卸载窗体1.(2).窗体常用的事件:userform的初始化事件,即窗体加载时,凡是被写入userform_initialize的代码均会被执行.(3).窗体修改的属性:窗体本身的名称,userform1,常被根据实际需要而被修改成设计者所希望的名称;caption属性,窗体初始时顶端所显示的文字;showmodal,当值为true时,窗体加载时,无法选择工作表与单元格对象,仅能操作窗体与其中的对象;当值为false时,可以自由操作其余任何的对象与内容;font,修改窗体顶端的文字的字体字形等属性.如果我们要设计数据录入系统的录入查询界面,那窗体一定是少不了的.对VBA感兴趣的朋友不妨多了解一下.。
ExcelVBA入门(十)用户窗体开发
ExcelVBA入门(十)用户窗体开发VBA 中的用户窗体就是指带 UI 的用户界面,在运行的时候会单独弹出一个窗口,类似于在 windows 系统中运行的一个可执行程序一样(这个说法不太严谨,因为可执行程序也可能是只有命令窗口而没有UI 的)。
再具体一点,就是一个窗口界面当中,有可能会包含有文本框、复选框、单选按钮、下拉列表,就如在网页中填写的表单一样。
再具体一点,就是如下图这样的:1. 用户界面设计如上图,UI 设计的部分其实是很简单的,微软的特色,直接拖拉拽就可以实现了。
而每一个控件(或者称为元素,也即放进窗体中的各种按钮、输入框等等)的属性,可以在选中它之后,在默认位于左下角的“属性” 列表框中进行设置,可设置项包含按钮的名字、前景色、背景色、显示出来的文本、宽度、高度、字体颜色、字号、距离左侧的距离、距离顶部的距离等等,很简单。
如果这个“属性” 框没有出现的话,可以在顶部菜单栏的“视图” 中选择“属性窗口”,它就会出现了。
2. 用户交互2.1 按钮事件直接在窗体中双击放进去的按钮,就可以进入到按钮的事件开发界面,默认的是单击事件,如下图留意上图中的红框部分,左上角显示的是该按钮的名称,右上角显示的是该按钮的事件,这里是单击事件Click,这两个都是下拉选择框,分别点击它们右边的倒三角可以看到其它的控件和各控件对应的其它方法,如下如果你选中了其它事件,则VBE 会自动给你生成这个事件的函数签名,它是根据按钮的名称和事件名称来命名的,所以这个函数名字应该是不能改动的(我没有试过改)其它按钮的事件也类似,就不赘述了。
2.2 获取控件的值因为控件很多,就不能一一举例了,只举几具做为示例,其它也类似的,通常都是它在属性列表中叫什么,就能通过这个名字来取到它的值文本框假设文本框名为 tbx,则通过 tbx.Value 或者 tbx.Text 都能得到输入到文本框中的内容多选按钮假设多选按钮名为cbx,则通过cbx.Value 可以得到这个多选按钮的值,如果它被选中了,则值为True,否则为False。
ExcelVBA用户窗体编程入门基础
ExcelVBA用户窗体编程基础2010-03-30 22:52:23| 分类:默认分类阅读67 评论0 字号:大中小订阅ExcelVBA用户窗体编程基本概述当应用MsgBox函数和InputBox函数不能满足与用户交互的需求时,您能使用用户窗体来自定义对话框。
您能使用用户窗体来显示所输进的数据,您甚至能使用用户窗体创建一个完全的用户界面,而不会让用户接触到电子表格本身。
您在Windows对话框中所看到的大多数控件都能在用户窗体中实现――命令按钮,选项按钮,复选框,文本框,组合框――加上一些其它不常用的控件像图像,日历,等等。
本文先容了用户窗体的基础概念,并先容了使用用户窗体的常用技巧。
其中,也讲授了一些最通用的思路。
在文章中列举了一个包括所有进程的完全的示例文件,以及实现这些过程的代码,让您能在实践中看到所有工作的根本原理和办法。
本文包含以下内容:● 根本的用户窗体操作● 用户窗体和控件的属性● 一个用户窗体的性命周期● 用户窗体和控件的事件● 问题1:如何在用户窗体间传递数据?● 问题2:如何找到我的窗体中的某类控件?● 问题3:如何获取数据到列表框中?● 问题4:如作甚循环创建进度条?● 一个完全的用户窗体综合示例基础的用户窗体操作? 创立一个窗体。
打开VBE编纂器(选择菜单“工具――宏――Visual Basic编纂器”或按Alt+F11组合键),选择菜单“插进――用户窗体”,或者在工程窗口中单击右键,从弹出的快捷菜单中选择“插入――用户窗体”,即可创建一个窗体。
? 添加控件。
当你创建了一个窗体后,将会显示一个名为“控件工具箱”的浮动工具箱(如果没有该工具箱的话,您可以从视图菜单中找到它),其中显示了最广泛的控件类型。
单击您想要的控件,拖动它到您的用户窗体中。
? 更多的控件。
有一些更多的可用的控件,您可以在控件工具箱中单击右键,从中选择“附加控件”,您能添加日历、电子表格、图形,等等。
? 添加事件程序。
VBA的控件及用户窗体
目录VBA常用技巧 ................................................................................................. 错误!未定义书签。
第8章控件与用户窗体 (4)技巧1限制文本框的输入 (4)技巧2文本框添加右键快捷菜单 (6)技巧3文本框回车自动输入 (10)技巧4自动选择文本框内容 (11)技巧5设置文本框数据格式 (12)技巧6限制文本框的输入长度 (14)技巧7将光标返回文本框中 (15)技巧8文本框的自动换行 (17)技巧9多个文本框数据相加 (19)技巧10控件跟随活动单元格 (20)技巧11高亮显示按钮 (21)技巧12组合框和列表框添加列表项的方法 (23)12-1使用RowSource属性添加列表项 (23)12-2使用List属性添加列表项 (24)12-3使用AddItem方法添加列表项 (25)技巧13去除列表框数据源的重复值和空格 (27)技巧14移动列表框条目 (29)技巧15允许多项选择的列表框 (32)技巧16多列组合框和列表框的设置 (35)16-1多列组合框和列表框添加列表项 (35)16-2多列列表框写入工作表 (37)技巧17输入时逐步提示信息 (39)技巧18二级组合框 (46)技巧19使用DTP控件输入日期 (48)技巧20使用RefEdit控件选择区域 (51)技巧21如何注册控件 (52)技巧22遍历控件的方法 (55)22-1使用名称中的变量遍历控件 (55)22-2使用对象类型遍历控件 (57)22-3使用程序标识符遍历控件 (58)22-4使用名称中的变量遍历图形 (59)22-5使用FormControlType属性遍历图形 (60)技巧23使微调框最小变动量小于1 (61)技巧24不打印工作表中的控件 (63)24-1设置控件格式 (63)24-2设置控件的printobjcet属性 (65)技巧25在框架中使用滚动条 (65)技巧26使用多页控件 (67)技巧27标签文字垂直居中对齐 (69)技巧28使用TabStrip控件 (71)技巧29显示GIF动画图片 (73)技巧30播放Flash文件 (76)技巧31在工作表中添加窗体控件 (78)31-1使用AddFormControl方法 (79)31-2使用Add方法 (81)技巧32在工作表中添加ActiveX控件 (83)32-1使用Add方法 (84)32-2使用AddOLEObject方法 (86)技巧33使用spreadsheet控件 (87)技巧34使用Listview控件 (90)34-1使用Listview控件显示数据列表 (90)34-2在Listview控件中使用复选框 (93)34-3调整Listview控件的行距 (95)34-4在Listview控件中排序 (98)34-5Listview控件的图标设置 (99)技巧35调用非模式窗体 (102)技巧36进度条的制作 (104)36-1使用进度条控件 (104)36-2使用标签控件 (106)技巧37使用TreeView控件显示层次 (109)技巧38用户窗体添加图标 (113)技巧39用户窗体添加最大最小化按纽 (115)技巧40禁用窗体标题栏的关闭按钮 (116)技巧41屏蔽窗体标题栏的关闭按钮 (117)技巧42无标题栏和边框的窗体 (119)技巧43制作年月选择窗体 (120)技巧44自定义窗体中的鼠标指针类型 (123)技巧45调整窗体的显示位置 (124)技巧46由鼠标确定窗体显示位置 (126)技巧47用户窗体的打印 (127)技巧48使用自定义颜色设置窗体颜色 (129)技巧49在窗体中显示图表 (130)49-1使用Export方法 (130)49-2使用API函数 (132)技巧50窗体运行时调整控件大小 (133)技巧51在用户窗体上添加菜单 (136)技巧52在用户窗体上添加工具栏 (140)技巧53使用代码添加窗体及控件 (145)技巧54用户窗体的全屏显示 (151)54-1设置用户窗体为应用程序的大小 (151)54-2根据屏幕分辨率进行设置 (152)技巧55在用户窗体上添加状态栏 (153)第8章控件与用户窗体技巧1 限制文本框的输入用户在使用文本框输入数据时,往往希望能限制输入数据的类型,比如只能输入数字。
【烟花原创】VBA零基础之第6篇代码窗口
【烟花原创】VBA零基础之第6篇代码窗口
今天我们聊聊代码窗口,离代码是越来越近了。
在VBA工程中,每一个模块(Excel对象,窗体,模块,类模块)都有对应的代码窗口。
如何进入模块的代码窗口呢?
只需要在工程资源管理器中双击相关的模块就成了(如果是用户窗体的话,双击是直接进入用户窗体窗口,再次双击用户窗体就可以了)。
打开后的代码窗口如下图:
A:对象列表框,显示对象名称。
B:代码窗口左边的灰色区域,可指标书签,断点,代码运行位置。
C:过程/全模块查看切换按钮,当模块中的过程比较多时,这个就有用处了。
D:定义/过程/事件列表框,选择不同的内容可实现跳转到不同的位置。
整个代码窗口中间的的空白区域就是我们录入代码的地方了,和平时使用的记事本差不多,编辑菜单中的很多功能都与代码窗口相关。
当代码窗口中代码的行数较多的时候,光标所在的行列会在工具栏显示出来。
如果在工具栏找不到的话,右键工具栏,选中标准即可。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章控件与用户窗体范例67 文本框只能输入数值Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger) With TextBox1Select Case KeyANSICase Asc("0") To Asc("9")Case Asc("-")If InStr(1, .Text, "-") > 0 Or .SelStart > 0 ThenKeyANSI = 0End IfCase Asc(".")If InStr(1, .Text, ".") > 0 Then KeyANSI = 0Case ElseKeyANSI = 0End SelectEnd WithEnd SubPrivate Sub TextBox1_Change()Dim i As IntegerDim Str As StringWith TextBox1For i = 1 To Len(.Text)Str = Mid(.Text, i, 1)Select Case StrCase ".", "-", "0" To "9"Case Else.Text = Replace(.Text, Str, "")End SelectNextEnd WithEnd Sub范例68 限制文本框的输入长度Private Sub TextBox1_Change()TextBox1.MaxLength = 6End Sub范例69 验证文本框输入的数据Private Sub CommandButton1_Click()With TextBox1If (Len(Trim(.Text))) = 15 Or (Len(Trim(.Text))) = 18 ThenCells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .TextElseMsgBox "身份证号码错误,请重新输入!"End If.Text = "".SetFocusEnd WithEnd Sub范例70 文本框回车自动输入Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)Dim r As Integerr = Cells(Rows.Count, 1).End(xlUp).RowWith TextBox1If Len(Trim(.Text)) > 0 And KeyCode = vbKeyReturn ThenCells(r + 1, 1) = .Text.Text = ""End IfEnd WithEnd Sub范例71 文本框的自动换行Private Sub UserForm_Initialize()With TextBox1.WordWrap = True.MultiLine = True.Text = "文本框是一个灵活的控件,受下列属性的影响:Text、" _& "MultiLine、WordWrap和AutoSize。
" & vbCrLf _& "Text 包含显示在文本框中的文本。
" & vbCrLf _& "MultiLine 控制文本框是单行还是多行显示文本。
" _& "换行字符用于标识在何处结束一行并开始新的一行。
" _& "如果MultiLine 的值为False,则文本将被截断," _& "而不会换行。
如果文本的长度大于文本框的宽度," _& "WordWrap允许文本框根据其宽度自动换行。
" & vbCrLf _& "如果不使用WordWrap,当文本框在文本中遇到换行字符时," _& "开始一个新行。
如果关闭WordWrap,TextBox中可以有不能" _& "完全适合其宽度的文本行。
文本框根据该宽度,显示宽度以" _& "内的文本部分,截断宽度以外的那文本部分。
只有当" _& "MultiLine为True时,WordWrap才起作用。
" & vbCrLf _& "AutoSize 控制是否调节文本框的大小,以便显示所有文本。
" _& "当文本框使用AutoSize 时,文本框的宽度按照文本框中的" _& "文字量以及显示该文本的字体大小收缩或扩大。
"End WithEnd Sub范例72 格式化文本框数据Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1 = Format(TextBox1, "##,#0.00")End SubPrivate Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2 = Format(TextBox2, "##,#0.00")End Sub范例73 使控件始终位于可视区域Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As RangeSet rng = ActiveWindow.VisibleRange.Cells(1)With CommandButton1.Top = rng.Top.Left = rng.LeftEnd WithWith CommandButton2.Top = rng.Top.Left = rng.Left + CommandButton1.WidthEnd WithSet rng = NothingEnd Sub范例74 高亮显示按钮控件Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)With mandButton1.BackColor = &HFFFF00.Width = 62.Height = 62.Top = 69.Left = 31End WithEnd SubPrivate Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)With mandButton1.BackColor = Me.BackColor.Width = 60.Height = 60.Top = 70.Left = 32End WithEnd Sub范例75 列表框添加列表项的方法75-1 使用RowSource属性Private Sub UserForm_Initialize()Dim r As Integerr = Sheet3.Range("A1048576").End(xlUp).RowListBox1.RowSource = "Sheet3!a1:a" & rEnd Sub75-2 使用ListFillRange属性Sub ListFillRange()Dim r As Integerr = Sheet3.Range("A1048576").End(xlUp).RowSheet1.ListBox1.ListFillRange = "Sheet3!a1:a" & rSheet1.Shapes("列表框").ControlFormat.ListFillRange = "Sheet3!a1:a" & r End Sub75-3 使用List属性Private Sub UserForm_Initialize()Dim arr As VariantDim r As Integerr = Sheet3.Range("A1048576").End(xlUp).Rowarr = Sheet3.Range("A1:A" & r)ListBox1.List = arrEnd SubSub List()Dim arr As VariantDim r As IntegerDim MyObj As Objectr = Sheet3.Range("A1048576").End(xlUp).Rowarr = Sheet3.Range("A1:A" & r)Set MyObj = Sheet2.Shapes("列表框").ControlFormatMyObj.List = arrSet MyObj = NothingEnd Sub75-4 使用AddItem方法Private Sub UserForm_Initialize()Dim r As IntegerDim i As Integerr = Sheet3.Range("A1048576").End(xlUp).RowFor i = 1 To rListBox1.AddItem (Sheet3.Cells(i, 1))NextEnd SubSub AddItem()Dim r As IntegerDim i As Integerr = Sheet3.Range("A1048576").End(xlUp).RowWith Sheet2.Shapes("列表框").ControlFormat.RemoveAllItemsFor i = 1 To r.AddItem Sheet3.Cells(i, 1)NextEnd WithEnd Sub范例76 去除列表项的空行和重复项Private Sub UserForm_Initialize()Dim r As IntegerDim i As IntegerDim MyCol As New CollectionDim arr() As VariantOn Error Resume NextWith Sheet1r = .Cells(.Rows.Count, 1).End(xlUp).RowFor i = 1 To rIf Trim(.Cells(i, 1)) <> "" ThenMyCol.Add Item:=Cells(i, 1), key:=CStr(.Cells(i, 1)) End IfNextEnd WithReDim arr(1 To MyCol.Count)For i = 1 To MyCol.Countarr(i) = MyCol(i)NextListBox1.List = arrEnd Sub范例77 移动列表框的列表项Private Sub CommandButton1_Click()Dim Ind As IntegerDim Str As StringWith Me.ListBox1Ind = .ListIndexSelect Case IndCase -1MsgBox "请选择一行后再移动!"Case 0MsgBox "已经是第一行了!"Case Is > 0Str = .List(Ind).List(Ind) = .List(Ind - 1).List(Ind - 1) = Str.ListIndex = Ind - 1End SelectEnd WithEnd SubPrivate Sub CommandButton2_Click()Dim Ind As IntegerDim Str As StringWith ListBox1Ind = .ListIndexSelect Case IndCase -1MsgBox "请选择一行后再移动!"Case .ListCount - 1MsgBox "已经是最后下一行了!"Case Is < .ListCount - 1Str = .List(Ind).List(Ind) = .List(Ind + 1).List(Ind + 1) = Str.ListIndex = Ind + 1End SelectEnd WithEnd SubPrivate Sub CommandButton3_Click()Dim i As IntegerFor i = 1 To ListBox1.ListCountCells(i, 1) = ListBox1.List(i - 1)NextEnd Sub范例78 允许多项选择的列表框Private Sub UserForm_Initialize()Dim arr As Variantarr = Array("经理室", "办公室", "生技科", "财务科", "营业部", "制水车间", "污水厂", "其他")With Me.ListBox1.List = arr.MultiSelect = 1.ListStyle = 1End WithEnd SubPrivate Sub CommandButton1_Click()Dim i As IntegerDim Str As StringFor i = 0 To ListBox1.ListCount - 1If ListBox1.Selected(i) = True ThenStr = Str & ListBox1.List(i) & Chr(13)End IfNextIf Str <> "" ThenMsgBox StrElseMsgBox "至少需要选择一个部门!"End IfEnd Sub范例79 多列列表框的设置Private Sub UserForm_Initialize()Dim r As IntegerWith Sheet3r = .Cells(.Rows.Count, 1).End(xlUp).Row - 1End WithWith ListBox1.ColumnCount = 7.ColumnWidths = "35,45,45,45,45,40,50".BoundColumn = 1.ColumnHeads = True.TextAlign = 3.RowSource = Sheet3.Range("A2:G" & r).Address(External:=True) End WithEnd SubPrivate Sub ListBox1_Click()Dim r As IntegerDim i As IntegerWith Sheet1r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1For i = 1 To ListBox1.ColumnCount.Cells(r, i) = ListBox1.Column(i - 1)NextEnd WithEnd Sub范例80 二级组合框Private Sub UserForm_Initialize()Dim r As IntegerDim MyCol As New CollectionDim arr() As VariantDim rng As RangeDim i As IntegerOn Error Resume Nextr = Cells(Rows.Count, 1).End(xlUp).RowFor Each rng In Range("A2:A" & r)MyCol.Add rng, CStr(rng)NextReDim arr(1 To MyCol.Count)For i = 1 To MyCol.Countarr(i) = MyCol(i)NextComboBox1.List = arrComboBox1.ListIndex = 0Set MyCol = NothingSet rng = NothingEnd SubPrivate Sub ComboBox1_Change()Dim MyAddress As StringDim rng As RangeComboBox2.ClearWith Sheet1.Range("A:A")Set rng = .Find(What:=ComboBox1.Text)If Not rng Is Nothing ThenMyAddress = rng.AddressDoComboBox2.AddItem rng.Offset(, 1)Set rng = .FindNext(rng)Loop While Not rng Is Nothing And rng.Address <> MyAddress End IfEnd WithComboBox2.ListIndex = 0Set rng = NothingEnd Sub范例81 使用RefEdit控件选择区域Private Sub CommandButton1_Click()Dim rng As RangeOn Error Resume NextSet rng = Range(RefEdit1.Value)rng.Interior.ColorIndex = 16Set rng = NothingEnd Sub范例82 使用多页控件Private Sub UserForm_Initialize()MultiPage1.Value = 0End SubPrivate Sub MultiPage1_Change()If MultiPage1.SelectedItem.Index > 0 ThenMsgBox "您选择的是" & MultiPage1.SelectedItem.Caption & "页面!"End IfEnd Sub范例83 使用TabStrip控件Private Sub UserForm_Initialize()TabStrip1.Value = 0TabStrip1.Style = 0End SubPrivate Sub TabStrip1_Change()Dim str As StringDim FilPath As Stringstr = TabStrip1.SelectedItem.CaptionFilPath = ThisWorkbook.Path & "\" & str & ".jpg"Image1.Picture = LoadPicture(FilPath)Label1.Caption = str & "欢迎您!"End Sub范例84 在框架中使用滚动条Private Sub UserForm_Initialize()With Frame1.ScrollBars = 3.ScrollHeight = Image1.Height.ScrollWidth = Image1.WidthEnd WithEnd Sub范例85 制作进度条Sub myProgressBar()Dim r As IntegerDim i As IntegerWith Sheet1r = .Cells(.Rows.Count, 1).End(xlUp).RowUserForm1.Show 0With UserForm1.ProgressBar1.Min = 1.Max = r.Scrolling = 0End WithFor i = 1 To r.Cells(i, 3) = Round(.Cells(i, 1) * .Cells(i, 2), 2)Application.Goto Reference:=.Cells(i, 1), Scroll:=TrueUserForm1.ProgressBar1.Value = iUserForm1.Caption = "程序正在运行,已完成" & Format((i / r) * 100, "0.00") & "%,请稍候!"NextEnd WithUnload UserForm1End Sub范例86 使用DTP控件输入日期Private Sub Worksheet_SelectionChange(ByVal Target As Range)With Me.DTPicker1If Target.Count = 1 And Target.Column = 1 And Not Target.Row = 1 Or Target.MergeCells Then.Visible = True.Top = Selection.Top.Left = Selection.Left.Height = Selection.Height.Width = Selection.WidthIf Target.Cells(1, 1) <> "" Then.Value = Target.Cells(1, 1).ValueElse.Value = DateEnd IfElse.Visible = FalseEnd IfEnd WithEnd SubPrivate Sub Worksheet_Change(ByVal Target As Range)If Target.Count = 1 And Target.Column = 1 Or Target.MergeCells Then If Target.Cells(1, 1).Value = "" ThenDTPicker1.Visible = FalseEnd IfEnd IfEnd SubPrivate Sub DTPicker1_CloseUp()ActiveCell.Value = Me.DTPicker1.ValueMe.DTPicker1.Visible = FalseEnd Sub范例87 使用spreadsheet控件Private Sub UserForm_Initialize()Dim r As IntegerDim arr As VariantDim i As IntegerWith Sheet3r = .Cells(.Rows.Count, 1).End(xlUp).Rowarr = .Range("A1:G" & r)End WithWith Me.Spreadsheet1.DisplayToolbar = False.DisplayWorkbookTabs = False.DisplayHorizontalScrollBar = False.DisplayVerticalScrollBar = True.Rows.RowHeight = 15.Columns.ColumnWidth = 8With .Range("A1:G" & r).Value = arr.HorizontalAlignment = -4108.Borders.LineStyle = xlContinuous.Borders.ColorIndex = 10.NumberFormat = "0.00"End WithEnd WithEnd SubPrivate Sub CommandButton1_Click()Dim r As IntegerDim arr As VariantWith Me.Spreadsheet1r = .Cells(.Rows.Count, 1).End(xlUp).Rowarr = .Range("A1:G" & r)Sheet1.Range("A1:G" & r) = arrEnd WithUnload MeEnd SubSub RegWriteProc()Dim WshShellSet WshShell = CreateObject("Wscript.Shell")WshShell.RegWrite"HKCU\Software\Microsoft\Office\Common\Security\UFIControls", 1, "REG_DWORD"WshShell.RegWrite"HKCU\Software\Microsoft\VBA\Security\LoadControlsInForms", 1, "REG_DWORD"Set WshShell = NothingEnd Sub范例88 使用TreeView控件显示层次Private Sub UserForm_Initialize()Dim c As IntegerDim r As IntegerDim rng As Variantrng = edRangeWith TreeView1.Style = tvwTreelinesPlusMinusPictureText.LineStyle = tvwRootLines.CheckBoxes = FalseWith .Nodes.Clear.Add Key:="科目", Text:="科目名称"For c = 1 To edRange.Columns.CountFor r = 2 To edRange.Rows.CountIf Not IsEmpty(rng(r, c)) ThenIf c = 1 Then.Add relative:="科目", Relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)ElseIf Not IsEmpty(rng(r, c - 1)) Then.Add relative:=rng(r, c - 1), Relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)Else.Add relative:=CStr(Sheet2.Cells(r, c - 1).End(xlUp)), Relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)End IfEnd IfNextNextEnd WithEnd WithEnd SubPrivate Sub TreeView1_DblClick()Dim r As IntegerWith Sheet1r = .Cells(.Rows.Count, 1).End(xlUp).Row + 1If TreeView1.SelectedItem.Children = 0 Then.Range("A" & r) = TreeView1.SelectedItem.TextElseMsgBox "您所选择的不是末级科目,请重新选择!"End IfEnd WithEnd Sub范例89 使用Listview控件89-1 使用Listview控件显示数据列表Private Sub UserForm_Initialize()Dim Itm As ListItemDim r As IntegerDim i As IntegerDim c As Integerr = Cells(Rows.Count, 1).End(xlUp).RowWith ListView1.ColumnHeaders.Add , , "人员编号", 50, 0.ColumnHeaders.Add , , "技能工资", 50, 1.ColumnHeaders.Add , , "岗位工资", 50, 1.ColumnHeaders.Add , , "工龄工资", 50, 1.ColumnHeaders.Add , , "浮动工资", 50, 1.ColumnHeaders.Add , , "其他", 50, 1.ColumnHeaders.Add , , "应发合计", 50, 1.View = lvwReport.Gridlines = TrueFor i = 2 To rSet Itm = .ListItems.Add()Itm.Text = Space(2) & Cells(i, 1)For c = 1 To 6Itm.SubItems(c) = Format(Cells(i, c + 1), "##,#,0.00")NextNextEnd WithSet Itm = NothingEnd Sub89-2 在Listview控件中使用复选框Private Sub UserForm_Initialize()Dim Itm As ListItemDim r As IntegerDim i As IntegerDim c As Integerr = Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).RowWith ListView1.ColumnHeaders.Add , , "人员编号", 50, 0.ColumnHeaders.Add , , "技能工资", 50, 1.ColumnHeaders.Add , , "岗位工资", 50, 1.ColumnHeaders.Add , , "工龄工资", 50, 1.ColumnHeaders.Add , , "浮动工资", 50, 1.ColumnHeaders.Add , , "其他", 50, 1.ColumnHeaders.Add , , "应发合计", 50, 1.View = lvwReport.Gridlines = True.FullRowSelect = True.CheckBoxes = TrueFor i = 2 To r - 1Set Itm = .ListItems.Add()Itm.Text = Sheet2.Cells(i, 1)For c = 1 To 6Itm.SubItems(c) = Format(Sheet2.Cells(i, c + 1), "##,#,0.00") NextNextEnd WithSet Itm = NothingEnd SubPrivate Sub CommandButton1_Click()Dim r As IntegerDim i As IntegerDim c As Integerr = Cells(Rows.Count, 1).End(xlUp).RowIf r > 1 Then Range("A2:G" & r).ClearContentsWith ListView1For i = 1 To .ListItems.CountIf .ListItems(i).Checked ThenCells(Rows.Count, 1).End(xlUp).Offset(1, 0) = .ListItems(i)For c = 1 To 6Cells(Rows.Count, c + 1).End(xlUp).Offset(1, 0) = .ListItems(i).SubItems(c)NextEnd IfNextEnd WithEnd Sub89-3 调整Listview控件的行距Private Sub UserForm_Initialize()Dim Itm As ListItemDim i As IntegerDim c As IntegerDim Img As ListImageWith ListView1.ColumnHeaders.Add , , "人员编号", 50, 0.ColumnHeaders.Add , , "技能工资", 50, 1.ColumnHeaders.Add , , "岗位工资", 50, 1.ColumnHeaders.Add , , "工龄工资", 50, 1.ColumnHeaders.Add , , "浮动工资", 50, 1.ColumnHeaders.Add , , "其他", 50, 1.ColumnHeaders.Add , , "应发合计", 50, 1.View = lvwReport.Gridlines = True.FullRowSelect = TrueFor i = 2 To Cells(Rows.Count, 1).End(xlUp).RowSet Itm = .ListItems.Add()Itm.Text = Space(2) & Cells(i, 1)For c = 1 To 6Itm.SubItems(c) = Format(Cells(i, c + 1), "##,#,0.00")NextNextSet Img = ImageList1.ListImages.Add _(Picture:=LoadPicture(ThisWorkbook.Path & "\" & "1×25.bmp")) .SmallIcons = ImageList1End WithSet Itm = NothingSet Img = NothingEnd Sub89-4 在Listview控件中排序Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)With ListView1.Sorted = True.SortOrder = (.SortOrder + 1) Mod 2.SortKey = ColumnHeader.Index - 1End WithEnd Sub89-5 Listview控件的图标设置Private Sub UserForm_Initialize()Dim ITM As ListItemDim i As IntegerWith ListView1.View = lvwIcon.Icons = ImageList1For i = 2 To 6Set ITM = .ListItems.Add()ITM.Text = Cells(i, 1)ITM.Icon = i - 1NextEnd WithSet ITM = NothingEnd SubPrivate Sub UserForm_Initialize()Dim ITM As ListItemDim i As IntegerWith ListView1.View = lvwSmallIcon.SmallIcons = ImageList1For i = 2 To 6Set ITM = .ListItems.Add()ITM.Text = Cells(i, 1)ITM.SmallIcon = i - 1NextEnd WithSet ITM = NothingEnd Sub范例90 使用Toolbar控件添加工具栏Private Sub UserForm_Initialize()Dim arr As VariantDim i As Bytearr = Array(" 录入", " 审核", " 记账", " 结账", "负债表", "损益表") With Toolbar1.ImageList = ImageList1.Appearance = ccFlat.BorderStyle = ccNone.TextAlignment = tbrTextAlignBottomWith .Buttons.Add(1, , "").Style = tbrPlaceholderFor i = 0 To UBound(arr).Add(i + 2, , , , i + 1).Caption = arr(i)NextEnd WithEnd WithEnd Sub范例91 使用StatusBar控件添加状态栏Private Sub UserForm_Initialize()Dim Pal As PanelDim arr1 As VariantDim arr2 As VariantDim i As Integerarr1 = Array(0, 6, 5)arr2 = Array(180, 60, 54)StatusBar1.Width = 294For i = 1 To 3Set Pal = StatusBar1.Panels.Add()With Pal.Style = arr1(i - 1).Width = arr2(i - 1).Alignment = i - 1End WithNextStatusBar1.Panels(1).Text = "准备就绪!"End SubPrivate Sub TextBox1_Change()StatusBar1.Panels(1).Text = "正在输入:" & TextBox1.Text End Sub范例92 使用AniGif控件显示GIF图片Private Sub CommandButton1_Click()AniGif1.Stretch = TrueAniGif1.Filename = ThisWorkbook.Path & "\001.gif"End Sub范例93 使用ShockwaveFlash控件播放Flash文件Private Sub CommandButton1_Click()With ShockwaveFlash1.Movie = ThisWorkbook.Path & "\001.swf".EmbedMovie = False.Menu = False.ScaleMode = 2End WithEnd SubPrivate Sub CommandButton2_Click()ShockwaveFlash1.PlayEnd SubPrivate Sub CommandButton3_Click()ShockwaveFlash1.ForwardEnd SubPrivate Sub CommandButton4_Click()ShockwaveFlash1.StopEnd SubPrivate Sub CommandButton5_Click()ShockwaveFlash1.BackEnd SubPrivate Sub CommandButton6_Click()ShockwaveFlash1.Movie = " "End SubPrivate Sub CommandButton7_Click()Unload MeEnd Sub范例94 注册自定义控件Sub Regsvrs()Dim SouFile As StringDim DesFile As StringOn Error Resume NextSouFile = ThisWorkbook.Path & "\VBAniGIF.OCX"DesFile = "C:\Windows\system32\VBAniGIF.OCX"FileCopy SouFile, DesFileShell "REGSVR32 /s " & DesFileMsgBox "AniGif控件已成功注册,现在可以使用了!"End SubSub Regsvru()Shell "REGSVR32 /u C:\Windows\system32\VBAniGIF.OCX"End Sub范例95 不打印工作表中的控件范例96 遍历控件的方法96-1 使用名称中的变量Private Sub CommandButton1_Click()Dim i As IntegerFor i = 1 To 3Me.Controls("TextBox" & i) = ""NextEnd SubSub ClearText()Dim i As IntegerFor i = 1 To 4Sheet1.OLEObjects("TextBox" & i).Object.Text = ""NextEnd Sub96-2 使用对象类型Private Sub CommandButton1_Click()Dim Ctr As ControlFor Each Ctr In Me.ControlsIf TypeName(Ctr) = "TextBox" ThenCtr = ""End IfNextSet Ctr = NothingEnd SubSub ClearText()Dim Obj As OLEObjectFor Each Obj In Sheet1.OLEObjectsIf TypeName(Obj.Object) = "TextBox" ThenObj.Object.Text = ""End IfNextSet Obj = NothingEnd Sub96-3 使用程序标识符Sub ClearText()Dim Obj As OLEObjectFor Each Obj In Sheet1.OLEObjectsIf Obj.progID = "Forms.TextBox.1" ThenObj.Object.Text = ""End IfNextSet Obj = NothingEnd Sub96-4 使用FormControlType属性Sub ControlType()Dim MyShape As ShapeFor Each MyShape In Sheet1.ShapesIf MyShape.Type = msoFormControl ThenIf MyShape.FormControlType = xlCheckBox ThenMyShape.ControlFormat.Value = 1End IfEnd IfNextSet MyShape = NothingEnd Sub范例97 使用程序代码添加控件97-1 使用Add方法添加表单控件Sub AddButton()Dim MyButton As ButtonOn Error Resume NextSheet1.Shapes("MyButton").DeleteSet MyButton = Sheet1.Buttons.Add(60, 40, 100, 30)With MyButton.Name = "MyButton".Font.Size = 12.Font.ColorIndex = 5.Characters.Text = "新建的按钮".OnAction = "MyButton"End WithSet MyButton = NothingEnd SubSub MyButton()MsgBox "这是使用Add方法新建的按钮!"End Sub97-2 使用AddFormControl方法添加表单控件Sub AddButton()Dim MyShape As ShapeOn Error Resume NextSheet1.Shapes("MyButton").DeleteSet MyShape = Sheet1.Shapes.AddFormControl(0, 60, 40, 100, 30) With MyShape.Name = "MyButton"With .TextFrame.Characters.Font.ColorIndex = 3.Font.Size = 12.Text = "新建的按钮"End With.OnAction = "MyButton"End WithSet MyShape = NothingEnd SubSub MyButton()MsgBox "这是使用AddFormControl方法新建的按钮!"End Sub98-3 使用Add方法添加ActiveX控件Sub AddButton()Dim Obj As New OLEObjectOn Error Resume NextSheet1.OLEObjects("MyButton").DeleteSet Obj = Sheet1.OLEObjects.Add(ClassType:="mandButton.1", _ Left:=60, Top:=40, Width:=100, Height:=30)With Obj.Name = "MyButton".Object.Caption = "新建的按钮".Object.Font.Size = 12.Object.ForeColor = &HFF&End WithWith ActiveWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule If .Lines(1, 1) <> "Option Explicit" Then.InsertLines 1, "Option Explicit"End IfIf .Lines(2, 1) = "Private Sub MyButton_Click()" Then Exit Sub.InsertLines 2, "Private Sub MyButton_Click()".InsertLines 3, vbTab & "MsgBox ""这是使用Add方法新建的按钮!""".InsertLines 4, "End Sub"End WithSet Obj = NothingEnd Sub98-4 使用AddOLEObject方法添加ActiveX控件Sub AddButton()Dim MyButton As ShapeOn Error Resume NextSheet1.Shapes("MyButton").DeleteSet MyButton = Sheet1.Shapes.AddOLEObject( _ClassType:="mandButton.1", _Left:=60, Top:=40, Width:=100, Height:=30) = "MyButton"With ActiveWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule If .Lines(1, 1) <> "Option Explicit" Then.InsertLines 1, "Option Explicit"End IfIf .Lines(2, 1) = "Private Sub MyButton_Click()" Then Exit Sub.InsertLines 2, "Private Sub MyButton_Click()".InsertLines 3, vbTab & "MsgBox ""这是使用AddOLEObject方法新建的按钮!""".InsertLines 4, "End Sub"End WithSet MyButton = NothingEnd Sub范例98 禁用用户窗体的关闭按钮Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 ThenCancel = TrueMsgBox "请点击""关闭""按钮关闭用户窗体!"End IfEnd Sub范例99 屏蔽用户窗体的关闭按钮Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long Private Const GWL_STYLE = (-16)Private Const WS_SYSMENU = &H80000Private Hwnd As LongPrivate Sub UserForm_Initialize()Dim Istype As LongHwnd = FindWindow("ThunderDFrame", Me.Caption)Istype = GetWindowLong(Hwnd, GWL_STYLE)Istype = Istype And Not WS_SYSMENUSetWindowLong Hwnd, GWL_STYLE, IstypeDrawMenuBar HwndEnd Sub范例100 用户窗体添加图标Dim hwnd As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Const WM_SETICON = &H80Private Const ICON_SMALL = 0&Private Const ICON_BIG = 1&Sub ChangeIcon(ByVal hwnd As Long, Optional ByVal hIcon As Long = 0&) SendMessage hwnd, WM_SETICON, ICON_SMALL, ByVal hIconSendMessage hwnd, WM_SETICON, ICON_BIG, ByVal hIconDrawMenuBar hwndEnd SubPrivate Sub UserForm_Initialize()hwnd = FindWindow(vbNullString, Me.Caption)Call ChangeIcon(hwnd, Image1.Picture.Handle)End Sub范例101 用户窗体添加最大最小化按纽Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Const WS_MAXIMIZEBOX = &H10000Private Const WS_MINIMIZEBOX = &H20000Private Const GWL_STYLE = (-16)Private Sub UserForm_Initialize()Dim hWndForm As LongDim iStyle As LonghWndForm = FindWindow("ThunderDFrame", Me.Caption)iStyle = GetWindowLong(hWndForm, GWL_STYLE)iStyle = iStyle Or WS_MINIMIZEBOXiStyle = iStyle Or WS_MAXIMIZEBOXSetWindowLong hWndForm, GWL_STYLE, iStyleEnd Sub范例102 无标题栏和边框的用户窗体Private Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Const GWL_STYLE As Long = (-16)Private Const GWL_EXSTYLE = (-20)Private Const WS_CAPTION As Long = &HC00000Private Const WS_EX_DLGMODALFRAME = &H1&Private Sub UserForm_Initialize()Dim IStyle As LongDim Hwnd As LongIf Val(Application.Version) < 9 ThenHwnd = FindWindow("ThunderXFrame", Me.Caption)ElseHwnd = FindWindow("ThunderDFrame", Me.Caption)End IfIStyle = GetWindowLong(Hwnd, GWL_STYLE)IStyle = IStyle And Not WS_CAPTIONSetWindowLong Hwnd, GWL_STYLE, IStyleDrawMenuBar HwndIStyle = GetWindowLong(Hwnd, GWL_EXSTYLE) And Not WS_EX_DLGMODALFRAMESetWindowLong Hwnd, GWL_EXSTYLE, IStyleEnd Sub范例103 透明的用户窗体Private Declare Function GetActiveWindow Lib "user32" () As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal。