精华内容
下载资源
问答
  • 从我们见过的软件分析,要写一个查询条件的输入,必须有输入框吧,有可能有选择框吧,有可能有多选、单选框吧,你得有确定按钮吧,本章主要描述这些东西及其初始化 一、综述 控件其实也是窗体,是上篇中的窗体的...

    引言

    我们还是要回顾下我们要干什么?我们的目标是做一个具有查询及显示查询结果的工具。上一章介绍了窗体及其属性、事件、方法等,这个东西只能算是画个查询条件的框框,里面的具体查询条件怎么填呢。

    从我们见过的软件分析,要写一个查询条件的输入,必须有输入框吧,有可能有选择框吧,有可能有多选、单选框吧,你得有确定按钮吧,本章主要描述这些东西及其初始化

    一、综述

    控件其实也是窗体,是上篇中的窗体的儿子、继承者。目前我们常用的有标签(Lable),文本框(TextBox),复合框(ComboBox),列表框(ListBox),复选框(CheckBox),选项按钮(OptionButton),命令按钮(CommandButton),等等。

    因为控件和窗体是继承关系,所以控件的属性和窗体差不多,如位置、大小、字体相关、图片相关、鼠标相关等。但是龙生九子,子子不同,他们又会生出具有各自特点的属性。

    二、属性

    上面说了,龙生九子,子子不同。所以控件在继承窗体的属性时,不是全部继承,一般都是根据自身的功能去继承父亲的某些特点。同时,儿子也会生出一些自己的共性特点(属性)。

    • 新属性:
    textalign文本对齐方式

    1 fmTextAlignLeft

    2 fmTextAlignCenter

    3 fmTextAlignRight

    对于listbox只对编辑框起作用

    AutoSize

    控件调节自身大小

    ture

    false

    true表示自动调整,当然不同的空间自动调整的含义不同

    AutoTab

    当用户在文本框或组合框的文本框区域输入了最大允许字符数时,是否自动跳格

    ture

    false

    MaxLength 属性规定了在文本框或组合框的文本框区域内所允许的最大字符数

    TabIndex

    按tab键时TabIndex表示第几个跳到该控件

    整数

     
    TabStopTabStop表示按tab键时是否忽略该控件

    ture

    false

    true 表示接受tab

    ControlSource

    标识用于设置或储存控件中 Value 属性的数据位置。ControlSource 属性可接受 Microsoft Excel 工作表区域

    一般写excel单元格excel单元格和控件对应的value可以互相影响。意思就是你改一个另外一个就会跟着改
    ControlTipText

    指定当用户将鼠标指针放在控件上但未按下时所显示的文本

      

     

     

     

     

     

     

     

     

     

     

     

     

    三、方法

    AddItem,RemoveItem方法等

    四、控件初始化示例

     对于控件的初始化,我们一般在UserForm的init事件中进行。初始化控件时,可对控件的属性进行赋值。本次示例对checkbox,textbox,listbox,combobox进行了初始化操作,分别进行了:复选框选定初始化,文本框内容初始化,复合框内容初始化,列表框内容初始化。

    赋值效果,及代码如下:

    • 效果:

    • 代码: 
    Dim MyArray(6, 3)
    '文本框初始化:属性赋值
    Private Sub testboxinit()
        TextBox1.Text = "TextBox1"
        TextBox1.Enabled = False
        TextBox1.Locked = False
        TextBox2.Text = "TextBox2"
    End Sub
    '复选框初始化:名称赋值,是否选定
    Private Sub checkboxinit()
        CheckBox1.Caption = "Enabled"
        CheckBox1.Value = True
        
        CheckBox2.Caption = "Locked"
        CheckBox2.Value = False
    End Sub
    '复合框初始化:内容初始赋值
    Private Sub comboxinit()
        Dim j As Integer
    
        For j = 1 To 9
            ComboBox1.AddItem "Choice " & j
        Next j
        ComboBox1.AddItem "Chocoholic"
    End Sub
    '列表框初始化:内容初始赋值
    Private Sub listboxinit()
        Dim i As Single
         '第一个列表框包含三个数据列
        ListBox1.ColumnCount = 3
         '第二个框包含六个数据列
         ListBox2.ColumnCount = 6
    
        '把整数值加载到 MyArray 的第一列
        For i = 0 To 5
            MyArray(i, 0) = i
        Next i
    
        '加载 MyArray 的列 2 和列 3
        MyArray(0, 1) = "Zero"
        MyArray(1, 1) = "One"
        MyArray(2, 1) = "Two"
        MyArray(3, 1) = "Three"
        MyArray(4, 1) = "Four"
        MyArray(5, 1) = "Five"
    
        MyArray(0, 2) = "Zero"
        MyArray(1, 2) = "Un ou Une"
        MyArray(2, 2) = "Deux"
        MyArray(3, 2) = "Trois"
        MyArray(4, 2) = "Quatre"
        MyArray(5, 2) = "Cinq"
    
        '把数据加载到 ListBox1 和 ListBox2
        ListBox1.List() = MyArray
        ListBox2.Column() = MyArray
    End Sub
    
    Private Sub UserForm_Initialize()
        
        Call testboxinit
        Call comboxinit
        Call listboxinit
        Call checkboxinit
       
    End Sub
    
    

     

    展开全文
  • VBA 用户窗体的认识(二)

    千次阅读 2020-08-19 23:24:04
    ① Initialize:初始化事件 ② Activate:显示用户窗体时发生 ③Deactivate:窗体非激活的时候发生,但是隐藏了不会发生 ④QueryClose:卸载用户窗体之前发生 ⑤Terminate:卸载用户窗体之后发生 2.、S.

    今天继续讲用户窗体啦~

    一、控件事件

    昨天通过小例子,认识了按钮的点击事件(CommandButton1_Click),除此之外,还有部分控件常用事件。添加完控件后,双击一下,在上面下拉就可以查看到事件啦。

    1.、UserForm的事件

    ① Initialize:初始化事件

    ② Activate:显示用户窗体时发生

    ③Deactivate:窗体非激活的时候发生,但是隐藏了不会发生

    ④QueryClose:卸载用户窗体之前发生

    ⑤Terminate:卸载用户窗体之后发生

    2.、SpinButton的事件

    这个按钮是数值调节按钮

    ① 鼠标可以触发的事件:

    Enter、Change、SpinUp

    ② 键盘触发的事件

    Enter、KeyUp(释放Tab时触发)、KeyDown、Change、SpinUp(SpinDown)

    ③ 通过代码触发

     

    SpinButton就俩上下的箭头,怎么用呢?主要是和其他的控件配合一起使用啦,比如说放在文本框边上,控制文本框的数值大小:

    这样写即可在点击上箭头的时候进行加1,下箭头的时候进行减1操作:

    Private Sub SpinButton1_Change()
        Me.TextBox1.Text = Me.SpinButton1.Value
    End Sub

    但是这样还是粗糙了点,比如用户输入了100,再点加就是101,怎么实现呢?也很简单啦:

    Private Sub TextBox1_Change()
        Me.SpinButton1.Value = Me.TextBox1.Text
    End Sub

    此处就不加判断用户输入内容是不是字符串啦~

    二、自定义“工具箱”

    1.右键有惊喜

    对着工具箱上的“控件”二字点一下右键,会发现有上面这些内容。

    对着工具栏点击右键,就会出现上面这些东西。

     

    2.简单使用技巧

    比如刚才提到的,一个SpinButton搭一个TextBox,如果经常需要用到,咱们只需要这样操作即可,如果遇到很复杂的控件组合,直接这样拖拽留作备用是不是很方便呢:

    三、创建用户窗体模板

    上面的自定义控件比较方便,如果还需要直接保存整个UserForm咋办呢?

    点一下UserForm——点击VBE左上角的文件——点击导出文件。然后就导出了,下次要用的话同理

    点击VBE左上角的文件——点击导入文件就可以啦

    四、和昨天一样,来个简单的例子

    1.做一个列表框,用户点击选择后,执行不同的过程或者程序:

    ① 先在窗体的初始化中加入列表框的选项

    Private Sub UserForm_Initialize()
        With Me.ListBox1
            .AddItem "1号选择"
            .AddItem "2号选择"
            .AddItem "3号选择"
            .AddItem "4号选择"
            .AddItem "5号选择"
        End With
    End Sub

    ② 点击确定后,执行不同的程序

    Private Sub CommandButton1_Click()
        Dim str As String
        Select Case Me.ListBox1.ListIndex
            Case 0: sub1
            Case 1: sub2
            Case 2: sub3
            Case 3: sub4
            Case 4: sub5
        End Select
    End Sub

    ③ 创建上面的sub1-sub5,用来执行就可以啦。

    2.选择单元格区域

    之前在学到 InputBox 时,也有输入单元格区域的方法:

    str = Application.InputBox(prompt:="请输入单元格区域", Type:=8)

    在用户窗体中,可以借助RefEdit来实现,比上面的稍微还好看些,框框边上有个小按钮,运行后点击小按钮,然后对着sheet上的单元格框就可以了。

    需要注意的是,RefEdit返回的值是字符型,所以使用的话这样操作:

        Dim myRng As Range
        Set myRng = Range(Me.RefEdit1.Text)

    3.搞个欢迎界面

    比如打开工作表有个欢迎页面UserForm1,倒计时2秒后自动关闭,弹出工作框UserForm2:

    ① 在Workbook_Open事件中写上UserForm1.Show

    Private Sub Workbook_Open()
        UserForm1.Show
    End Sub

    ② 在欢迎界面UserForm1上写上:

    Private Sub UserForm_Activate()
        If Application.Wait(Now + TimeValue("0:00:2")) Then
            killForm
        End If
    End Sub
    
    Private Sub killForm()
        Unload Me
        UserForm2.Show
    End Sub

    OK!

    展开全文
  • 1 窗体 form 1.1创建窗体 form (默认名:userform) 和插入模块一样,插入用户窗体即可 1.2 如何运行/显示 窗体? 1.2.1 显示窗体的代码方法 据说,单写一句 userform1.show 也是可以的,因为VBE会自动先 load ...

    前2篇是自己纯摸索的,这篇跟着书看,我喜欢这种先自学了再看书的感觉

    form的自学方法

    • 属性窗口,按照分类排序
    • 按F1 可以查看帮助

      

     

    1 窗体 form

    1.1 创建窗体 form (默认名:userform)

    • 在VBE里和插入模块一样,插入用户窗体即可

     

    1.2 如何运行/显示 窗体?

    1.2.1 显示窗体的代码方法

    • 据说,单写一句 userform1.show 也是可以的,因为VBE会自动先 load 这个窗体
    • load form1    '加载窗体,加载到内存,但不显示
    • form1.show   '显示窗体  (必须得先加载到内存,才可能显示)
    • 这里语法都是用的form1 的name属性,也是load name , unload name,  name.show
    Sub callform1()
    
    Load UserForm1
    UserForm1.Show
    
    End Sub
    

    1.2.2 选中form后,点运行也可以

     

    1.2.3 出错处理

    • 如果这个窗体不存在,就没法使用对象.show方法,会报错 要求对象
    • 如果load form2 ,form2不存在,也是报错 要求对象,load object 的语法

     

    1.3 关闭窗体:其实是卸载 unload,注意模式窗体和无模式窗体

    • 只能在窗体运行时,窗体本身的事件去关闭他

    • 一般正常代码代码

    Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Unload UserForm1
    End Sub
    

     

    1.3.1 一般创建的窗体,无法再运行时被其他VBA代码等关闭,也不能操作EXCEL

    • 下面的代码1毫无意义
    • 因为,窗体在运行的过程中,VBE是挂起的,无法调用
    • 代码1
    • Sub unloadform1()   
      Unload UserForm1      '没办法调用
      End Sub
      
     

    1.3.2 设置模式窗体 和无模式窗体的方法

    • 默认或者设置    vbmodal 就是有模式的窗体
    • 如果设置   窗体4.Show vbModeless  就是无模式的窗体,并且运行时可以允许其他VBA关闭这个允许的窗体
    •  注意vbmodal 不要写成 vbmodel  
    Sub test10001()
    窗体4.Show vbModal  '或 窗体4.show  注意不要写成 vbmodel
    End Sub
    
    
    Sub test1002()
    窗体4.Show vbModeless
    End Sub
    
    
    Sub test1003()   '因为窗体4设置为modelless,这里才能在其运行时关闭他
    Unload 窗体4
    End Sub
    

     

    1.4 窗体命名的特殊性

    • VBE中可以创建2个窗体,默认自动命名为  userform1 , userform2
    • 在不同的窗体下
    • 但是事件代码的 窗体名字都叫  userform,并没有被命名为  userform1 , userform2
    • 可能是因为不同窗体是独立的,并且每个窗体和控件组,只能有1个form窗体。

     

    • 在同一个窗体下
    • 反正只有1个窗体
    • 控件如果在一个窗体内窗体创建多个,是会自动+1命名的。

     

    1.5 窗体的基本属性

    1.5.1 窗体的名字和标题

    • form1.name           '窗体名字
    • 也是load name ,    unload name,  name.show
    • form1.caption        '只是标题而已,创建的窗体,默认窗体的name=caption 其实是独立的
    Private Sub UserForm_Click()
    Debug.Print Me.Caption
    Debug.Print Me.Name
    End Sub


    1.5.2 窗体的一些感觉会有用的属性

    • name
    • caption
    • picture 相关几个 picturesizemode picturealignment
    • picturealignment                                 '试了下默认center居中,还有topleft等4个角对齐选择。
    • picturesizemode                                 '默认是clip截断(原尺寸),zoom 缩放好像是等比例缩放?  stretch拉伸铺满
    • pictureTiling                                        '默认是否,置为1后为平铺 (可见平铺是单独的属性)
    • font  
    • height  ,width
    • top,left
    • backcolor, bordercolor, borderstyle
    • enabled                                                '是否可用,可以初始化form的
    • mouseicon,mousepointer                     '应该可以设置不同的鼠标外观
    • scrollbars                                              '给form加各种scrollbar

     

    • 暂时还不清楚的属性
    • righttoleft ?
    • cycle

     

    1.6  窗体的一些设定

    1.6.1 关于窗体和控件的事件代码中的 me   (可以说类 thisform)

    • me就是指当前的窗体,比如 窗体.name
    • 应该是一定指代parent 窗体,而不是 button这种控件
    • me 比 form.name 好的就是,即使name 改名了,me都是指代 thisform 不用修改
    Private Sub CommandButton1_Click()
    
    Debug.Print Me.Name
    'Debug.Print Me.Caption   ' 如果activeX控件在表单里
    
    End Sub

     

    1.6.2 切换表单和代码的地方

     

    1.7 窗体的事件

    1.7.1窗体的initialize事件

    • 窗体作为他下属控件的 parent ,那么 form1_intialize() 事件可以做很多初始化工作
    • 比如,初始化一些 变量值,控件变量的初值
    • 比如初始化一些功能,比如 让一些控件初始是不可用的    =enabled
    Private Sub UserForm_Initialize()
    Me.Caption = ActiveWorkbook.Name & "  的一个窗体"
    
    '设置某控件个初值
    '设置一些按钮初始可用还是不可用
    
    End Sub

     

    1.7.2  窗体的关闭前触发时间  queryClose

    • 窗体的关闭模式
    • 参数1:closemode
    • closemode=1, 手动点关闭按钮,或者是caption栏右键的菜单
    • closemode=2, VBA代码里用的 unload 语句
    • 参数2:cancel
    • cancel=0(false) 可以关闭
    • cancel=1(true)   取消关闭=不可关
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then        '手动关闭按钮,或者是右键点击caption栏弹出的关闭菜单
       Cancel = True
       MsgBox "不允许手动关闭,请您双击窗体关闭"
    ElseIf CloseMode = 1 Then    '代码unload方法
       Cancel = 0
       Load 窗体2
       窗体2.Show
    End If
    
    End Sub
    
    Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    
    Unload 窗体1
    Unload Me
    End Sub
    

     

    2 如何在窗体上创建其他控件?

    2.1 窗体上的控件工具栏

    • VBE不友好的地方
    • 和PS喜欢把一些常用工具给叠起来右键才能打开几个一样,对新手不友好
    • VBE里如果要往窗体上加控件,平时写代码的时候是灰色的,必须是切到窗体设计模式时才亮起。。。

     

    2.2 可添加更多工具控件

    • 还可以添加其他非常见工具控件

     

    2.3 设置TAB键次序

    • 表单上点右键可以呼出 设置tab 次序
    • 但是好像必须得设置,不能把某些控件给排除掉?  ---经测试,TAB键实际响应时会排除label等不影响。

     

     

    3 窗体控件的公共属性

    3.1 控件属性的修改

    • 同1个属性,比如 backcolor
    • 可以在属性窗口,静态的修改(只能在运行开始设置1次)
    • 也可以在VBA代码中修改     (理论上运行过程中随时可以修改)

     

    3.2 控件的公共属性

    • 窗体里的各种控件,有很多共用属性
    • 有很多公共属性
    1. 设置
    2. enabled    可用 
    3. visible     显示
    4. 背景设置
    5. backcolor
    6. backstyle
    7. 提示文本等
    8. controlTipText  鼠标停留时,触发的悬浮窗提示
    9. caption,text,value
    10. 其他呢?
    11. controlSource

     

    3.3 展示效果

    3.4 对应代码

    Private Sub CommandButton1_Click()
    If Len(TextBox2.Value) <= 6 And Len(TextBox1.Value) <= 8 Then
       MsgBox "输入正确,即将登陆... ..."
       Unload 窗体1
    Else
       MsgBox "用户名和密码输入有误,请重新输入"
    End If
    End Sub
    
    Private Sub Label1_Click()
    
    End Sub
    
    Private Sub Label3_Click()
    
    End Sub
    
    Private Sub Label4_Click()
    
    End Sub
    
    Private Sub Label5_Click()
    
    End Sub
    
    Private Sub Label6_Click()
    
    End Sub
    
    Private Sub Label7_Click()
    
    End Sub
    
    Private Sub TextBox1_Change()
       Debug.Print "TextBox1.Value = " & TextBox1.Value
       If TextBox1.Value <> "" And TextBox2.Value <> "" Then
          CommandButton1.Enabled = True
          CommandButton1.Visible = True
          CommandButton1.Visible = True
          Label5.Visible = False
       Else
          CommandButton1.Visible = False
          Label5.Visible = True
       End If
    End Sub
    
    Private Sub TextBox1_Enter()
    '类似于activeX控件的textbox1_getfocus吧
    TextBox1.ControlTipText = "可以输入数字字母或中文,但必须小于8个字符"
    End Sub
    
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    '类似于activeX控件的textbox1_lostfocus吧
    BackColor = RGB(0, 255, 255)
    If Len(TextBox1.Value) > 8 Then
       Cancel = True
       MsgBox "用户名不能超过8个字符,请重新输入"
       TextBox1.SetFocus
    Else
       TextBox2.SetFocus
    End If
    End Sub
    
    Private Sub TextBox2_Change()
       Debug.Print "TextBox2.Value = " & TextBox2.Value
       If TextBox1.Value <> "" And TextBox2.Value <> "" Then
          CommandButton1.Enabled = True
          CommandButton1.Visible = True
          Label5.Visible = False
       Else
          CommandButton1.Visible = False
          Label5.Visible = True
       End If
    End Sub
    
    Private Sub TextBox2_Enter()
       TextBox2.ControlTipText = "请输入6位以内的任意密码"
    End Sub
    
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Len(TextBox2.Value) <= 6 Then
       CommandButton1.SetFocus
    Else
       MsgBox "您输入的密码大于6位,请重新输入"
       TextBox2.SetFocus
    End If
    End Sub
    
    Private Sub UserForm_Click()
    
    End Sub
    
    Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Unload Me
    End Sub
    
    Private Sub UserForm_Initialize()
    Me.Caption = ActiveWorkbook.Name & "  的一个窗体"
    CommandButton1.Enabled = False
    CommandButton1.Visible = False
    '设置某控件个初值
    '设置一些按钮初始可用还是不可用
    End Sub
    
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then        '手动关闭按钮,或者是右键点击caption栏弹出的关闭菜单
       Cancel = True
       MsgBox "不允许手动关闭,请您双击窗体关闭"
    ElseIf CloseMode = 1 Then    '代码unload方法
       Cancel = 0
       Load 窗体2
       窗体2.Show
    End If
    End Sub
    

     

    4 控件的公共事件:鼠标事件 mouse 类

    4.1 鼠标类属性

    • mouseIcon       :自定义鼠标icon,需要mousePointer设置为custom 99
    • mousePointer    : 鼠标外观,有多种内置外观 

     

    4.2 鼠标类事件

    • mouseMove  : 
    • mouseDown  :  持续按下的状态
    • mouseUp       : 

     

    4.3 识别鼠标和shfit等三个按键

    • button 是int  识别鼠标的键位
    • 其中1是左键,2是右键,4是中键
    • shift  是int  识别是否同时按下其他几个键, ctrl shift alt 这几个键
    • shift ,ctrl ,alt 分别是 1 2 4 这几个是基础状态
    • 多个键的组合状态是求和
    • 3=1+2
    • 5=1+4
    • 6=2+4
    • 7=1+2+4

     

    代码注意点

    • 注意点
    • 命令按钮是 commandbutton2
    • 但是mousemove,mouseDown 等参数是button 且是过程级参数
    • 实际使用时,判断鼠标的时候有判断 shift ctrl等的吗?
    Private Sub CommandButton2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    'button 是int  识别鼠标的键位
    'shift  是int  识别是否同时按下其他几个键, ctrl shift alt 这几个键
    
    
    If Button = 1 Then
        If Shift = 1 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标左键" & "并且" & "按下了shift"
        ElseIf Shift = 2 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标左键" & "并且" & "按下了ctrl"
        ElseIf Shift = 3 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标左键" & "并且" & "按下了shift+ctrl"
        ElseIf Shift = 4 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标左键" & "并且" & "按下了alt"
        ElseIf Shift = 5 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标左键" & "并且" & "按下了shift+alt"
        ElseIf Shift = 6 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标左键" & "并且" & "按下了ctrl+alt"
        ElseIf Shift = 7 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标左键" & "并且" & "按下了shift+alt+ctrl"
        Else
            CommandButton2.ControlTipText = "刚才按下了鼠标左键"                                      '总是会记住上次的状态
        End If
    
    
    ElseIf Button = 2 Then
        If Shift = 1 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标右键" & "并且" & "按下了shift"
        ElseIf Shift = 2 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标右键" & "并且" & "按下了ctrl"
        ElseIf Shift = 3 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标右键" & "并且" & "按下了shift+ctrl"
        ElseIf Shift = 4 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标右键" & "并且" & "按下了alt"
        ElseIf Shift = 5 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标右键" & "并且" & "按下了shift+alt"
        ElseIf Shift = 6 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标右键" & "并且" & "按下了ctrl+alt"
        ElseIf Shift = 7 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标右键" & "并且" & "按下了shift+alt+ctrl"
        Else
           CommandButton2.ControlTipText = "刚才按下了鼠标右键"
        End If
    
    
    ElseIf Button = 4 Then
        If Shift = 1 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮" & "并且" & "按下了shift"
        ElseIf Shift = 2 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮" & "并且" & "按下了ctrl"
        ElseIf Shift = 3 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮" & "并且" & "按下了shift+ctrl"
        ElseIf Shift = 4 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮" & "并且" & "按下了alt"
        ElseIf Shift = 5 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮" & "并且" & "按下了shift+alt"
        ElseIf Shift = 6 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮" & "并且" & "按下了ctrl+alt"
        ElseIf Shift = 7 Then
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮" & "并且" & "按下了shift+alt+ctrl"
        Else
           CommandButton2.ControlTipText = "刚才按下了鼠标中键滚轮"
        End If
    
    End If
    
    End Sub

     

    4.4 利用mouseMove,但是需要在form 和 command 的时候分别设置

    • mousemove
    • mousemove到 commandbutton2 的时候是一个颜色
    • 但是没有 mouse--leave 状态可用,所以,当mousemove到表单了就表示 mouse-leave了
    
    Private Sub CommandButton2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    CommandButton2.BackColor = &HC00000
    End Sub
    
    Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    CommandButton2.BackColor = RGB(0, 255, 0)
    End Sub

      

     

     

    5 控件的公共事件:键盘事件  key类

    5.1 key类的事件

    • onkey?
    • keydown     ' keydown 和keypress有一定重复,但是keydown主要是指KEY一直按下的状态
    • keyup
    • keypress

     

    5.2  识别key值

    • key相关函数可以返回 ByVal KeyCode As MSForms.ReturnInteger 
    • 这个是 ascii码
    • 在VBA中, 用chr() 转下即可得到对应的字母,数字,符号等等。
    Private Sub CommandButton3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    MsgBox "这次按下的键是" & Chr(KeyCode)
    End Sub
    
    Private Sub CommandButton3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    
    End Sub
    
    Private Sub CommandButton3_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    
    End Sub

     

     

    6 测试发现问题

    • 有个比较奇怪的问题
    • 1是VBE测试窗体,运行不稳定,有时候弹出msgbox点击确定会关闭窗体,有时候不会关闭整个窗体,并没有改代码
    • 为什么点击msgbox 的确定时,会关闭窗体呢?暂时还没查到原因
    展开全文
  • 引言 本人本次实践的目标是数据查询。具体实现方式应该是: 使用窗体及其他控件做查询的条件的...窗体俗称对话框,在可视的面向对象的编程软件中都应该有。在VBA中也有,可以打开excel->开发工具 点开Visu...

    引言

    本人本次实践的目标是数据查询。具体实现方式应该是:

    1. 使用窗体及其他控件做查询的条件的输入
    2. 使用excel作为查询结果的输出
    3. 从桌面上看应该是,前面一个窗口输入查询条件,然后点确定,后面有个excel显示结果。
    4. 类似下图这种

        

    一、打开窗口 

    窗体俗称对话框,在可视化的面向对象的编程软件中都应该有。在VBA中也有,可以打开 excel->开发工具

    点开Visual Basic就会进入到变成界面,然后就可以插入窗体,如下图 

    二、窗体简介

     窗体,也就是窗口,或者叫对话框,是vba定义的一个对象,或者说一类对象。微软对“Microsoft 窗体”对象的介绍就是下面一幅图

    我们本节所说的”窗体“就是第二层(UserForm)。我们可以从图中看出,窗体对象,不止是指UserForm,还指其他的对象,如Controls,Font,MultiPage,等等。从面向对象的观点来说,这个图表示的应该是一个继承图。(我不是很熟,猜的) 如果上图是个继承关系图,那么我们可以得到几个结论:

    1. 他们的事件可以继承
    2. 他们的属性也可以继承
    3. 且儿子的属性和事件可能比父亲多。。。。

    三、窗体属性简介

    属性,表示这个窗体固有的特性,如基本的:长宽高,位置,颜色等;特殊的:如字体大小啊,有无滚动条啊等等

    所以分下类:

    • 基础属性:外观,位置,字体
    名称窗体名称该窗体的标识可能是唯一标识

    BackColor

    背景色  

    BorderColor

    边框颜色 只有BorderStyle为1时,这个才有效

    BorderStyle

    边框类型(两种)

    0 fmBorderStyleNone

    fmBorderStyleSingle

     

    Caption

    窗体左上角显示的名字  

    Height

    窗体显示位置-高  

    Width

    窗体显示位置-宽  

     

     

     

     

     

     

     

     

    •  行为属性

    Cycle

    tab顺序指定控件接收焦点的顺序

    0 fmCycleAllForms

    2 fmCycleCurrentForm

    选0时,使用tab键,会遍历所有的该窗体范围内所有的控件;选1时,使用tab键,只会遍历某一窗体范围内的控件,tab不会跳出范围,到最后一个控件后会在回到该窗体范围的第一个控件
    showmodal窗口是否锁死(这个词合适)

    true

    false

    选true叫模态,false叫非模态

    模态下,如果这个窗口是激活的,其他窗体或窗口则不能被选中。非模态,反之。

     

     

     

     

     

     

    • 滚动条

    ScrollBars

    滚动条

    0 fmScrollBarsNone

    1 fmScrollBarsHorizontal

    2 fmScrollBarsVertical

    3 fmScrollBarsBoth

    0 无

    1 水平

    2 垂直

    3 全部

    ScrollHeight

    ScrollTop

    滚动条高height有值,top才填值只有当ScrollHeight值大于窗体本身的height时,滚动条才会显示。这个时候Top表示滚动条离顶部的距离

    ScrollWidth

    ScrollLeft

    滚动条宽width有值,left才能填值只有当ScrollWidth值大于,窗体本身的Width时,滚动条才会显示。这个时候left表示滚动条离左侧的距离

     

     

     

     

     

     

     

     

     四、窗体事件、方法简介

    •  常用事件

    Initialize

    就是在初始化窗口时,要对窗口干的事情,比如给窗口属性赋值,给窗体内包含的控件赋初始值。

    Click

    点击窗体时,会干的事情,比如隐藏窗体等等

    Terminate

    关闭窗体是要干的事情,比如保存文件,关闭excel等

    • 怎么弄出来事件呢?

    先在左边选中窗口(对象),右边基本上都是事件。。。每个对象能响应的事件可能是不一样多的

    • 常用方法

    move,copy等等呢

    • 怎么弄出来方法呢?

    跟你写代码一样,写出这个对象在.一下,后面跟的就是方法和属性

    一般黑色表示属性,绿色标识方法。

    五、Initalize 、click事件示例

    下列示例假设程序中已有两个窗体UserForms。在 UserForm1 的Initalize事件中加载 UserForm2 ,并将其显示出来。当用户单击 UserForm2 时,就会将其隐含起来,而 UserForm1 将会出现。而当用户单击 UserForm1 时,UserForm2 便会再次出现。

    '这是 UserForm1 的 Initialize 事件过程
    Private Sub UserForm_Initialize()
        Load UserForm2
        UserForm2.Show
    End Sub
    '这是 UserForm2 的 Click 事件过程
    Private Sub UserForm_Click()
        UserForm2.Hide
    End Sub
    
    ' 这是 UserForm1 的 Click 事件
    Private Sub UserForm_Click()
        UserForm2.Show
    End Sub
    

     

    展开全文
  • VBA窗体函数

    千次阅读 2012-05-25 13:25:39
    使用VBA创建应用程序 来源:中数休闲 发表时间:2007-2-7 浏览次数:534 【字体:大 中 小】
  • 14 日志导出 15 excle文件格式转换 16 VBA隐藏表格 17 改变窗体外观 18 更改Sheet名 19 对文件夹中多个文件进行操作 20 合并单元格 21 插入一行单元格 22 在指定单元格内输入字符 23 调整行高和列宽 24 跳转到该列...
  • 如何建立窗体,并通过窗体向该表内添加订单。 序号 姓名 科室 级别 身份 职称 受聘专业 性别 出生年月 年龄 参工时间 工作年限 入院时间 入院年限 职务 等级 ...
  • VBA LISTBOX初始化代码

    千次阅读 2013-11-15 16:37:43
    Private Sub UserForm_Initialize() Dim lsb As Worksheet Set lsb = Sheets("临时表") X = lsb.[a65536].End(3).Row With ListBox1 .ColumnCount = 7 '设置7列 .ColumnWidths = "30,70,70,70,70,70,50" '设置每列...
  • ActiveX控件(activeX并不能直接用到窗体,和窗体的事件也略有不同,比如getfoucs,窗体里是enter等) 窗体 窗体控件 代码设置优先级更高,尽量少用属性栏,而是用代码设置, 很多属性,既可以在属性栏设置,...
  • 目录江雪大爷钓鱼:从简到繁,vba写库房管理软件(一)之开篇废话多江雪大爷钓鱼:从简到繁,vba写库房管理软件(二)之需求分析及初学者避坑指南江雪大爷...从简到繁,vba写库房管理软件(四)之窗体设计江雪大爷...
  • 1、插入一个用户窗体 需要在用户窗体中加入按钮的,则需要打开“工具箱” 插入控件按钮 2、代码编写 (1)、首先在sheet中添加一个按钮,来显示用户窗体,查看效果 Private Sub CommandButton1_Click() UserForm...
  • 利用API对VBA窗体设置

    千次阅读 2010-03-08 10:04:00
    其实在VBA中,我们可以利用API的SetWindowLong函数来进行对VBA窗体的设置。以下代码添加到窗体中,可以隐藏窗体的关闭按钮。 API声明Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" ...
  • 之前已经描述分别描述了Excel VBA窗体、控件和Excel本身的对象(也就是数据的承载者)。本章主要描述Excle VBA中如何将控件和excel中的数据相关联。 一、如何关联已有的Excel文档和VBA 其实这个就是如何使用Vba...
  • VBA研究】EXCEL启动时自动启动窗体

    千次阅读 2015-08-26 10:09:44
    VBA编程时为了界面美观,我们经常用到窗体Form,那么,如何做到让VBA窗体在EXCEL启动时自动运行呢? 方法有二,第一,双击ThisWorkbook,输入以下代码(Open事件): Private Sub Workbook_Open() UserForm1.Show ...
  • 大家好,我们今日继续讲解VBA代码解决方案的第96讲内容:利用类模块完成多个控件的统一相应。为了说明类模块的作用,我们先设计一个场景,我们在TextBox1、TextBox2、TextBox3中输入完数据后,利用文本框的Change...
  • 【转君以沫学习笔记】Excel VBA:以员工信息查询为例,学习操作窗体 基于“窗体”实现Excel表格内容的查询与修改。窗体,为使用者提供了较好的交互体验,使用者可以按照自己的需要实现数据的查询与...
  • VB窗体窗体的属性及说明

    万次阅读 2018-02-26 18:57:43
    放了寒假呆在家里,我爸比较喜欢周易里的一些东西,于是问我能不能帮助他编写一个小程序来算卦。我想了想发现如果使用c语言直接做出来的页面太简陋,更美观的话需要一些...Name 窗体的名称 ActiveControl 返回焦点...
  • 在前面的课程里,咱们给大家详细的介绍过标签控件,文本框控件,窗体控件,这次咱们给大家说一下VBA的另外常用控件,命令按钮(Commandbutton)控件.命令按钮控件的实质作用其实就是一种VBA代码触发的起动机制,即通过...
  • VBA实现窗口登录

    2021-10-29 10:17:41
    Initialize() ' 窗口初始化 Dim X As Integer, Y As Integer X = Sheets("用户及密码").Range("A65536").End(xlUp).Row For Y = 2 To X ComboBox2.AddItem Sheets("用户及密码").Cells(Y, 1) Next Y End Sub Private...
  • VBA++ 题记:一剪闲云一溪月,一程山水一年华。一世浮生一刹那,一树菩提一烟霞。岁月静好,现世安稳。纵算云水漂泊,心若安宁,亦可淡若清风。希望见者与不见者都能安康。静下心,多学习有用的知识,多提高自己的...
  • 下面是一个输入日期的窗体,输入起止日期并进行检查,输入用8位数字,这样输入比较快,输入后用DateSerial转换成日期格式(DateSerial是个很有意思的函数,其功能是将参数年月日转换成一个有效的日期。虽然要求输入...
  • 通过自定义窗体录入信息,用Excel VBA代码实现去重验证。文末对用到的主要知识点进行了梳理。
  • 这个系统真的很实用,可以收入费用明细查询、账户提现互转、日收支统计,最重要的有系统备份与初始化功能,财务记账管理系统主页基础信息一定要完成基础信息表的录入,本系统由VBA编码而成,使用时需调整将宏的安全...
  • 'API判断数组为空或没有初始化 Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long   2. 窗体 中……  2.1 定义全局变量  Dim hwnd As Long  Dim lStyleOld...
  • 该网页实现两种窗体显示效果,一种是弹出 窗体,通过页面上的按钮弹出,弹出窗体在整个画面的最中间显示。另一种是页面初始化后,出现徐徐上升的窗体,状体显示后,然后慢慢淡出。
  • EXCEL编程VBA高级教程

    2015-04-16 11:40:55
    1.2EXCEL环境中基于应用程序自动的优点................................................................................1 1.3录制简单的宏....................................................................
  • private void Form1_Shown(object sender, EventArgs e)  {  textBox1.Focus();  }
  • 1、MSCOMCTL.OCX 下载ActiveX插件控制模块。 2、放到相应的文件夹路径(64位系统)C:\Windows\SysWOW64 3、执行bat注册命令 regsvr32 C:\Windows\SysWOW64\MSCOMCTL.OCX
  • vb之窗体关闭事件

    万次阅读 2014-11-29 19:12:10
    当一个 MDIForm 对象关闭时,QueryUnload 事件先在MDI 窗体发生,然后在所有 MDI 子窗体中发生。如果没有窗体取消 QueryUnload 事件,该 Unload 事件首先发生在所有其它窗体中,然后再发生在 MDI 窗体中。当一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 931
精华内容 372
关键字:

vba窗体初始化