ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 移花接木,以假乱真!之Diy控件ControlTipText 属性

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-8-3 11:24 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:控件
我们先来看一下ControlTipText 属性:
ControlTipText指定当用户将鼠标指针放在控件上但未按下时所显示的文本。
其语法为:
object.ControlTipText [= String]
ControlTipText
属性的语法有以下几个成分:
成分
说明
object
必需。一个有效对象。
String
可选。当用户将鼠标指针放在控件上时所显示的文本。
ControlTipText
属性可为用户提供有关当前运行的窗体中某一控件的提示。该属性可在设计时间设定,但仅在运行时间由控件显示。
ControlTipText
的默认值为空字符串。此时,该控件将无任何提示。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-3 11:27 | 显示全部楼层
一、让给工作表中的控件具备类似ControlTipText 属性ControlTipText
属性可为用户提供有关当前运行的窗体中某一控件的提示,但是遗憾的是,这个属性在工作表中却无法使用。这个大家可以自行求证。
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:25:29

Private Sub Worksheet_Activate()
    Sheet1.CommandButton1.ControlTipText = "大家好"
End Sub

这段代码会提示出错,因为工作表控件不支持此属性。
难道就没有办法了吗?
回答是肯定的,我们可以借助一个文本框,配合控件的鼠标移动事件来完成。
在工作表中,通过控件工具箱,添加一个按钮以及一个文本框。为了以假乱真,将文本框的底色与传统的ControlTipText显示风格一致。选中文本框,将文本框的几个属性进行修改:
1、文本框背景:背景色设定为浅黄色,即BACKCOLOR设定为&H00C0FFFF&
2、文本框大小:设定自动大小,即AutoSize设定为True
3、文本框可视:默认为不可见,即Visible 设定为False
4、将文本框置顶:选中文本框,右键,叠放次序-置于顶层!
OK,这此步骤完成之后,我们就开始写代码了。
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:25:28

Private Sub CommandButton1_LostFocus()
    TextBox1.Visible = False

End Sub
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:25:28

Private Sub CommandButton1_MouseMove(ByVal Button As Integer , ByVal Shift As Integer , ByVal X As Single , ByVal Y As Single )
    Dim
Cb
    Set
Cb = CommandButton1    '为了下面书写简便,用CB代替 CommandButton1
    If X < 2 Or Y < 2 Or X > Cb.Width - 2 Or Y > Cb.Height - 2 Then TextBox1.Visible = False: Exit Sub     '当鼠标即将离开控件时,将文本框隐藏
    With TextBox1
        .Value = "工作表中控件也能显示ControlTipText"    '在此设定需要显示的信息

        .BringToFront    '前置
        .AutoSize = True     '让文本框大小自动适应显示信息
        .Top = Y + Cb.Top + 15    '根据鼠标位置,设定文本框的显示位置(15是鼠标指针的大致高度)
        .Left = X + Cb.Left + 5    '以确保文本框跟着鼠标移动(15是鼠标指针的大致高度,5是鼠标指针的大致宽度)
        .Visible = True     '让文本框可见
    End With
End Sub

将这两段代码,插入到工作表的代码区,退出设计模式,将鼠标移动到按钮上面,是不是OK了?是的,就这么简单。
楼下有附件,你可以打开附件测试。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-3 11:29 | 显示全部楼层
二、让窗体中的控件能够多行显示ControlTipText
ControlTipText属性虽然可以在窗体中某一控件所应用,但是,它并不具备自动断行功能,一旦需要显示的内容过多时,那将特别别扭。
大家可以自行求证:
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:28:40

Private Sub UserForm_Initialize()
    CommandButton1.ControlTipText = "ControlTipText属性虽然可以在窗体中应用" & vbLf & "但是,它并不具备断行功能," & Chr(13) & Chr(10) & "一旦需要显示的内容过多时" & vbLf & "那将特别别扭!" & vbLf & vbLf & "DIY 的就是最好的!"
End Sub

老朽尝试过试图修改,但是始终找不着北。没有办法,老朽就只好自己动手,Diy打造控件的ControlTipText。
其实方法也和前面一样,只是对文本框增加了允许多行显示的属性,即.MultiLine = True。
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:28:40

Private Sub CommandButton1_MouseMove(ByVal Button As Integer , ByVal Shift As Integer , ByVal X As Single , ByVal Y As Single )
    Dim
Cb
    Set
Cb = CommandButton1
    If
X < 2 Or Y < 2 Or X > Cb.Width - 2 Or Y > Cb.Height - 2 Then TextBox1.Visible = False: Exit Sub
    With TextBox1
        .AutoSize = True

        .Value = "ControlTipText属性虽然可以在窗体中应用" & vbLf & "但是,它并不具备断行功能," & Chr(13) & Chr(10) & "一旦需要显示的内容过多时" & vbLf & "那将特别别扭!" & vbLf & vbLf & "DIY 的就是最好的!"
        .MultiLine = True

        .Top = Y + Cb.Top + 15
        .Left = X + Cb.Left + 5
        .Visible = True
        .Enabled = False
    End With
End Sub

比一比,看一看,两者的效果。
不过默认显示ControlTipText时不受窗体大小限制,而是能够自动调整在屏幕上的显示位置。而使用窗体文本框来显示提示信息则受到窗体尺寸的限制,我们只能通过一定的代码来调整文本框的显示位置,而不能再是一成不变的跟在鼠标后面,另外还要在设定显示信息时设置好显示文本的长度。
修订代码如下:

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-3 11:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
窗体中的代码:
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:28:40

Private Sub CommandButton1_Click()
    MsgBox TextBox1
End
Sub
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:28:40

Private Sub CommandButton1_MouseMove(ByVal Button As Integer , ByVal Shift As Integer , ByVal X As Single , ByVal Y As Single )
    Dim
Cb
    Set
Cb = CommandButton1
    If
X < 2 Or Y < 2 Or X > Cb.Width - 2 Or Y > Cb.Height - 2 Then TextBox1.Visible = False: Exit Sub
    With TextBox1
        .AutoSize = True

        .Value = "ControlTipText属性虽然可以在窗体中应用" & vbLf & "但是,它并不具备断行功能," & Chr(13) & Chr(10) & "一旦需要显示的内容过多时" & vbLf & "那将特别别扭!" & vbLf & vbLf & "DIY 的就是最好的!"
        .MultiLine = True

        .Top = Y + Cb.Top + 15
        If
.Top + .Height > Me.Height - 22 Then .Top = Me.Height - .Height - 22
        .Left = X + Cb.Left + 5
        If
.Left + .Width > Me.Width - 6 Then .Left = Me.Width - .Width - 6
        .Visible = True

        .Enabled = False
    End With
End Sub
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:28:40

Private Sub UserForm_Initialize()
    CommandButton1.ControlTipText = "ControlTipText属性虽然可以在窗体中应用" & vbLf & "但是,它并不具备断行功能," & Chr(13) & Chr(10) & "一旦需要显示的内容过多时" & vbLf & "那将特别别扭!" & vbLf & vbLf & "DIY 的就是最好的!"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-3 11:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
工作表中的代码 
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:25:28

Private Sub CommandButton1_Click()
    UserForm1.Show 0
End
Sub
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:25:28

Private Sub CommandButton1_LostFocus()
    TextBox1.Visible = False

End Sub
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-8-3 上午 11:25:28

Private Sub CommandButton1_MouseMove(ByVal Button As Integer , ByVal Shift As Integer , ByVal X As Single , ByVal Y As Single )
    Dim
Cb
    Set
Cb = CommandButton1    '为了下面书写简便,用CB代替 CommandButton1
    If X < 2 Or Y < 2 Or X > Cb.Width - 2 Or Y > Cb.Height - 2 Then TextBox1.Visible = False: Exit Sub     '当鼠标即将离开控件时,将文本框隐藏
    With TextBox1
        .Value = "工作表中控件也能显示ControlTipText"    '在此设定需要显示的信息

        .BringToFront    '前置
        .AutoSize = True     '让文本框大小自动适应显示信息
        .Top = Y + Cb.Top + 15    '根据鼠标位置,设定文本框的显示位置(15是鼠标指针的大致高度)
        .Left = X + Cb.Left + 5    '以确保文本框跟着鼠标移动(15是鼠标指针的大致高度,5是鼠标指针的大致宽度)
        .Visible = True     '让文本框可见
    End With
End Sub
DIY控件ControlTipText.rar (11.37 KB, 下载次数: 467) 这是一个完整的附件

TA的精华主题

TA的得分主题

发表于 2009-8-3 15:31 | 显示全部楼层
老朽兄很好的帖子怎么没人顶呢?可能大家觉得没有“DIY 你的VBE对话框”那个强贴实用价值高吧

TA的精华主题

TA的得分主题

发表于 2009-8-3 21:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-3 21:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢分享,收下学习

TA的精华主题

TA的得分主题

发表于 2009-8-11 21:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-9-25 16:05 | 显示全部楼层
能在sheet, 或者slide 里面同样能够达到tip的效果确实很赞
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-4 16:27 , Processed in 0.058213 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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