精华内容
下载资源
问答
  • 目录 ActiveX控件 Excel中常用的ActiveX控件 编辑ActiveX控件 通过代码访问ActiveX控件 工作表中窗体(表单)控件和...使用方法为:在“开发工具”选项卡中“控件”组的“插入”按钮中单击需要插入的控件,然后...

    目录

    ActiveX控件

    Excel中常用的ActiveX控件

    编辑ActiveX控件

    通过代码访问ActiveX控件

    工作表中窗体(表单)控件和ActiveX控件的区别


    ActiveX控件

        ActiveX控件是自动化组件对象,该对象可通过嵌入的方式添加至其他应用程序中,因而可以在Excel中添加ActiveX控件至工作表中。
        一般地,ActiveX控件只要在系统中注册后,就可供Excel使用。使用方法为:在“开发工具”选项卡中“控件”组的“插入”按钮中单击需要插入的控件,然后在工作表中单击鼠标左键,并向右下角移动鼠标形成一个矩形框,再释放鼠标左键,即可添加一个与矩形框大小相同的ActiveX控件。

    Excel中常用的ActiveX控件

        控件名称

        CodeName

        说明/用途

    按钮

    CommandButton

    用以触发某个程序的执行

    标签

    Label

    显示指定的文本,也可以当作按钮触发程序

    文本框

    TextBox

    显示指定的文本,可以进行输入

    列表框

    ListBox

    以列表形式显示各个选项

    复合框/组合框

    ComboBox

    可输入的并带有列表的下拉框

    复选框

    CheckBox

    可以切换选择及未选择两种状态

    单选框

    OptionButton

    在同一组中仅允许一个单选框被选中

    滚动条

    ScrollBar

    在指定的数字范围内变化的滚动条

    微调按钮

    SpinButtou

    成对的两个按钮,可调节数值,每次变化默认为1

    图像

    Image

    可以导入图片等

    切换按钮

    ToggleButton

    在按下及弹起两个状态中切换的按钮

    日期选择控件

    DTPicker

    组合框与日历控件的结合

    编辑ActiveX控件

        当插入ActiveX控件后,Excel即进入设计模式。在该模式下,“开发工具”选项卡下“控件”组的“设计模式”呈被按下的状态。

         在设计模式下,开发者可以对ActiveX控件的大小和位置进行手动调整,也可以手动修改控件的属性。

    通过代码访问ActiveX控件

        添加至工作表中的ActiveX控件可以直接作为工作表的子对象进行访问,如在工作表Sheet1中添加了一个按钮控件CornmandButton1,则可以直接使用以下语句访问该按钮:

    Sheet1.CommandButton1

    在该工作表的代码窗口中写入代码时,可以直接使用控件的名称进行访问。

    工作表中窗体(表单)控件和ActiveX控件的区别

        在Excel工作表中内置了一些控件,称为窗体控件或表单控件。与ActiveX控件不同的是,由于可供修改的属性以及事件较少,自由度不如ActiveX控件,因而功能不如ActiveX控件强大。但是此类控件使用起来更方便,当需求不高的时候可以直接使用此类控件。
     

    展开全文
  • 本章主要内容:按钮控件,标签控件,单选按钮控件,微调按钮控件,设计测试系统,小结。

    上一篇:【VBA(十一):使用VBA数组】【认识数组+数组应用案例+小结】

    按钮控件

    命令按钮
    在这里插入图片描述
    了解属性

    在这里插入图片描述

    输入输出按钮名字

    代码
    在这里插入图片描述
    效果图
    在这里插入图片描述

    设置点击效果

    选中sheet1-设置事件-输入代码
    在这里插入图片描述效果图(点击开始,就会在C1单元格中显示100)
    在这里插入图片描述

    标签控件

    用来观看,不能更改
    在这里插入图片描述
    了解属性
    在这里插入图片描述

    单选按钮控件

    用来做调查问卷
    在这里插入图片描述
    了解属性
    在这里插入图片描述
    GroupName相同即为一组选项(单选选项)

    设置返回值和弹窗

    属性中有返回值
    代码
    在这里插入图片描述

    效果图
    在这里插入图片描述

    微调按钮控件

    在这里插入图片描述
    有两种形态
    在这里插入图片描述

    属性
    在这里插入图片描述

    改变事件

    代码
    在这里插入图片描述
    在这里插入图片描述
    按按钮改变A1单元格中的数字
    在这里插入图片描述

    设计随堂测试

    原数据
    在这里插入图片描述
    代码
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    效果图(自制考试题系统)

    在这里插入图片描述

    小结

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    CommandButton 按钮
    OptionButton 单选按钮
    Label 标签
    SpinButton 微调按钮

    下一篇:【VBA(十三):窗体与控件】【窗体+控件+小结】

    展开全文
  • 【Excel VBA控件应用(1)-文本框

    千次阅读 2020-03-16 22:05:50
    用户在使用文本框输入数据时,往往希望可以限制输入数据的类型,例如,只允许输入数字,但是文本框的现有属性无法直接实现这样的要求。此时可以在文本框的KeyPress事件过程和Change事件过程中编写代码来判断输入的...

    12.1 限制文本框的输入

    用户在使用文本框输入数据时,往往希望可以限制输入数据的类型,例如,只允许输入数字,但是文本框的现有属性无法直接实现这样的要求。此时可以在文本框的KeyPress事件过程和Change事件过程中编写代码来判断输入的字符类型。只允许输入数字字符和一个"-"号、一个"."号,示例代码如下。

     Private Sub txtDemo_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)
         Select Case KeyANSI'判断参数的值
             Case Asc("0") To Asc("9")
             Case Asc("-")
                 If InStr(1, Me.txtDemo.Text, "-") > 0 Or _
                     Me.txtDemo.SelStart > 0 Then
                     KeyANSI = 0
                 End If
             Case Asc(".")
                 If InStr(1, Me.txtDemo.Text, ".") > 0 Then
                     KeyANSI = 0
                 End If
             Case Else
                 KeyANSI = 0
         End Select
     End Sub

    当用户按下一个ANSI键时触发KeyPress事件。

    KeyPress事件的语法格式如下。

     Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)

    其中,Object是必需的,代表一个有效的对象。

    参数KeyANSI是可选的,其值为整数型,代表标准的ANSI键代码。

    第3行代码利用Asc函数将字符串转换为字符代码。

    第4~8行用来判断字符"-",只能在文本框第1位输入单个"-"。如果键盘输入的是"-",先使用InStr函数判断文本框中是否存在"-",如果InStr函数的返回值大于0,说明文本框已存在"-"。接下来使用文本框的SelStart属性来检测插入点,如果文本框SelStart的属性值大于0,说明插入点不是第1个。

    将KeyANSI参数值设置为0,取消键盘输入。

    第5行代码中的Me表示当前窗体,txtDemo是窗体中文本框的名称,如下图所示。文本框的Text属性返回当前文本框中的字符串。

     

    但是以上代码无法禁止中文字符的输入和粘贴。利用文本框的Change事件可以解决此问题,示例代码如下。

     Private Sub txtDemo_Change()
         Dim i As Integer
         Dim strEntry As String
         With txtDemo
             For i = 1 To Len(.Text)'逐个提起文本框中的字符进行判断
                 strEntry = Mid(.Text, i, 1)
                 Select Case strEntry
                     Case ".", "-", "0" To "9"
                     Case Else
                         .Text = Replace(.Text, strEntry, "")
                 End Select
             Next i
         End With
     End Sub

    第10行代码使用Replace函数将非法输入字符替换成空字符串。当替换文本框的字符时,会触发Change事件。

    增加Change事件过程后,在文本框中只能输入数字和一个"."以及在第一位输入一个"-"。

    12.2 自动换行的文本框

    当使用文本框显示一段很长的文本时,需要将文本框设置成多行显示,否则文本内容只能在一行中显示,此时应设置文本框的WordWrap属性和MultiLine属性,示例代码如下。

     Private Sub UserForm_Initialize()
         With Me.txtDemo
             .WordWrap = True
             .MultiLine = True
             .Text = "文本框是一个灵活的控件,受下列属性的影响:Text、" _
                 & "MultiLine、WordWrap和AutoSize。" & vbCrLf _
                 & "Text 包含显示在文本框中的文本。" & Chr(10) _
                 & "MultiLine 控制文本框是单行还是多行显示文本。" _
                 & "换行字符用于标识在何处结束一行并开始新的一行。" _
                 & "如果 MultiLine 的值为False,则文本将被截断," _
                 & "而不会换行。如果文本的长度大于文本框的宽度," _
                 & "WordWrap允许文本框根据其宽度自动换行。" & Chr(10) _
                 & "如果不使用 WordWrap,当文本框在文本中遇到换行字符时," _
                 & "开始一个新行。如果关闭WordWrap,TextBox中可以有不能" _
                 & "完全适合其宽度的文本行。文本框根据该宽度,显示宽度以" _
                 & "内的文本部分,截断宽度以外的那部分文本。只有当" _
                 & "MultiLine为True时,WordWrap才起作用。" & Chr(10) _
                 & "AutoSize 控制是否调节文本框的大小,以便显示所有文本。" _
                 & "当文本框使用AutoSize 时,文本框的宽度按照文本框中的" _
                 & "文字量以及显示该文本的字体大小收缩或扩大。"
         End With
     End Sub

    第3行代码设置文本框的WordWrap属性为True。

    WordWrap属性指定控件的内容在行末是否自动换行。设置为True,文本将自动换行;设置为False,文本不换行。

    第4行代码设置文本框的MultiLine属性为True。

    MultiLine属性指定控件能否接受和显示多行文本。设置为True,支持多行显示文本。

    如果将文本框的MultiLine属性设置为False,则文本框的所有字符都合并为一行,包括非打印字符(如回车符和换行符)。

    注:对于同时支持这两个属性的控件,当MultiLine属性设置为False时,WordWrap属性将被忽略。

    当需要强制换行时,可以在文本中插入vbCrLf进行换行。

    运行结果如下。

     

    12.3 自动选择文本框内容

    如果希望文本框获得焦点时能自动选中其内容,可以在MouseUp事件和Enter事件中设置文本框的SelLength属性,示例代码如下。

     Private Sub txtDemo_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
         If Button = 2 Then'被释放的是否为鼠标右键
             With txtDemo
                 .SelStart = 0
                 .SelLength = Len(.Text)
             End With
         End If
     End Sub
     Private Sub txtDemo_Enter()
         txtDemo.SelStart = 0
         txtDemo.SelLength = Len(txtDemo.Text)
     End Sub

    第1~8行代码为文本框的MouseUp事件过程,在文本框中右击时自动选中文本框中的内容。

    按下鼠标右键时触发控件的MouseDown事件,释放鼠标时触发控件的MouseUp事件,其语法格式如下。

     Private Sub object_MouseUp( ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)

    MouseDownMouseUp 事件的语法包含以下成分:

    成分说明
    object必需。一个有效的对象。
    index必需。发生特定事件的多页和 TabStrip 中的页索引或标签索引。
    Button必需。标识引起该事件的鼠标按键的整数值。
    Shift必需。规定 Shift、Ctrl 和 Alt 的状态。
    X, Y必需。窗体、框架或页的位置的横坐标与纵坐标,以磅为单位,分别从左边和顶边开始测量。

    参数Button是必需的,标识引起该事件的鼠标按键值,如下表所示。

    Button 的设置如下:

    常量说明
    fmButtonLeft1按下左键。
    fmButtonRight2按下右键。
    fmButtonMiddle4按下中键。

    Shift 的设置如下:

    说明
    1按下 Shift。
    2按下 Ctrl。
    3同时按下 Shift 和 Ctrl。
    4按下 Alt。
    5同时按下 Alt 和 Shift。
    6同时按下 Alt 和 Ctrl。
    7同时按下 Alt 、Shift 和 Ctrl。

    第3~6行代码设置文本框的SelStart属性为0,SelLength属性为文本框中字符串的长度。

    SelStart属性指定选中文本的起点,如果没有选中的文本,则指定插入点。

    SelLength属性指定文本框或组合框中的文本被选中的字符数。

    对于SelLength和SelStart,其默认值均为0,设置值的有效范围是从0到组合框或文本框编辑区中的全部字符的长度。

    第9~12行代码为文本框的Enter事件过程,在文本框实际接收焦点前自动选中文本框中的内容。

    展开全文
  • 1 窗体 form 1.1创建窗体 form (默认名:userform) 和插入模块一样,插入用户窗体即可 1.2 如何运行/显示 窗体? 1.2.1 显示窗体的代码方法 ...据说,单写一句 userform1.show 也... form1.show '显示窗体 (必须...

    前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 的确定时,会关闭窗体呢?暂时还没查到原因
    展开全文
  • 我学到现在才发现控件分类不是我开始以为的 表单控件 传统表单控件 ActiveX控件(activeX并不能直接用到窗体,和窗体的事件也略有不同,比如getfoucs,窗体里是enter等) 窗体 窗体控件 代码设置优先级更高,...
  • 上次在PPT中用VBA编制了一个计时器,实现了倒计时功能,但是我觉得这个计时器不够酷炫,如果采用7段数码管显示数字,那就够COOL了。为了实现这个功能,我把任务进行了分解,今天先完成第一步,如何用VBA实现7段...
  • vba点击开始按钮 在控件中变化显示数字 点击停止不再变化 ,并显示获得的数字
  • → Val("22.3") 转成数字 → Left("Alex", 3) 左边3个字符 → Mid("Alex", 1, 2) 索引1开始,长度为2的字符 → Right("Alex.exe", 3) 右边3个字符 → Asc("A") 返回一个 Integer,代表字符串...
  • VBA研究】显示GIF动态图片

    千次阅读 2016-12-26 11:41:00
    一个小需求,要求输入某个数字显示一个鼓掌的动态图片。Excel是无法显示动态图片的,不过可以用浏览器控件显示动态图片。有两种方式,一是插入窗体,在窗体中插入浏览器控件;二是直接插入控件到工作表,然后控制...
  • VBA中的spreadsheet方法和属性列表各种属性 各种属性 Spreadsheet.XMLData 字符串类型的属性,可用来获得或设置XML格式的电子表格内容。 Spreadsheet.Range 该方法接受一个区域引用(例如A1:B2或A:B),返回一个Range...
  • 本窗体演示了VBA Treeview的一些功能。大多数选项可以在运行和更新 Treeview 属性时更改。在 Treeview 运行时更改 紫色 复选框将导致清除并重新创建 Treeview。 1.2 按钮说明 按钮标题 项 描述 ...
  • VBA学习笔记1-VBA集合Collection

    千次阅读 2019-12-28 14:08:43
    VBA集合Collection创建集合集合常用属性和方法添加集合大小读取集合特定元素内容集合删除办法 创建集合 Dim c As New Collection 集合常用属性和方法 添加 语法:Collection.Add (item,key,before,after) item:...
  • PPT+VBA实现计时(倒计时)展示

    千次阅读 2020-12-13 20:22:22
    对于程序员来说,第一反应是写个小软件全屏显示,但实际上PPT+VBA做起来也很简单,下面简单介绍一下步骤: 1、新建一个PPT文件,点击PPT软件的菜单“文件”——》“选项”,弹出的窗口左侧列表选择“自定义功能区”...
  • 这一节包含关于 MSHFlexGrid 的控件常数的信息。注意这些常数也应用到 MSFlexGrid,除非有不同地注解。 AddModeSettings 属性 (MSHFlexGrid) 常数 值 描述 flexNoAddNew 0 当前单元不在最
  • 大家好,我们今日继续讲解VBA代码解决方案的第96讲内容:利用类模块完成多个控件的统一相应。为了说明类模块的作用,我们先设计一个场景,我们在TextBox1、TextBox2、TextBox3中输入完数据后,利用文本框的Change...
  • VBA常用技巧

    2014-12-21 16:39:28
    131-1 使用Listview控件显示数据列表 12 131-2 在Listview控件中使用复选框 12 131-3 调整Listview控件的行距 12 131-4 在Listview控件中排序 12 131-5 Listview控件的图标设置 12 技巧132 调用非模式窗体 12 技巧...
  • 下面是一个输入日期的窗体,输入起止日期并进行检查,输入用8位数字,这样输入比较快,输入后用DateSerial转换成日期格式(DateSerial是个很有意思的函数,其功能是将参数年月日转换成一个有效的日期。虽然要求输入...
  • 一个数字表达式,指定要显示的按钮的类型,要使用的图标样式,默认按钮的标识以及消息框的形式。如果留空,则按钮的默认值为0。 title - 可选参数。 显示在对话框的标题栏中的字符串表达式。 如果标题留空,应用程序...
  • 题记:非常期间,希望大家静下心,多学习有用的知识,多提高自己的水平和能力,这才是正道。适当节制自我的各种欲望,谁都...今日内容是和大家分享VBA编程中常用的 “积木”过程代码,这些内容大多是取至我编写的“VB...
  • excel vba 移动方向键 excel vba 怎么移动方向键 ,执行该语句之后,相当于我按了方向键,选定了隔壁的单元格 授之以鱼: 模拟左方向键: Application.Sendkeys "{LEFT}" 右方向键: Application.Sendkeys "{RIGHT...
  • 问题:想做出延时执行的效果,同时还显示了经过的时间 1 简洁版代码 代码 Sub test200e() time0 = Timer() For i = 1 To 10 time1 = Timer() Debug.Print i Do Worksheets("sheet4").Labels("la...
  • 1.选择上方(变量图表显示),设置为如下图。变量下限为0,对应图标1(蓝色按钮,ICO文件内命名为1);变量上限为1,对应图标2(红色按钮,ICO文件内命名为2)。初始值为0,即程序开始运行,显示为图标1。 2.选择...
  • 直接上代码在sheet1里面,顺便修改sheet1为Sht1 Sub Image_Change() Dim x%, y%, w%, h%, iPath$ With ActiveSheet.Shapes.Range(Array("图片")) x = .Left '记录坐标点 y = .Top '记录坐标点 ...
  • 来吧 带你玩转 Excel VBA
  • EXCEL VBA文本框内容显示为日期格式

    千次阅读 2010-07-15 23:13:00
    我在EXCEL单元格里的是日期格式,但是要显示到文本框里时就变成数字了。 我要文本框内容也显示为日期格式应该怎么办?    Range("A1").Text 就是日期格式的。
  • Vba菜鸟教程

    万次阅读 多人点赞 2020-05-02 18:21:15
    文章目录Vba菜鸟教程编辑器宏vba基本语法运算符变量语句简写语句sub语句调用语句退出语句分支语句循环语句判断语句公式与函数在单元格输入公式利用单元格公式返回值调用工作表函数利用vba函数自定义函数操作对象操作...
  • VBA知识:Like运算符详解

    万次阅读 2019-09-06 13:36:42
    此时,当用户在文本框中输入文本,单击“确定“按钮后,如果输入的是以字符F或字符W开头并以“in excelperfect”结尾的句子,将显示“输入正确”消息框,否则将显示“输入错误”的消息框。  
  • VBA编程技巧大全

    2013-08-05 09:03:19
    131-1 使用Listview控件显示数据列表 314 131-2 在Listview控件中使用复选框 317 131-3 调整Listview控件的行距 319 131-4 在Listview控件中排序 322 131-5 Listview控件的图标设置 323 技巧132 调用非模式窗体 326 ...
  • Excel VBA编程

    万次阅读 多人点赞 2019-04-11 16:45:51
    文章目录如何创建VBAVBA语法规则声明变量给变量赋值让变量存储的数据参与运算关于声明变量的其他知识变量的作用域特殊的变量——数组声明多维数组声明动态数组其他创建数组的方法数组函数利用UBound求数组的最大索引...
  • 鼠标停在控件上就显示提示信息

    千次阅读 2011-10-21 14:49:59
    鼠标停在控件上就显示提示信息  toolTip1.SetToolTip(textBox1, "输入您的账号,为不超过20位的字符,数字,汉字(一个代表2位)");

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,242
精华内容 496
关键字:

vba显示数字控件