ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5984|回复: 16

[分享] VBA窗体学习笔记四:UserForm对象

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-17 09:19 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
    一、概况
        允许在项目中创建窗口或对话框, 在窗体上绘制和查看控件。设计窗体时:
        1、每个窗体窗口都有一个“最大化”、“最小化”和“关闭”按钮;
        2、可以在“选项”对话框的“常规”选项卡上查看窗体网格并确定网格线的大小。
        3、使用工具箱中的按钮在窗体上绘制控件。 可以将控件设置为与“选项”对话框的“常规”选项卡上窗体的网格对齐。
            键盘快捷方式:
                在 UserForm 窗口中使用这些组合键。 若要重新选择所有控件,请单击该窗体。 若要选择容器中的控件,请先取消选择该容器,
            然后在所需控件周围使用 Ctrl+单击+拖动。
                快捷方式                描述
            F7                        打开所选对象的代码窗口(查看、编辑对象的代码)
            SHIFT+F7                打开所选对象代码的对象窗口(从代码窗口返回窗体设计窗口)       
            Del 或 DELETE        删除选中的控件,不必将其放置“剪贴板”
            Ctrl+Z                撤销对控件的删除操作
            Tab                按Tab键顺序在控件中向前循环
            SHIFT+TAB                按Tab键顺序在控件中向后循环
            Ctrl+单击                从选定内容中添加或删除控件选定
            SHIFT+单击                选择多个控件
            单击+拖动                选择多个控件
            Ctrl+单击+拖动        从当前选定内容中添加或删除控件
            F4                        显示“属性”窗口(只在设计时)
            SHIFT+F10                查看快捷方式。
            Ctrl+J                移至顶层,只在设计时影响重叠控件
            Ctrl+K                移至底层,只在设计时影响重叠控件
    二、常用属性
        1、BackColor:背景色。设置或获取属性值,该属性标识UserForm对象的背景颜色。
            Me.BackColor = vbBlue
        2、BorderColor:边框颜色。设置或获取属性值,该属性标识UserForm对象的边框颜色。
            Me.BorderColor = vbRed
            注意:该属性在属性BorderStyle = fmBorderStyleSingle时才有效
        3、BorderStyle:边框类型。设置或获取属性值,该属性标识UserForm对象的边框类型。
            Me.BorderStyle = fmBorderStyleNone '值为0(默认值),无边框
            Me.BorderStyle = fmBorderStyleSingle '值为1,单线边框
        4、Caption:说明文字。设置或获取属性值,该属性标识UserForm对象的标题名称。
            Me.Caption = "信息登记"
        5、Cycle:循环。设置或获取属性值,该属性标识UserForm对象当用户将最后一个控件保留在Frame或Page上时要执行的操作。
            Me.Cycle = fmCycleAllForms '值为0(默认值),循环所有窗体
            Me.Cycle = CycleCurrentForm '值为2,循环当前窗体
            注意:(1)、Tab键顺序标识当用户从窗体或子窗体切换时控件接收焦点的顺序。 Cycle属性确定用户按Tab键顺序从最后一个控件切换时要执行的操作。
                       (2)、当用户从Tab键顺序中的最后一个控件选项卡时,fmCycleAllForms设置将焦点转移到窗体上下一个Frame或MultiPage的第一个控件。
                       (3)、当用户从Tab键顺序中的最后一个控件选项卡时,fmCycleCurrentForm设置将焦点转移到同一窗体、Frame或MultiPage的第一个控件。
        6、DrawBuffer:绘图缓冲区。设置或获取属性值,该属性标识UserForm对象在呈现框架时为屏幕外内存留出的像素数。
            Me.DrawBuffer = 32000
            注意:(1)、DrawBuffer属性指定在显示屏重新绘制时,一次可绘制的最大像素数。 对象使用的实际内存取决于显示屏的屏幕分辨率;
                       (2)、如果为DrawBuffer设置了较大的值,则性能会降低。 大缓冲区仅在多个大型图像重叠时有帮助;
                       (3)、使用“属性”窗口可指定DrawBuffer的值;
                       (4)、DrawBuffer属性值范围在 16,000 和 1,048,576 之间,其值等于对象可在屏幕外呈现的最大像素数。
        7、Enabled:可操作性。设置或获取该属性值,该属性标识UserForm对象的可操作性。
            Me.Enabled = False '值为0,UserForm不可以操作,ControlTipText控件提示文本也不被显示
            Me.Enabled =  True '值为1(默认值),UserForm可以操作
        8、Font:字体。设置或获取该属性值,该属性标识UserForm对象的文字特征,包括字体,字号大小,斜体,下划线等。
            Me.Font.Name = "宋体"  '字体名称
            Me.Font.Size = 14  '字体大小
            Me.Font.Italic = True  '斜体
            Me.Font.Bold = True  '粗体
            Me.Font.Underline = True  '下划线
            Me.Font.Strikethrough = True  '删除线
            不常用的两个:Me.Font.Weight(灰度)、Me.Font.Charset(字符集)
        9、ForeColor:前景颜色。设置或获取该属性值,该属性标识UserForm对象文字的前景颜色。
            Me.ForeColor = RGB(125, 125, 0)
            Me.ForeColor = vbBlue
            不能用ColorIndex方法:Me.ForeColor.ColorIndex = 3 会出现无效限定符提示
        10、Height:高度。设置或获取该属性值,该属性标识UserForm对象的高度。
            Me.Height = 150
            Me.Height = Int(0.99 * ActiveWindow.Height) '对象高度为当前活动窗口高度的0.99
        11、Width:宽度。设置或获取该属性值,该属性标识UserForm对象的宽度。
            Me.Width = 450
            Me.Width = Int(0.66 * ActiveWindow.Width) '对象宽度为当前活动窗口宽度的0.66
        12、HelpContextID:帮助上下文ID。指定由 HelpFile属性设置指定的自定义“帮助”文件中某个主题的上下文 ID。 Long 型,可读/写。
            Me.HelpContextID = 1
        13、KeepScrollBarsVisible:保持滚动条可见。设置或获取该属性值,该属性标识UserForm对象指定滚动条在不需要时是否仍可见。
            Me.KeepScrollBarsVisible = fmScrollBarsNone '值为0,不显示任何滚动条
            Me.KeepScrollBarsVisible = fmScrollBarsHorizontal '值为1,显示水平滚动条
            Me.KeepScrollBarsVisible = fmScrollBarsVertical '值为2,显示垂直滚动条
            Me.KeepScrollBarsVisible = fmScrollBarsBoth '值为3(默认值),同时显示水平和垂直滚动条
        14、StartUpPosition:启动位置。设置或获取该属性值,该属性标识UserForm对象首次出现时的位置。
            Me.StartUpPosition = Manual '值为0,不指定初始设置
            Me.StartUpPosition = CenterOwner '值为1(默认值),位于UserForm所属项目(Excel窗口)的中央
            Me.StartUpPosition = CenterScreen '值为2,位于整个屏幕的中央
            Me.StartUpPosition = WindowsDefault '值为3,位于屏幕的左上角
            注意:(1)、StartUpPosition四个常量值为微软官网提供,实际赋值中不会报错,但与描述不符,用数值则不会出现类似问题;
                       (2)、StartUpPosition属性可在初始化事件中设置,也可在加载后显示前设置,如:
                Load UserForm1
                UserForm1.StartUpPosition = 3
                UserForm1.Show
        15、Left:左边。设置或获取该属性值,该属性标识UserForm对象距离主窗口(Excel窗口、屏幕)左边界的距离。
            Me.Left = 10
            注意:仅当StartUpPosition属性设为0或3时,Left属性才能生效。
        16、Top:顶部。设置或获取该属性值,该属性标识UserForm对象距离主窗口(Excel窗口、屏幕)上边界的距离。
            Me.Top = 10
            注意:仅当StartUpPosition属性设为0或3时,Top属性才能生效。
        17、MouseIcon:鼠标图标。当属性MousePointer设为99时,设定一个自定义的鼠标图标。
            Me.MousePointer = 99 '鼠标指针设为自定义
            Me.MouseIcon = LoadPicture("C:\Users\DY\Desktop\3 Balls.ico") '图标文件必须是扩展名为ico的文件,否则会报无效的图片错误
            注意:(1)、MouseIcon属性在MousePointer属性设置为99时才有效。 对象的鼠标图标是当用户将鼠标移过对象时出现的图像。
                       (2)、既可以在属性窗口为MouseIcon属性指定图片,也可以使用LoadPicture函数用代码从文件加载图片。
        18、MousePointer:鼠标指针。设置或获取该属性值,该属性标识用户将鼠标移过UserForm对象时所显示的形状
            Me.MousePointer = fmMousePointerDefault '值为0(默认值),标准指针。 由对象确定的图像(默认)
            Me.MousePointer = fmMousePointerArrow '值为1,箭头
            Me.MousePointer = fmMousePointerCross '值为2,十字型指针
            Me.MousePointer = fmMousePointerIBeam '值为3,I型指针
            Me.MousePointer = fmMousePointerSizeNESW '值为6,指向东北方向和西南方向的双箭头
            Me.MousePointer = fmMousePointerSizeNS '值为7,指向正北方向和正南方向的双箭头。
            Me.MousePointer = fmMousePointerSizeNWSE '值为8,指向西北方向和东南方向的双箭头
            Me.MousePointer = fmMousePointerSizeWE '值为9,指向正东方向和正西方向的双箭头
            Me.MousePointer = fmMousePointerUpArrow '值为10,向上箭头
            Me.MousePointer = fmMousePointerHourglass '值为11,沙漏
            Me.MousePointer = fmMousePointerNoDrop '值为12,将拖动的对象顶部的“Not”符号。 指示无效的放置目标
            Me.MousePointer = fmMousePointerAppStarting '值为13,带沙漏的箭头
            Me.MousePointer = fmMousePointerHelp '值为14,带问号的箭头
            Me.MousePointer = fmMousePointerSizeAll '值为15,调整所有光标的大小(指向正北方向、正南方向、正东方向和正西方向的箭头)
            Me.MousePointer = fmMousePointerCustom '值为99,使用由MouseIcon属性指定的图标
            注意:当UserForm对象上其他控件未设置MousePointer属性时,则采用UserForm对象确定的鼠标指针或图标,有设置则采用控件自己的设计。
        19、Picture:图片。指定要在UserForm对象上显示的图片(背景图片)。
            Me.Picture = LoadPicture("C:\Users\DY\Desktop\Balls.JPG") '加载背景图片
            注意:(1)、既可以在属性窗口为Picture属性指定图片,也可以使用LoadPicture函数用代码从文件加载图片;
                       (2)、若要删除分配给对象的图片,请单击属性页上的Picture属性的值,然后按 Delete。 按BackSpace不会删除图片。
        20、PictureAlignment:图片对齐方式。设置或获取该属性值,该属性标识UserForm对象背景图片的位置。
            Me.PictureAlignment = mPictureAlignmentTopLeft '值为0,左上角。
            Me.PictureAlignment = fmPictureAlignmentTopRight '值为1,右上角。
            Me.PictureAlignment = fmPictureAlignmentCenter '值为2(默认值),中心位置。
            Me.PictureAlignment = fmPictureAlignmentBottomLeft '值为3,左下角。
            Me.PictureAlignment = fmPictureAlignmentBottomRight '值为4,右下角对齐。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-17 09:20 | 显示全部楼层
        21、PictureSizeMode:图片大小模式。设置或获取该属性值,该属性指定如何在UserForm对象上显示背景图片(放大或拉伸)。
            Me.PictureSizeMode = fmPictureSizeModeClip '值为0(默认值),裁剪大于窗体或页面的图片的任何部分
            Me.PictureSizeMode = fmPictureSizeModeStretch '值为1,拉伸图片以充满窗体或页。 此设置使图片在水平或垂直方向失真
            Me.PictureSizeMode = fmPictureSizeModeZoom '值为3,放大图片,但不使图片在水平或垂直方向上发生变形
        22、PictureTiling:图片平铺。设置或获取该属性值,该属性标识UserForm背景图片是否平铺。
            Me.PictureTiling = False '值为0(默认值),图片不在背景中平铺
            Me.PictureTiling = True '值为1,图片在背景中平铺
        23、RightToLeft:从右到左。设置或获取该属性值,该属性标识UserForm对象是否支持双向特征。
            Me.RightToLeft =  False '值为0(默认值),不支持双向特征
            Me.RightToLeft =  True '值为1,支持双向特征
            注意:(1)、RightToLeft是放置指定控件的Microsoft Forms 2.0窗体的新属性;它不是控件的属性。RightToLeft既影响窗体,也影响位于其上的任何控件;
                       (2)、当RightToLeft属性设置为True时,Microsoft Forms 2.0控件将能够显示双向特征。 当此属性设置为False时,窗体和控件不会显示双向特征。
                Microsoft Forms 2.0 组件//RightToLeft = True 行为
                           ①、所有窗体和控件//垂直滚动条 (如果存在)位于窗体或控件的左侧。 水平滚动条的初始滑块位置在最右侧,并且显示信息的最右侧部分;
                           ②、表单//标题栏标题右对齐;
                           ③、框架控件//标题位于框架的右上角;
                           ④、TabStrip控件和MultiPage控件//对于特定 TabOrientation 设置,选项卡按从右到左的顺序显示(即第一个选项卡从控件右边界开始)。
                               对于 TabOrientation = Top,选项卡沿控件的上边缘从右到左显示;
                               对于 TabOrientation = Bottom,选项卡沿控件的下边缘从右到左显示;
                               如果所有选项卡的总宽度超过控件的宽度和MultiRow=False,则选项卡将从右到左显示,就像MultiRow=True一样。
        24、ScrollBars:滚动条。设置或获取该属性值,该属性标识UserForm对象是否有垂直、水平滚动条。
            Me.ScrollBars = fmScrollBarsNone '值为0(默认值),不显示滚动条
            Me.ScrollBars = fmScrollBarsHorizontal '值为1,显示水平滚动条
            Me.ScrollBars = fmScrollBarsVertical '值为2,显示垂直滚动条
            Me.ScrollBars = fmScrollBarsBoth '值为3,同时显示水平和垂直滚动条
            注意:(1)、如果 KeepScrollBarsVisible属性为True,则窗体或页面上的所有滚动条始终可见,而无论对象的内容是否在对象的边界内;
                       (2)、如果滚动条可见,滚动条将滚动块限制在滚动条的可见区域中。 滚动条还会根据需要修改滚动位置以使整个滚动条可见。 当ScrollBars属性改变
                  时,或滚动大小改变时,或可见大小改变时,滚动条范围都将会改变;
                       (3)、如果滚动条不可见,则可以将其滚动位置设置为任何值。 负值以及大于滚动大小的值都是有效的;
                       (4)、对于单行控件,您可以通过使用ScrollBars和AutoSize属性显示水平滚动条。 根据以下规则隐藏或显示滚动条:
                           ①、ScrollBars设置为fmScrollBarsNone时,不显示任何滚动条;
                           ②、ScrollBars设置为fmScrollBarsHorizontal或fmScrollBarsBoth时,如果文本长于编辑区域以及如果控件有足够的空间来将滚动条包含在其编辑
                       区域下方,则控件显示水平滚动条。
                           ③、AutoSize为True时,控件通过扩大自身来适应滚动条的增加,除非控件已是或将达到其最大尺寸。
                       (5)、对于多行TextBox ,可以通过使用ScrollBars、WordWrap和AutoSize属性显示滚动条。 根据以下规则隐藏或显示滚动条:
                           ①、ScrollBars设置为fmScrollBarsNone时,不显示任何滚动条;
                           ②、ScrollBars设置为fmScrollBarsVertical或fmScrollBarsBoth时,如果文本长于编辑区域以及如果控件有足够的空间来将滚动条包含到其编辑区域
                       的右边缘,则控件显示垂直滚动条。
                           ③、WordWrap 为 True 时,多行控件将不显示水平滚动条。 大多数多行控件不使用水平滚动条。
                           ④、如果以下情况同时发生,多行控件可以显示水平滚动条:
                               编辑区包含长度超过编辑区宽度的文字;
                               控件已启用了水平滚动条;
                               控件有足够的空间在编辑区下方包含滚动条;
                               WordWrap 属性设置为 False。
        25、ScrollHeight:滚动高度。设置或获取该属性值,该属性标识UserForm对象滚动条查看的总区域的高度,以磅为单位。
            Me.ScrollHeight = 0 '值为0(默认值),不设置总区域的高度
            Me.ScrollHeight = 1000 '设置总区域的高度为1000
            注意:当UserForm里控件过多默认情况没法全部安放,可以先放大UserForm,全部安放后再缩小。设置ScrollBars、ScrollHeight等属性滚动窗口。
        26、ScrollWidth:滚动宽度。设置或获取该属性值,该属性标识UserForm对象滚动条查看的总区域的宽度,以磅为单位。
            Me.ScrollWidth = 0 '值为0(默认值),不设置总区域的宽度
            Me.ScrollWidth = 900 '设置总区域的宽度为900
            注意:当UserForm里控件过多默认情况没法全部安放,可以先放大UserForm,全部安放后再缩小。设置ScrollBars、ScrollWidth等属性滚动窗口。
        27、ScrollLeft:右卷。设置或获取该属性值,该属性标识UserForm对象从逻辑窗体左边缘到可见窗体左边缘的距离(水平滚动条的滑块向右滑动),以磅为单位。
            Me.ScrollLeft = 0 '值为0(默认值),不设置滑动
            Me.ScrollLeft = 30 '水平滚动条的滑块向右滑动30
            Me.ScrollLeft = Me.Label1.Left '水平滚动条的滑块向右滑动,窗体左边缘与标签左边缘对齐
            注意:(1)、最小值取值为零;最大取值是窗体ScrollWidth属性值与Width属性值之间的差值;
                       (2)、最大值受控件CommandButton影响,当CommandButton控件Left值小于最大值时,ScrollLeft最大值为CommandButton控件Left值;
                       (3)、如果未设定ScrollWidth值,则ScrollLeft属性无效;
                       (4)、设置ScrollLeft属性相当于水平滚动条的滑块向右滑动;
                       (5)、逻辑窗体指整个窗体,包含可见部分和ScrollHeight、ScrollWidth属性指定的不可见部分。
        28、ScrollTop:下卷。设置或获取该属性值,该属性标识UserForm对象从逻辑窗体上边缘到可见窗体上边缘的距离(垂直滚动条的滑块向下滑动),以磅为单位。
            Me.ScrollTop = 0 '值为0(默认值),不设置滑动
            Me.ScrollTop = 30 '垂直滚动条的滑块向下滑动30
            Me.ScrollTop = Me.Label1.Top '垂直滚动条的滑块向下滑动,窗体上边缘与标签上边缘对齐
            注意:(1)、最小值取值为零;最大取值是窗体ScrollHeight属性值与Height属性值之间的差值;
                       (2)、最大值受控件CommandButton影响,当CommandButton控件Top值小于最大值时,ScrollTop最大值为CommandButton控件Top值;
                       (3)、如果未设定ScrollHeight值,则ScrollTop属性无效;
                       (4)、设置ScrollTop属性相当于垂直滚动条的滑块向下滑动;
                       (5)、逻辑窗体指整个窗体,包含可见部分和ScrollHeight、ScrollWidth属性指定的不可见部分。
        29、ShowModal:显示模式。将UserForm对象的显示设置为模式或非模式,运行时只读。调试时此属常在窗体属性窗口设置。
            ShowModal属性的设置如下:
                False        UserForm是非模式的
                True        (默认)UserForm是模式的
            注意:(1)、如果UserForm是模式的,用户在使用应用程序的任何其他部分之前必须提供信息或关闭UserForm。在隐藏或卸载UserForm之前将不执行任何
                  后续代码。 尽管在显示UserForm时禁用了该应用程序中的其他窗体,但对其他应用程序不会这样。一句话理解就是窗体永久置顶;
                       (2)、如果UserForm是非模式的,用户可查看其他窗体或窗口而不用关闭UserForm。无模式窗体不会显示在任务栏中,也不显示在窗口选项卡顺序中;
                       (3)、Office 97将忽略ShowModal属性并以模式化方式显示 UserForm。
                       (4)、可用Show方法在显示UserForm时设置ShowModal属性(如:UserForm1.Show 0),具体参照Show方法。
        30、SpecialEffect:特殊效果。设置或获取该属性值,该属性标识UserForm对象的外观。
            Me.SpecialEffect = fmSpecialEffectFlat '值为0(默认值),对象平面显示,通过边框和(或)颜色的变化来与周围的窗体相区别
            Me.SpecialEffect = fmSpecialEffectRaised '值为1,对象的左边和顶边加亮显示,右边和底边带有阴影
            Me.SpecialEffect = fmSpecialEffectSunken '值为2,对象的顶边和左边带阴影,底边和右边加亮显示。 控件及其边框似乎将嵌入其所在的表单
            Me.SpecialEffect = fmSpecialEffectEtched '值为3,控件边缘呈凹入状态
            Me.SpecialEffect = fmSpecialEffectBump '值为6,对象的底边和右边凸起,顶边和左边平坦
            注意:(1)、使用SpecialEffect或BorderStyle属性可以指定控件的边缘,但不能同时指定两者。如果为这些属性中的某个属性指定一个非零值,则系统会将其
                  他属性的值设置为零。 例如,如果您将SpecialEffect设置为fmSpecialEffectRaised,则系统会将BorderStyle设置为零(fmBorderStyleNone);
                       (2)、如果SpecialEffect为fmSpecialEffectFlat,则当BorderStyle为fmBorderStyleSingle时,由BorderColor属性指定边框颜色。
        31、Tag:标签。设置或获取该属性值,该属性标识UserForm对象存储程序所需的附加数据。
            Me.Tag = "文本框的帮助文本"
            注意:(1)、可输入最多包含2048个字符的字符串表达式。 默认设置为零长度字符串(" ");
                       (2)、可使用对象的属性表、宏或 Visual Basic for Applications (VBA) 代码设置此属性;
                       (3)、与其他属性不同,Tag属性设置不会影响对象的其他属性;
                       (4)、可使用此属性将标识字符串分配给对象,而不会影响任何其他属性设置或产生其他副作用。 需要检查作为变量传递给某过程的窗体、报表、
                  数据访问页、节或控件的标识时,Tag属性很有用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-17 09:21 | 显示全部楼层
        32、WhatsThisButton:这个按钮是什么。设置或获取该属性值,该属性标识UserForm对象标题栏上是否显示"此内容"按钮。 在运行时为只读。
            WhatsThisButton属性的设置如下:
                False        (默认)关闭What's This Help按钮的显示
                True        打开What's This Help按钮的显示
            注意:(1)、此属性不适用于Macintosh;
                       (2)、为了使WhatsThisButton属性为True,WhatsThisHelp属性必须为True;
                       (2)、此属性在UserForm属性窗口设置,Visual Basic for Applications (VBA) 代码设置会报错。
        33、WhatsThisHelp:此帮助是什么。设置或获取该属性值,该属性标识UserForm对象标题栏上是否使用了Windows 95帮助或主帮助窗口提供的弹出窗口。
            WhatsThisHelp属性的设置如下:
                False        (默认情况下)应用程序使用 F1 键启动了 Windows 帮助,并加载了“HelpContextID”属性标识的主题
                True        应用程序使用了其中一个 What's This 访问技术启动了 Windows 帮助,并加载了WhatsThisHelpID属性标识的主题
        34、Zoom:缩放。设置或获取该属性值,该属性标识UserForm对象更改大小。
            Me.Zoom = 200 'UserForm放大2倍(默认值100)
            注意:(1)、Zoom属性的值指定放大或缩小图像以相应更改显示图像的百分比;
                       (2)、有效值为10到400。指定的值是对象原始尺寸的百分比;因此,设置为400表示想将图像放大到其原始尺寸的4倍(或 400%),而设置为1 则表
                  示想将图像缩小为其原始尺寸的十分之一(或10%)。
        35、ActiveControl:活动控件。获取该属性值,该属性标识UserForm对象上活动(有焦点)的控件。
            Debug.Print Me.ActiveControl.Name '输出当前控件名
            注意:(1)、ActiveControl属性是只读的,当您通过在界面中选择控件时会改变该属性值。 因此该属性常用在鼠标或键盘等相关事件,而不用在初始化事件;
                       (2)、通过在界面中选择控件设置属性或调用方法时,使用ActiveControl替代控件名称。因此该属性可使用被替代控件的相关属性,如文本框可使用
            Debug.Print Me.ActiveControl.Text输出文本框的文本,列表框可以使用Debug.Print Me.ActiveControl.ListCount输出列表框的总行数;
                       (3)、虽然ActiveControl属性能替代所有控件,但不能使用被其替代控件不具有的属性,否则会报错,如对按钮使用Me.ActiveControl.Text。
        36、CanPaste:可以粘贴。识别UserForm对象上控件能否可以接收从剪贴板粘贴的信息。
            Debug.Print Me.ActiveControl.CanPaste '输出当前控件能否可以粘贴剪贴板的信息
            CanPaste属性返回值为:
                False        鼠标指针下方的对象无法接收从剪贴板粘贴的信息
                True        鼠标指针下方的对象可接收从剪贴板粘贴的信息(默认)
            注意:(1)、CanPaste是只读的。如果剪贴板数据采用的是当前目标对象不支持的格式,则CanPaste属性为False。 例如,如果试图将位图粘贴到只支持文本
                  的对象中, CanPaste将为False。
        37、CanRedo:可以重做。识别UserForm对象控件能否还原最近的撤消操作。
            Debug.Print Me.CanRedo '输出当前控件能否执行还原最近的撤销操作
            CanRedo属性返回值为:
                False        最近的撤消操作是不可逆的
                True        可还原最近的撤消操作
            注意:(1)、CanRedo是只读的。恢复某个操作意味着还原一个撤消操作;并不一定意味着重复用户的上一次操作;
                       (2)、以下用户操作演示如何使用“撤消”和“恢复”:
                           ①、更改某选项按钮的设置;
                           ②、将文本输入到文本框;
                           ③、单击“ 撤消”。 文本将从该文本框中消失;
                           ④、单击“ 撤消”。 选项按钮还原到其之前的设置;
                           ⑤、单击“ 重做”。 选项按钮的值会发生更改;
                           ⑥、单击“ 重做”。 文本将重新显示在该文本框中。
        38、CanUndo:可以撤销。识别UserForm对象控件能否撤消最后一个用户操作。
            Debug.Print Me.CanUndo '输出当前对象控件能否撤消最后一个用户操作
            CanUndo 属性返回值为:
                False        无法撤消最近的用户操作
                True        可以撤消最近的用户操作
            注意:(1)、CanUndo 是只读的。可使用“撤消”命令撤消许多用户操作。CanUndo属性指示是否可撤消最近的操作;
                       (2)、CanUndo属性指示可撤消的最近操作,可以用Ctrl+Z快捷键撤销最近的操作。
        39、Controls:控件。返回UserForm对象上控件集合。
            Debug.Print Me.Controls.Count '输出当前对象的控件数量
            注意:Controls是一个集合属性,可以使用Add、Clear、Move、Remove、SendToBack、SendBackward等方法和Count属性。
            示例
                (1)、以下示例在当前UserForm对象依次添加并设置标签、按钮、文本框控件。ADD方法第一个参数为控件类型,第一个参数为控件名称。
        Set Lbl = Me.Controls.Add("Forms.Label.1", "Label2") '添加标签控件
        With Lbl
            .Caption = "标签"
            .Top = 5
            .Left = 5
        End With
        Set Cmd = Me.Controls.Add("Forms.CommandButton.1", "CommandButton2") '添加按钮控件
        With Cmd
            .Caption = "命令按钮"
            .Top = 5
            .Left = Lbl.Width + Lbl.Left + 5
        End With
        Set Tbx = Me.Controls.Add("Forms.TextBox.1", "TextBox2") '添加文本框控件
        With Tbx
            .Text = "123"
            .Top = 5
            .Left = Cmd.Width + Cmd.Left + 5
            .Font.Size = 14
        End With
                (2)、以下示例依次输出当前UserForm对象的控件名称(遍历控件)。
        For Each mycon In Me.Controls
            Debug.Print mycon.Name
        Next
        40、InsideHeight:内高。返回UserForm对象中客户区域(窗体可见部分除标题外)的高度,以磅为单位。
            Debug.Print Me.InsideHeight  '输出对象内高
        41、InsideWidth:内宽。返回UserForm对象中客户区域(窗体可见部分除标题外)的宽度,以磅为单位。
            Debug.Print Me.InsideWidth  '输出对象内宽
        42、Name:名称。设置或获取该属性值,该属性标识UserForm对象的名称(属性窗口第一条属性)。
            Debug.Print Me.Name  '输出对象名称,如UserForm1
            注意:(1)、在设计时添加控件,则无法在运行时修改其Name属性(在属性窗口可修改)。 在设计时添加到表单的每个控件均必须具有一个唯一名称;
                       (2)、在运行时可用Add方法添加对象并设置(第二个参数)Name属性。
        43、VerticalScrollbarSide:垂直滚动条侧。设置或获取该属性值,该属性标识UserForm对象在右侧还是左侧显示垂直滚动条。
            Me.VerticalScrollbarSide = fmVerticalScrollbarSideRight '值为0(默认值),将滚动条放在右侧
            Me.VerticalScrollbarSide = fmVerticalScrollBarSideLeft '值为1,将滚动条放在左侧
            注意:如果将UserForm对象用于从右到左读取的环境, 则VerticalScrollBarSide属性特别有用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-17 09:21 | 显示全部楼层
    三、常用方法(语句)
        1、Copy:拷贝。将对象的内容复制到剪贴板中。
            语法:object. Copy  object为有效对象
            示例:Me.TextBox1.Copy '将文本框中选定的文本复制到剪切板
                      Me.Copy '将UserForm对象上活动的控件复制到剪切板
            注意:(1)、Copy是一种通用的方法,复制的实际内容取决于对象。 例如,在Page上,Copy方法将复制当前选定的一个或多个控件。 在TextBox或
                  ComboBox上,它将复制当前所选文本,如Me.TextBox1.Copy;
                       (2)、对窗体、Frame或Page使用Copy可复制当前处于活动状态的控件。如Me.Copy。
        2、Cut:剪切。将UserForm对象的内容剪切到剪贴板中。
            语法:object. Cut  object为有效对象
            示例:Me.TextBox1.Cut '将文本框中选定的文本剪切到剪切板
                      Me.Cut '将UserForm对象上活动的控件剪切到剪切板,此方法仅删除在运行时创建的控件
            注意:(1)、Cut是一种通用的方法,剪切的实际内容取决于对象。 例如,在Page上,Cut方法将剪切当前选定的一个或多个控件。 在TextBox或
                  ComboBox上,它将剪切当前所选文本,如Me.TextBox1.Cut;
                       (2)、对窗体、Frame或Page使用Cut可剪切当前处于活动状态的控件。如Me.Cut,此方法仅删除在运行时创建的控件。
        3、Paste:粘贴。将剪贴板的内容传输给对象。
            语法:object. Paste  object为有效对象
            示例:Me.TextBox1.Cut
                      Me.TextBox2.Paste '这两句代码为把TextBox1所选文本剪切到TextBox2
            注意:粘贴到ComboBox或TextBox中的数据被视为文本。在将Paste方法用于窗体时,可以将任何对象粘贴到窗体上。
        4、Show:显示。显示UserForm对象。
            语法:object.Show modal  object表示UserForm对象
            参数:modal取值如下:
                常量                值        描述
                vbModal                1        (默认)UserForm是模式的
                vbModeless        0        UserForm是非模式的
            示例:UserForm1.Show 0 '显示用户窗体UserForm1,非模式,即窗体不永久置顶
            注意:(1)、在 MicrosoftOffice 97中,如果UserForm设置为以无模式方式显示,则会导致运行时错误;Office 97 UserForms始终是有模式的;
                       (2)、当 UserForm 为无模式时,后续代码将在遇到时执行。 无模式窗体不会显示在任务栏中,也不显示在窗口选项卡顺序中;
                       (3)、如果您对导致其重新编译的UserForm项目进行更改(如删除代码模块),则可能会丢失与无模式的UserForm关联的数据。
                       (4)、当UserForm是模式窗体时,用户必须先进行响应,然后才能使用该应用程序的其他任何部分。 直到隐藏或卸载UserForm之后才会执行后续代
                  码。 尽管在UserForm显示时会禁用该应用程序中的其他窗体,但是其他应用程序不会这样。
        5、Hide:隐藏。隐藏UserForm对象,但并不将其卸载掉。
            语法:object.Hide  object表示UserForm对象
            示例:UserForm1.Hide '隐藏用户窗体UserForm1
            注意:(1)、当对象被隐藏时,将从屏幕上移除该对象,其Visible属性将设置为False。用户无法访问被隐藏的对象的控件,但它们能以编程方式供运行的应
                  用程序、可能通过Automation与该应用程序通信的其他进程以及Windows中的Timer控制事件使用;
                       (2)、在UserForm隐藏后,用户无法与该应用程序进行交互,直到导致隐藏UserForm的事件过程中的所有代码均已执行完为止;
                       (3)、如果在调用Hide方法时UserForm未加载,则Hide方法会加载UserForm但不会显示它。
        6、Load(加载)、Unload(卸载)。在微软的官网上这两条并不是对象的方法,而是语句。用以把对象加载到内存或从内存删除。
            语法:Load object    object表示UserForm对象
                      Unload object    object表示UserForm对象
            示例:Load UserForm1 '加载用户窗体
                      Unload UserForm1 '卸载用户窗体,也可写成Unload Me
            注意:(1)、在加载一个对象时,会将该对象置于内存中,但该对象不可见。 使用Show方法使对象可见。 在对象可见之前,用户无法与其交互。 可以在对
                  象的Initialize事件过程中以编程方式操作对象;
                       (2)、卸载某个对象时,将从内存中删除该对象,并且将回收与该对象关联的所有内存。 在使用Load语句再次将其置于内存中之前,用户无法与对象
                  交互,并且无法以编程方式操作对象。
        7、Move:移动。移动UserForm对象。
            语法:object. Move( [ Left [, Top [, Width [, Height]]]] )  object表示UserForm对象
            参数:Left        必需        Variant型            对象左边缘相对于Microsoft Excel窗口左边缘的屏幕位置(以twips为单位,1缇等于1/1440英寸或1/567厘米)
                      Top        可选        Variant型            对象上边缘相对于Microsoft Excel窗口上边缘的屏幕位置(以twips为单位,1缇等于1/1440英寸或1/567厘米)
                      Width    可选        Variant型            对象的所需宽度(以twips为单位,1缇等于1/1440英寸或1/567厘米)
                      Height   可选        Variant型    对象的所需高度(以twips为单位,1缇等于1/1440英寸或1/567厘米)
            示例:Me.Move 200, 100, Me.Width, Me.Height '对象移动至左边缘距200缇,上边缘距100缇,宽高不变
                      Me.Move (200) '对象移动至左边缘距200缇
            注意:(1)、只有Left参数是必需的。 不过若要指定其他参数,则必须指定该参数之前的所有参数。 例如,如果不指定Left和Top,则不能指定Width。所有
                  未指定的尾部参数都保持不变;
                       (2)、仅指定Left参数是需要书写括号的,而指定多个参数则不需要;
                       (3)、此方法重写属性。如果窗体是模式窗体,则仍相对于Excel窗口定位,但Left和Top的值可以为负值。
        8、PrintForm:打印形状。将UserForm对象的逐位图像发送到打印机。
            语法:object.PrintForm  object表示UserForm对象
            示例:Me.PrintForm
            注意:(1)、PrintForm方法打印UserForm对象所有可见的对象和位图,不包括标题。PrintForm还打印附加到UserForm对象的图形;
                       (2)、PrintForm方法使用的打印机由操作系统的“控制面板”设置确定。
        9、UndoAction:撤销操作。取消支持撤消命令的最近一次操作。
            语法:object. UndoAction  object表示UserForm对象
            示例:Me.UndoAction '在文本框中编辑后,用此代码撤销最近的一次操作,快捷键Ctrl+Z,注意代码不需要包含文本控件名
            注意:(1)、用户界面中的"撤消"命令使用UndoAction方法。 例如,如果将文本粘贴到TextBox中,则可以使用UndoAction删除该文本并还原TextBox
                  的先前内容。并非所有用户操作都是可以撤消的。 如果某个操作是无法撤消的,则"撤消"命令在执行该操作后不可用;
                       (2)、如果CanUndo属性为False,则"撤消"命令在用户界面中不可用,并且UndoAction在代码中无效;
                       (3)、如果将UndoAction应用于窗体,则对当前记录所做的所有更改将丢失。 如果将UndoAction应用于控件,则仅影响控件本身;
                       (4)、在更新窗体或控件之前,您必须先应用此方法。 您可能需要在窗体的BeforeUpdate事件或控件的Change事件中包含此方法;
                       (5)、UndoAction是使用SendKeys语句在事件过程中发送Esc值的替代方法。
        10、RedoAction:重做(反撤销)操作。取消最近的“撤消”操作的操作。
            语法:object. RedoAction  object表示UserForm对象
            示例:Me.RedoAction '在文本框中编辑后,用Ctrl+Z撤销操作,再用此代码反撤销,注意代码不需要包含文本控件名
            注意:(1)、"重做"命令可以取消最后的"撤消"操作(不一定是最后所做的操作)。并非所有的操作都可以撤消。 例如,将文本粘贴到TextBox,然后选择
                  "撤消"命令以删除文本后,可以选择"重做"命令将文本放回;
                       (2)、如果CanRedo属性为False,则"重做"命令在用户界面中不可用,且RedoAction方法在代码中无效;
                       (3)、如果命令执行成功,RedoAction将返回True。
        11、Repaint:重新绘制。通过重新绘制窗体更新显示。
            语法:object. Repaint  object表示UserForm对象
            示例:Me.Repaint
            注意:Repaint方法在对象的内容或外观发生重大更改时很有用,并且您无需等到系统自动重新绘制此区域。
        12、Scroll:滚动。移动UserForm对象上的滚动条。
            语法:object. Scroll [ ActionX [, ActionY ]]  object表示UserForm对象
            参数:ActionX    可选    标识在水平方向执行的操作
                      ActionY     可选    标识在垂直方向执行的操作
              ActionX 和 ActionY 的设置为:
                常量                        值        Description
                fmScrollActionNoChange        0        不要朝指定方向滚动
        fmScrollActionLineUp        1        向上移动垂直滚动条或向左移动水平滚动条。 移动等同于按键盘上的向上键或向左键来移动滚动条
        fmScrollActionLineDown        2        向下移动垂直滚动条或向右移动水平滚动条。 移动等同于按键盘上的向右键或向下键来移动滚动条
        fmScrollActionPageUp        3        在垂直滚动条上向上移动一页,或在水平滚动条上向左移动一页。 移动等同于按键盘上的Page Up键来
                                                                                    移动滚动条
        fmScrollActionPageDown        4        在垂直滚动条上向下移动一页,或在水平滚动条上向右移动一页。 移动等同于按键盘上的Page Down键
                                                                                    来移动滚动条
        fmScrollActionBegin        5        移至垂直滚动条的顶部或移至水平滚动条的左端
        fmScrollActionEnd                6        移至垂直滚动条的底部或移至水平滚动条的右端
            示例:Me.Scroll 2 '水平滚动条向右滚动一次
            注意:Scroll方法应用在大于其显示区域的窗体或Page上显示的滚动条。 此方法不适用于独立ScrollBar或TextBox上显示的滚动条。
        13、SetDefaultTabOrder:设置默认选项卡顺序。使用默认的"从上到下"和"从左到右"选项卡顺序,设置窗体上的每个控件的"TabIndex"属性。
            语法:object. SetDefaultTabOrder  object表示UserForm对象
            示例:Me.SetDefaultTabOrder
            注意:Microsoft Forms从窗体的左上角的控件开始设置选项卡顺序,然后移动到右边。 在选项卡顺序中,它首先分配离窗体左边缘最近控件的顺序值,
                  如果多个控件与窗体左边缘的距离相同,则会从上到下分配选项卡顺序值。
        14、WhatsThisMode:此模式是什么。使鼠标指针更改为What's This指针,并准备应用程序显示选定对象的帮助。
            语法:object. WhatsThisMode  object表示UserForm对象
            示例:Me.WhatsThisMode
            注意:(1)、Macintosh上存在此方法,但没有指针功能;
                       (2)、执行WhatsThisMode方法可将应用程序置于与在单击标题栏上的"这是什么"按钮的相同状态。 鼠标指针将变为这是什么指针。 当用户单击
                  对象时,已单击对象的WhatsThisHelpID属性用于调用上下文相关的帮助。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-17 09:24 | 显示全部楼层
    四、常用事件
        1、Activate:激活。当UserForm对象接收焦点并变为活动窗口时触发。
            语法:Private Sub object_Activate()
            参数:object    必填    代表UserForm对象
            示例:当窗体接收焦点并变为活动窗口时,遍历控件输出控件名称
        Private Sub UserForm_Activate()
            For Each mycon In Me.Controls
                Debug.Print mycon.Name
            Next
        End Sub
            注意:可以通过打开窗体、选择窗体,使窗体处于活动状态。在Excel中UserForm对象不支持SetFocus方法获得焦点。
        2、AddControl:添加控件。当控件插入到UserForm对象时触发。
            语法:Private Sub object_AddControl(ByVal Control As MSForms.Control)
            参数:object    必填    代表UserForm对象
                       Control  必填   代表添加的控件
            示例:运行下面的代码在窗体插入一个按钮控件
        Set Cmd = Me.Controls.Add("Forms.CommandButton.1", "CommandButton2") '添加按钮控件
        With Cmd
                .Caption = "命令按钮"
                .Top = 5
                .Left = 5
        End With
        此时触发AddControl事件,在该事件中,可用参数Control代表插入的控件,并使用该控件的属性、方法
        Private Sub UserForm_AddControl(ByVal Control As MSForms.Control)
            Debug.Print Control.Name
        End Sub
        以上代码输出Add方法插入控件时定义的控件名称CommandButton2(Add方法第二个参数)
            注意:在运行时添加控件将触发AddControl事件。在设计时添加控件不会触发此事件,并且在最初加载并显示窗体时也不会触发此事件。
        3、BeforeDragOver:在拖动之前。正在执行拖放操作时触发。
            语法:
        Private Sub object_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, _
                                ByVal Control As MSForms.Control, _
                                ByVal Data As MSForms.DataObject, _
                                ByVal X As Single, ByVal Y As Single, _
                                ByVal State As MSForms.fmDragState, _
                                ByVal Effect As MSForms.ReturnEffect, _
                                ByVal Shift As Integer)
            参数:object    必填    代表UserForm对象
               Cancel   必填        事件状态。 False 指示应由控件处理事件(默认)。 True 指示由应用程序处理事件
                       Control  必填    拖动的控件
                       Data             必填    在拖放操作中拖动的数据。 数据打包在DataObject中
                       X, Y        必填    控件位置的水平和垂直坐标。 两个坐标都用磅来测量。 X 从控件的左边缘测量;Y 从控件的上边缘测量
                       State     必填    被拖动数据的切换状态
               Effect    必填        拖放源支持的操作
               Shift      必填        指定 Shift、Ctrl 和 Alt 的状态
        State 的设置是:
                常量                        值        描述
            fmDragStateEnter                0        鼠标指针在目标的范围内
            fmDragStateLeave                1        鼠标指针在目标的范围外
            fmDragStateOver                2        鼠标指针在新位置,但仍保留在同一目标的范围内
        Effect 的设置是:
                常量                        值        描述
            fmDropEffectNone                0        不将拖放源复制或移动到拖放目标
            fmDropEffectCopy                1        将放置源复制到放置目标
            fmDropEffectMove                2        将放置源移动到放置目标
            fmDropEffectCopyOrMove        3        将拖放源复制或移动到拖放目标
        Shift 的设置为:
                常量                        值        描述
                                            0        Alt、Shift 和 Ctrl三键无任何键按下
            fmShiftMask                        1        已按下 Shift 键
            fmCtrlMask                        2        已按下 Ctrl 键
                                            3        已按下 Ctrl 和 Shift 键
            fmAltMask                        4        已按下 Alt 键
                                            5        已按下 Alt  和 Shift 键
                                            6        已按下 Alt 和 Ctrl 键
                                        7        已按下 Alt、Shift 和 Ctrl 键
            注意:(1)、使用此事件可在鼠标指针进入、离开或直接停留在有效目标上时进行监视。 当拖放操作正在进行时,系统会在用户移动鼠标、按下或释放鼠标
                  的一个或多个按键时启动此事件。 鼠标指针位置确定接收此事件的目标对象。 通过检查State参数可以确定鼠标指针的状态;
                       (2)、当事件处理此事件时,可以使用Effect参数标识要执行的拖放操作;
                           ①、当 Effect 设置为0时,放置源支持取消操作;
                           ②、当 Effect 设置为1时,拖放源支持复制或取消 (fmDropEffectNone) 操作;
                           ③、当 Effect 设置为2时,拖放源支持复制 (fmDropEffectCopy)、移动 (fmDropEffectMove) 或取消 (fmDropEffectNone) 操作;
                           ④、当 Effect 设置为3时,拖放源支持移动或取消 (fmDropEffectNone) 操作。
                       (3)、大多数控件不支持拖放,而Cancel为False,这是默认设置。这意味着控件拒绝尝试拖放控件上的任何内容,并且控件不会启动BeforeDropOrPaste
                  事件。TextBox和ComboBox控件是例外:即使Cancel为False,这些控件也支持拖放操作。
        4、BeforeDropOrPaste:拖放或粘贴之前。在用户刚要将数据拖放或粘贴到对象上时触发。
            语法:
        Private Sub UserForm_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean, _
                                ByVal Control As MSForms.Control, _
                                ByVal Action As MSForms.fmAction, _
                                ByVal Data As MSForms.DataObject, _
                                ByVal X As Single, ByVal Y As Single, _
                                ByVal Effect As MSForms.ReturnEffect, _
                                ByVal Shift As Integer)
            参数:object    必填    代表UserForm对象
               Cancel   必填        事件状态。 False 指示应由控件处理事件(默认)。 True 指示由应用程序处理事件
                       Control  必填   目标控件
                       Action    必填   基于当前键盘设置指示未决拖放操作的结果
                       Data              必填   在拖放操作中拖动的数据。 数据打包在DataObject 中
                       X, Y              必填   出现拖放时鼠标指针的水平和垂直位置。 两个坐标均用磅衡量。 X 从控件的左侧边缘开始测量;Y 从控件的顶部开始测量
                       Effect      必填  目标控件上的拖放操作的效果
                       Shift               必填  指定 Shift、Ctrl 和 Alt 的状态
        Action 的设置是:
                常量                值        描述
            fmActionPaste                2        将所选对象粘贴到拖放目标中。
            fmActionDragDrop        3        指示用户已将对象从其源拖动到拖放目标,并在拖放目标上拖放。
        Effect 的设置是:
                常量                        值        描述
            fmDropEffectNone                0        不将拖放源复制或移动到拖放目标
            fmDropEffectCopy                1        将放置源复制到放置目标
            fmDropEffectMove                2        将放置源移动到放置目标
            fmDropEffectCopyOrMove        3        将拖放源复制或移动到拖放目标
        Shift 的设置为:
                常量                        值        描述
                                            0        Alt、Shift 和 Ctrl三键无任何键按下
            fmShiftMask                        1        已按下 Shift 键
            fmCtrlMask                        2        已按下 Ctrl 键
                                            3        已按下 Ctrl 和 Shift 键
            fmAltMask                        4        已按下 Alt 键
                                            5        已按下 Alt  和 Shift 键
                                            6        已按下 Alt 和 Ctrl 键
                                        7        已按下 Alt、Shift 和 Ctrl 键
        5、Click:单击。用户使用鼠标单击UserForm对象除控件外的空白区域触发。
            语法:Private Sub object_Click()
            参数:object    必填    代表UserForm对象
            示例:单击窗体空白区域,输出鼠标指针坐标
        Private Sub UserForm_Click()
            Debug.Print Me.Tag '单击时触发Click事件,通过Tag属性获得鼠标指针坐标,此时可用Split函数分割出X、Y值
        End Sub
        Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
            Me.Tag = X & "/" & Y '鼠标移动触发MouseMove事件,把鼠标指针坐标传递给Tag属性
        End Sub
            注意:(1)、鼠标左键单击窗体的空白区域或窗体上的已禁用控件触发Click事件,右键、滚轮键均不触发;
                       (2)、Click事件本身不包含鼠标指针坐标的参数,我们可用MouseMove事件和Tag属性得到单击时的鼠标指针坐标(如示例)。
        6、DblClick:双击。用户使用鼠标双击UserForm对象除控件外的空白区域触发。
            语法:Private Sub object_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
            参数:object    必填    代表UserForm对象
                      Cancel    必填    事件状态。False指示应由控件处理事件(默认),True指示由应用程序处理事件
            示例:参照Click事件
            注意:(1)、鼠标左键双击窗体的空白区域或窗体上的已禁用控件触发DblClick事件,右键、滚轮键均不触发;
                       (2)、DblClick事件本身不包含鼠标指针坐标的参数,我们可用MouseMove事件和Tag属性得到双击时的鼠标指针坐标(参照单击示例);
                       (3)、DblClick事件有可能同时触发MouseDown、MouseUp、Click事件,所以同时使用其中几个事件时必须谨慎。
        7、Deactivate:非活动。当UserForm对象失去焦点并变为非活动窗口时触发。
            语法:Private Sub object_Deactivate()
            参数:object    必填    代表UserForm对象
            示例:当窗体1切换到到窗体2时,通过Tag属性传递窗体1中文本框的内容
                窗体1代码
        Private Sub UserForm_Deactivate()
            Me.Tag = Me.TextBox1.Text '窗体1失去焦点时把文本框的值传递给窗体1的Tag属性
        End Sub
                窗体2代码
        Private Sub UserForm_Activate()
            Debug.Print UserForm1.Tag '窗体2得到焦点时输出窗体1文本框的值
        End Sub
                以上代码只是演示两个窗体切换时,通过Deactivate事件、Activate事件和Tag属性传递数据。窗体2要获取窗体1文本框的数据可直接写成
            Debug.Print UserForm1.TextBox1.Text '窗体2输出窗体1文本框的值
            注意:(1)、Deactivate事件在和别的UserForm对象切换时触发,在非模式状态下切换到Excel工作表不会触发此事件。
                       (2)、Deactivate事件发生在获得焦点UserForm对象的Activate事件之前。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-17 09:24 | 显示全部楼层
        8、Error:错误。在UserForm对象检测到错误且无法将该错误信息返回到调用程序时触发。
            语法:
        Private Sub object_Error(ByVal Number As Integer, _
                            ByVal Description As MSForms.ReturnString, _
                            ByVal SCode As Long, _
                            ByVal Source As String, _
                            ByVal HelpFile As String, _
                            ByVal HelpContext As Long, _
                            ByVal CancelDisplay As MSForms.ReturnBoolean)
            参数:object               必填    代表UserForm对象
                       Number           必填    指定UserForm对象用于标识该错误的唯一值
                       Description        必填    该错误的文字描述
                       SCode        必填    指定该错误的OLE状态代码。 低顺序16比特指定与Number参数完全相同的值
                       Source        必填    标识启动事件的控件的字符串
                       HelpFile        必填    指定描述该错误的帮助文件的完全限定路径名
                       HelpContext        必填    指定包含该错误描述的帮助文件主题的上下文ID
                       CancelDisplay        必填    指定是否在消息框中显示该错误字符串
            注意:(1)、为Error事件编写的代码确定了UserForm对象如何响应错误情况;
                       (2)、处理错误情况的能力因应用程序而异。 当发生了错误而应用程序不具备处理该错误的能力时,会启动Error事件。
        9、Initialize:初始化。在加载UserForm对象后、但在其显示之前触发。
            语法:Private Sub object_Initialize()
            参数:object       必填    代表UserForm对象
            示例:窗体初始化时文本框控件赋值123
        Private Sub UserForm_Initialize()
            Me.TextBox1.Text = 123
        End Sub
            注意:Initialize事件通常用于UserForm对象或控件设置形状、属性、加载初始数据等。
        10、KeyDown:按下键。当UserForm对象有焦点且键盘有键按下时触发。
            语法:Private Sub object_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
            参数:object        必填    代表UserForm对象
                      KeyCode    必填    按下键的键代码,该参数不能返回三键组合按键值,会先返回三键编码,再返回其它按键编码
              Shift           必填    Shift、Ctrl 和 Alt 键的状态(三键)
        Shift 的设置为:
                常量                        值        描述
                                            0        Alt、Shift 和 Ctrl三键无任何键按下
            fmShiftMask                        1        已按下 Shift 键
            fmCtrlMask                        2        已按下 Ctrl 键
                                            3        已按下 Ctrl 和 Shift 键
            fmAltMask                        4        已按下 Alt 键
                                            5        已按下 Alt  和 Shift 键
                                            6        已按下 Alt 和 Ctrl 键
                                        7        已按下 Alt、Shift 和 Ctrl 键
            示例:按下按键时,输出三键状态和按键值
        Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
            Debug.Print Shift
            Debug.Print KeyCode
        End Sub
            注意:(1)、当用户对正在运行的窗体按键时,如果该窗体或其上的控件具有焦点,则将发生KeyDown事件。KeyDown和KeyPress事件反复交替,直至
                  用户释放键为止,此时将发生KeyUp事件。包含焦点的窗体或控件会收到所有键击。窗体只能在其没有控件或其可见控件已被禁用的情况下具有焦点;
                       (2)、如果在宏中使用SendKeys操作或Visual Basic中的SendKeys语句向窗体或控件发送击键,也会发生这些事件;
                       (3)、KeyDown和KeyUp事件通常用于识别或区分:
                           ①、扩展字符键(如功能键);
                           ②、导航键,例如 Home、End、PageUp、 PageDown、向上键、向下键、向右键、向左键和 Tab;
                           ③、组合键和标准键盘修饰符(Shift、Ctrl 或 Alt);
                           ④、数字键盘和键盘数字键。
                       (4)、在以下情况下,KeyDown和KeyUp事件不会发生:
                           ①、用户在窗体上按Enter,其命令按钮的Default属性设置为True;
                           ②、用户在窗体上按Esc,其"取消"属性设置为True的命令按钮;
                           ③、当您按或发送ANSI键时,将发生KeyDown和KeyPress 事件。KeyUp事件在通过按或发送此键导致的控件的任何事件之后发生。 如果键击
                  导致焦点从一个控件移动到另一个控件,则对于第一个控件,将发生 KeyDown事件,而对于第二个控件,将发生KeyPress和KeyUp事件。
                       (5)、与键盘相关的事件的顺序为:KeyDown、KeyPress、KeyUp。
        11、KeyPress:按键。当UserForm对象有焦点且当用户按某个ANSI键时触发。
            语法:Private Sub object__KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
            参数:object        必填    代表UserForm对象
                      KeyAscii     必填    按键的Ascii编码值,该参数能返回和Shift键组合按键值。
            示例:输出按键Ascii编码值和对应的字符
        Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
            Debug.Print KeyAscii
            Debug.Print Chr(KeyAscii)
        End Sub
            注意:(1)、KeyPress事件在用户按在运行的窗体上产生可键入的字符(ANSI 键)的键时发生,而该窗体或该窗体上的控件具有焦点。 该事件可在释放键之
                  前发生,也可在释放键之后发生。 如果在宏中使用SendKeys操作或Visual Basic中的SendKeys语句将ANSI击键发送到窗体或控件,也会发生此事件;
                       (2)、按以下任意键时,KeyPress 事件都可发生:
                           ①、任何可打印的键盘字符
                           ②、CTRL 与标准字母表中的字符结合使用
                           ③、CTRL 与任何特殊字符结合使用
                           ④、Backspace
                           ⑤、Esc
                       (3)、在以下条件下,KeyPress 事件不会发生:
                           ①、按 TAB
                           ②、按 Enter
                           ③、按箭头键
                           ④、击键导致焦点从一个控件移动到另一个控件时
                       (4)、BACKSPACE是ANSI字符集的一部分,但DELETE不是。 使用BACKSPACE删除控件中的字符会导致KeyPress事件;使用DELETE删除字符不会;
                       (5)、用户按住产生ANSI键码的键时,KeyDown和KeyPress事件交替重复。 用户释放键时,KeyUp事件发生。带有焦点的窗体或控件接收所有击键。
                  窗体仅可在其没有控件或其所有可视控件均被禁用时具有焦点;
                       (6)、KeyPress事件的默认操作是处理对应于所按键的事件代码。KeyAscii指示对应于所按键或键组合的ANSI字符。KeyPress事件将每个字符的大写
                  和小写解释为单独的键代码,因此解释为两个单独的字符;
                       (7)、若要响应键盘的物理状态,或处理KeyPress事件未识别的击键(如功能键、定位键以及这些键与三键的任何组合),请使用KeyDown和KeyUp事
                  件程序;
                       (8)、键盘相关事件的序列是:KeyDown、KeyPress、KeyUp。
        12、KeyUp:松开键。当UserForm对象有焦点且键盘有键松开时触发。
            语法:Private Sub object_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
            参数:参照KeyDown事件
            示例:松开按键时,输出三键状态和按键值
        Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
            Debug.Print Shift
            Debug.Print KeyCode
        End Sub
            注意:参照KeyDown事件。
        13、Layout:布局。当UserForm对象更改大小时触发。
            语法:Private Sub object_Layout()
            示例:当用Move方法设置窗体宽和高时触发Layout事件,输出修改后窗体的宽和高
        Me.Move Me.Left, Me.Top, Me.Width + 100, Me.Height + 100 '设置窗体宽和高,Left、Top属性不变
        Private Sub UserForm_Layout()
            Debug.Print Me.Width '输出修改后窗体的宽度
            Debug.Print Height '输出修改后窗体的高度
        End Sub
            注意:(1)、 用户可通过更UserForm对象的大小来触发Layout 事件;
                       (2)、对于支持AutoSize属性的控件,当AutoSize更改控件的大小时也触发Layout事件;
                       (3)、Layout事件的默认操作是计算窗体的新位置并重新绘制屏幕,因此当用户拖动窗体时也会触发Layout事件。
        14、MouseDown:按下鼠标。当控件有焦点且鼠标有按下键时触发。
            语法:Private Sub object_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
            参数:object        必填    代表UserForm对象
                      Button       必填    标识导致事件发生的鼠标按钮的整数值
              Shift           必填    Shift、Ctrl 和 Alt 键的状态
              X, Y                 必填    水平或垂直位置(以磅为单位),从控件的左边缘或上边缘。
        Button 的设置为:
                常量                值        描述
            fmButtonLeft                1        已按下左按钮。
            fmButtonRight                2        已按下右按钮。
            fmButtonMiddle        4        已按下中间按钮。
        Shift 的设置为:
                常量                        值        描述
                                            0        Alt、Shift 和 Ctrl三键无任何键按下
            fmShiftMask                        1        已按下 Shift 键
            fmCtrlMask                        2        已按下 Ctrl 键
                                            3        已按下 Ctrl 和 Shift 键
            fmAltMask                        4        已按下 Alt 键
                                            5        已按下 Alt  和 Shift 键
                                            6        已按下 Alt 和 Ctrl 键
                                        7        已按下 Alt、Shift 和 Ctrl 键
            示例:当按下鼠标时,输出鼠标按钮值、三键(Alt、Shift 和 Ctrl 键)值、坐标值
        Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
            Debug.Print "Button:" & Button
            Debug.Print "Shift:" & Shift
            Debug.Print "X:" & x
            Debug.Print "Y:" & y
        End Sub
            注意:与鼠标相关的事件的顺序为:MouseDown、MouseUp、Click、DblClick、MouseUp。
        15、MouseMove:鼠标移动。当控件有焦点且鼠标在控件内移动时触发。
            语法:Private Sub object_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
            参数:参照MouseDown事件,Button为0时无鼠标按键
            示例:当移动鼠标时,输出鼠标按钮值、三键(Alt、Shift 和 Ctrl 键)值、坐标值
        Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
            Debug.Print "Button:" & Button
            Debug.Print "Shift:" & Shift
            Debug.Print "X:" & x
            Debug.Print "Y:" & y
        End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-17 09:25 | 显示全部楼层
        16、MouseUp:松开鼠标。当控件有焦点且鼠标有松开键时触发。
            语法:Private Sub object_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
            参数:参照MouseDown事件
            示例:当松开鼠标时,输出鼠标按钮值、三键(Alt、Shift 和 Ctrl 键)值、坐标值
        Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
            Debug.Print "Button:" & Button
            Debug.Print "Shift:" & Shift
            Debug.Print "X:" & x
            Debug.Print "Y:" & y
        End Sub
        17、QueryClose:查询关闭。在UserForm对象关闭之前触发。
            语法:Private Sub object_QueryClose(Cancel As Integer, CloseMode As Integer)
            参数:object    必填    代表UserForm对象
                      Cancel    必填    一个整数。将此参数设置为0以外的任何值将停止所有加载的用户表单中的QueryClose事件,并阻止UserForm和应用程序关闭
                      CloseMode   必填    一个值或 常量 ,指示QueryClose事件的原因
        CloseMode 参数返回以下值:
                常量                值        描述
            vbFormControlMenu        0        用户已从UserForm 上的"控制"菜单中选择"关闭"命令
            vbFormCode                1        Unload 语句是从代码调用的
            vbAppWindows                2        当前 Windows 操作环境会话正在关闭
            vbAppTaskManager        3        Windows 的“任务管理器”正在关闭应用程序
            示例:阻止用户使用标题栏中的“关闭”框关闭窗体,点击窗体空白区域关闭窗体
        Private Sub UserForm_Activate()
            Me.Caption = "你必须点击我才能关闭!"
        End Sub
        Private Sub UserForm_Click()
          Unload Me
        End Sub
        Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
            '阻止用户使用标题栏中的“关闭”框关闭
            If CloseMode <> 1 Then Cancel = 1 '也可写成Cancel = True
            Me.Caption = "关闭框不起作用!点击我!"
        End Sub
            注意:(1)、此事件一般用于确保应用程序所含的用户窗体中在应用程序关闭前没有未完成任务。 例如,如果用户尚未将新数据保存到任何UserForm中,
                  则应用程序可能提示用户保存数据;
                       (2)、应用程序关闭时,您可使用QueryClose事件过程将Cancel属性设置为True,以停止关闭过程。
        18、RemoveControl:删除控件。从UserForm对象删除控件时触发。
            语法:Private Sub object_RemoveControl(ByVal Control As MSForms.Control)
            参数:object    必填    代表UserForm对象
                      Control   必填    删除的控件
            示例:删除窗体上的控件触发RemoveControl事件,输出被删除的控件名称
        Me.Controls.Remove "TextBox2" '删除文本框TextBox2,注意用Remove方法只能删除Add方法添加的控件,设计时插入的控件不能用Remove方法
        Private Sub UserForm_RemoveControl(ByVal Control As MSForms.Control)
            Debug.Print Control.Name '输出被删除的控件名称
        End Sub
            注意:RemoveControl事件在窗体用代码删除控件时触发,设计或卸载(Unload)窗体不会触发此事件。
        19、Resize:调整大小。调整UserForm对象大小时触发。
            语法:Private Sub object_Resize()
            参数:object    必填    代表UserForm对象
            注意:在调整父UserForm的大小时,使用Resize事件过程移动控件或调整控件大小。还可以使用此事件过程重新计算变量或属性。
            示例:点击窗体空白区域实现窗体高度变化,并用标题给出提示
        Private Sub UserForm_Activate()
            UserForm1.Caption = "点击我让我更高!"
            Me.Tag = Height '保存初始高度
        End Sub
        Private Sub UserForm_Click()
            Dim NewHeight As Single
            NewHeight = Me.Height
            '如果高度为原始高度则高度翻倍
            If NewHeight = Val(Me.Tag) Then
                Me.Height = Val(Me.Tag) * 2
            Else
            '如果高度翻倍则高度恢复原始高度
                Me.Height = Val(Me.Tag)
            End If
        End Sub
        Private Sub UserForm_Resize()
            Me.Caption = "新高度: " & Me.Height & "  " & "单击空白区域以调整大小!"
        End Sub
            注意:调整UserForm对象大小不仅触发Resize事件,也往往触发Layout事件。
        20、Scroll:滚动。重新定位UserForm对象滚动框时触发。
            语法:
        Private Sub object_Scroll(ByVal ActionX As MSForms.fmScrollAction, ByVal ActionY As MSForms.fmScrollAction, _
                            ByVal RequestDx As Single, ByVal RequestDy As Single, _
                            ByVal ActualDx As MSForms.ReturnSingle, ByVal ActualDy As MSForms.ReturnSingle)
                            ByVal ActualDy As MSForms.ReturnSingle)
            参数:object         必填    代表UserForm对象
                      ActionX       必填    在水平方向上发生的操作
                      ActionY       必填    在垂直方向上发生的操作
                      RequestDx  必填    希望滚动条向水平方向移动的距离(以磅为单位),向右为正数,向左为负数
                      RequestDy  必填    希望滚动条向垂直方向移动的距离(以磅为单位),向下为正数,向上为负数
                      ActualDx     必填    实际滚动条在水平方向移动的距离(以磅为单位),向右为正数,向左为负数
                      ActualDy     必填    实际滚动条沿垂直方向移动的距离(以磅为单位),向下为正数,向上为负数
        ActionX 和 ActionY 的设置为:
                常量                        值        描述
                      fmScrollActionNoChange        0        未发生变化
                      fmScrollActionLineUp                1        垂直滚动条向上移动最短距离;水平滚动条向左移动最短距离。 移动相当于按键盘上的向上键或向左
                                                                                                    键来移动滚动条
                      fmScrollActionLineDown                2        垂直滚动条向下移动最短距离;水平滚动条向右移动最短距离。 移动相当于按键盘上的向下键或向右
                                                                                                    键来移动滚动条
                      fmScrollActionPageUp                3        垂直滚动条向上翻一页;水平滚动条向左翻一页。移动相当于按键盘上的Page Up来移动滚动条
                      fmScrollActionPageDown        4        垂直滚动条向下翻一页;水平滚动条向右翻一页。移动相当于按键盘上的Page Down来移动滚动条
                      fmScrollActionBegin                5        垂直滚动条的顶部;水平滚动条的左端
                      fmScrollActionEnd                6        垂直滚动条的底部;水平滚动条的右端
                      fmScrollActionPropertyChange        8        ScrollTop或ScrollLeft属性的值发生更改。 移动的方向和距离取决于所更改的属性以及新的属性值
                      fmScrollActionControlRequest        9        要求其容器滚动的控件。 移动的距离取决于特定控件和所涉及的容器
                      fmScrollActionFocusRequest        10        用户移动到其他控件。 移动距离取决于所选控件的位置,通常具有移动选定控件以使其对用户完全可
                                                                                                    见的效果
            注意:(1)、与窗体关联的Scroll事件返回以下参数:ActionX、ActionY、ActualX和ActualY。ActionX和ActionY标识所发生的操作。ActualX和ActualY标
                  识滚动框实际滚动的距离;
                       (2)、默认操作是计算滚动框的新位置,然后滚动到该位置;
                       (3)、您可以通过对窗体使用Scroll方法来启动Scroll事件。 用户可以通过移动滚动框来产生Scroll事件;
                       (4)、与独立ScrollBar关联的Scroll事件指示用户向任一方向移动滚动框。 如果ScrollBar的值由代码更改或者由用户单击ScrollBar而非滚动框的某些
                  部分而更改时,不会启动此事件。
        21、Terminate:终止。将引用UserForm对象的所有变量 设置为Nothing或最后一次引用对象超出范围时,从内存中删除对对象实例的所有引用时触发。
            语法:Private Sub object_Terminate()
            参数:object      必填    代表UserForm对象
            示例:卸载窗体后弹出再见消息框
        Private Sub UserForm_Terminate()
            MsgBox "感谢使用,再见!", 48, ""
        End Sub
            注意:在卸载窗体后发生Terminate事件。 如果由于应用程序异常终止而从内存中删除UserForm或类的实例,则不会触发Terminate事件。
        22、Zoom:缩放。当Zoom属性发生更改时出现触发。
            语法:Private Sub object_Terminate()
            参数:object      必填    代表UserForm对象
                      Percent    必填    窗体要缩放的百分比。 有效值的范围为10到400
            示例:缩放窗体时触发Zoom事件,输出Zoom属性值
        Private Sub UserForm_Zoom(Percent As Integer)
            Debug.Print Percent
        End Sub
            注意:Zoom属性的值标识窗体大小如何更改。小于100的值将减小窗体;大于100放大窗体。有效范围为10到400之间的任何整数。

TA的精华主题

TA的得分主题

发表于 2023-7-17 14:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-18 09:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-30 09:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
好贴,内容太详细了,很有帮助。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 18:29 , Processed in 0.053221 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表