ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-5-6 00:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

求教

本帖已被收录到知识树中,索引项:开发帮助和教程
很不好意思,还要麻烦老师,不好意思了,请教:
1、ListView1控制运行后的列宽调整是哪个属性控制的?
2、能否实现,第一列不能调整,其它都能调整?
3、使第一例不能编辑?
万分感谢!

[ 本帖最后由 ayu330602 于 2009-5-6 00:14 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-6 07:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 ayu330602 于 2009-5-6 00:04 发表
很不好意思,还要麻烦老师,不好意思了,请教:
1、ListView1控制运行后的列宽调整是哪个属性控制的?
2、能否实现,第一列不能调整,其它都能调整?
3、使第一例不能编辑?
万分感谢!

ListView控件的列宽调整用Width属性,如第一列:ListView1.ColumnHeaders(1).Width = 100
将ListView控件的LabelEdit属性设置为lvwManual,标签不能编辑。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-6 07:29 | 显示全部楼层

第8部分 控件与用户窗体

技巧138         屏蔽窗体标题栏的关闭按钮
       使用API函数可以屏蔽窗体标题栏的关闭按钮,如下面的代码所示。
  1. #001  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. #002  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
  3. #003  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  4. #004  Private Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long
  5. #005  Private Const GWL_STYLE = (-16)
  6. #006  Private Const WS_SYSMENU = &H80000
  7. #007  Private Hwnd As Long
  8. #008  Private Sub UserForm_Initialize()
  9. #009      Dim Istype As Long
  10. #010      Hwnd = FindWindow("ThunderDFrame", Me.Caption)
  11. #011      Istype = GetWindowLong(Hwnd, GWL_STYLE)
  12. #012      Istype = Istype And Not WS_SYSMENU
  13. #013      SetWindowLong Hwnd, GWL_STYLE, Istype
  14. #014      DrawMenuBar Hwnd
  15. #015  End Sub
复制代码
代码解析:
       第1行到第7行代码是API函数声明。
       第8行到第15行代码是窗体的Initialize事件,当窗体显示时屏蔽窗体标题栏的关闭按钮。
       窗体运行后,屏蔽窗体上的关闭按钮,只能使用按钮关闭窗体,如图所示。
       Snap1.jpg

技巧138 屏蔽窗体标题栏的关闭按钮.rar

10.62 KB, 下载次数: 889

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-6 07:47 | 显示全部楼层

第8部分 控件与用户窗体

技巧139         无标题栏和边框的窗体
       如果希望制作无标题栏和边框的窗体,那么可以使用API函数。
       在VBE窗口中单击菜单“插入”→“用户窗体”,双击窗体,在其代码窗口中输入下面的代码:
  1. #001  Private Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long
  2. #002  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
  3. #003  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  4. #004  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  5. #005  Private Const GWL_STYLE As Long = (-16)
  6. #006  Private Const GWL_EXSTYLE = (-20)
  7. #007  Private Const WS_CAPTION As Long = &HC00000
  8. #008  Private Const WS_EX_DLGMODALFRAME = &H1&
  9. #009  Private Sub UserForm_Initialize()
  10. #010      Dim IStyle As Long
  11. #011      Dim Hwnd As Long
  12. #012      If Val(Application.Version) < 9 Then
  13. #013          Hwnd = FindWindow("ThunderXFrame", Me.Caption)
  14. #014      Else
  15. #015          Hwnd = FindWindow("ThunderDFrame", Me.Caption)
  16. #016      End If
  17. #017      IStyle = GetWindowLong(Hwnd, GWL_STYLE)
  18. #018      IStyle = IStyle And Not WS_CAPTION
  19. #019      SetWindowLong Hwnd, GWL_STYLE, IStyle
  20. #020      DrawMenuBar Hwnd
  21. #021      IStyle = GetWindowLong(Hwnd, GWL_EXSTYLE) And Not WS_EX_DLGMODALFRAME
  22. #022      SetWindowLong Hwnd, GWL_EXSTYLE, IStyle
  23. #023  End Sub
  24. #024  Private Sub UserForm_Click()
  25. #025      Unload Me
  26. #026  End Sub
复制代码
代码解析:
       窗体初始化时使用API函数去除其标题栏和边框。
       第1行到第8行代码,API函数的声明。
       第12行到第16行代码,获取窗口句柄。
       第17行到第20行代码,去除窗体标题栏。
       第21、22行代码,去除窗体边框。
       第24行到第26行代码,窗体的单击事件,单击窗体后关闭该窗体。
       窗体运行后如图所示,单击后关闭该窗体。
       Snap3.jpg

技巧139 无标题栏和边框的窗体.rar

9.45 KB, 下载次数: 1006

TA的精华主题

TA的得分主题

发表于 2009-5-6 08:07 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-6 08:11 | 显示全部楼层

第8部分 控件与用户窗体

技巧140         制作年月选择窗体
       在工作表中需要输入日期时,可以使用日期时间控件(Microsoft Date and Time Picker Control 6.0,简称DTP控件),请参阅技巧116 。但有时只需要输入年份和月份,使用DTP控件选择月份并不方便,此时可以使用文本框结合微调框做一个年月选择窗体供用户输入年份和月份。
       步骤1,在VBE窗口中单击菜单“插入”→“用户窗体”,将窗体的Caption属性设置为“请选择年月”。
       步骤2,在窗体上添加一个框架控件和两个命令按纽控件。在框架控件中添加两个文本框控件和两个SpinButton控件,并把命令按纽的Caption属性分别设置为“确定”和“取消”。
       步骤3,调整好控件位置,双击窗体写入下面的代码。
  1. #001  Private Sub UserForm_Initialize()
  2. #002      SpinButton1.Value = Year(Date)
  3. #003      SpinButton2.Value = Month(Date)
  4. #004      TextBox1.Text = Year(Date) & "年"
  5. #005      TextBox2.Text = Month(Date) & "月份"
  6. #006  End Sub
  7. #007  Private Sub SpinButton1_Change()
  8. #008      TextBox1.Text = SpinButton1.Value & "年"
  9. #009  End Sub
  10. #010  Private Sub SpinButton2_Change()
  11. #011      With SpinButton2
  12. #012          Select Case .Value
  13. #013              Case 1 To 12
  14. #014                  TextBox2.Text = .Value & "月份"
  15. #015              Case Is > 12
  16. #016                  TextBox1.Text = Left(TextBox1.Text, 4) + 1 & "年"
  17. #017                  .Value = 1
  18. #018              Case Is < 1
  19. #019                  TextBox1.Text = Left(TextBox1.Text, 4) - 1 & "年"
  20. #020                  .Value = 12
  21. #021          End Select
  22. #022      End With
  23. #023  End Sub
  24. #024  Private Sub CommandButton1_Click()
  25. #025      Sheet1.Range("A65536").End(xlUp).Offset(1) = TextBox1.Text & TextBox2.Text
  26. #026  End Sub
  27. #027  Private Sub CommandButton2_Click()
  28. #028      Unload Me
  29. #029  End Sub
复制代码
代码解析:
       第1行到第6行代码,窗体的初始化事件,在窗体加载时设置文本框和微调框的初始值。
       第2行代码,设置微调框1的初始值为当前年份。Year函数返回年份的整数,语法如下:
       Year(date)
       参数date是必需的,可以是任何能够表示日期的Variant、数值表达式、字符串表达式或它们的组合。
       第3行代码,设置微调框2的初始值为当前月份。Mont函数返回值为1到12之间的整数,表示一年中的某月,语法如下:
       Month(date)
       参数date与Year函数的参数date相同。
       第4行代码,设置文本框1显示的文本为当前年份。
       第5行代码,设置文本框2显示的文本为当前月份。
       第7行到第9行代码,微调框1的Change事件过程。当单击微调框1数值调节钮的向上键或向下键调节年份时,文本框1显示的年份等于调节后的年份。
       第10行到第23行代码,微调框2的Change事件过程。当单击微调框2数值调节钮的向上键或向下键调节月份时,文本框2显示的月份等于调节后的月份。如果是一年以内的调节,只调节文本框2显示的月份,否则还需要调节文本框1显示的年份。
       第25行代码,“确定”按钮的单击过程,将选择好的年月写入工作表中。
       第28行代码,使用Unload 语句卸载窗体。
       运行窗体后效果如图所示。
       Snap4.jpg

技巧140 制作年月选择窗体.rar

11.85 KB, 下载次数: 1097

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-5-6 08:24 | 显示全部楼层

第8部分 控件与用户窗体

技巧141         自定义窗体中的鼠标指针类型
       使用对象的MousePointer属性可以自定义鼠标掠过窗体控件时的指针类型,如下面的代码所示。
  1. #001  Private Sub UserForm_Initialize()
  2. #002      With Me.TextBox1
  3. #003          .MousePointer = 99
  4. #004          .MouseIcon = LoadPicture(ThisWorkbook.Path & "\myMouse.ico")
  5. #005      End With
  6. #006  End Sub
复制代码
代码解析:
       当用户把鼠标放到窗体的文本框上时,所显示的鼠标指针的类型为自定义图标。
       第3行代码设置文本框的MousePointer属性。MousePointer属性指定当用户把鼠标放到特定对象上时,所显示鼠标指针的类型,语法如下:
       object.MousePointer [= fmMousePointer]
       参数object是必需的,一个有效对象。
        参数fmMousePointer是可选的,所需鼠标指针的形状。fmMousePointer的设置值如表格所示。
       Snap5.jpg
       Snap7.jpg
       第3行代码将文本框的MousePointer属性设置为99,使用由MouseIcon属性指定的自定义图标。MouseIcon属性为对象指定一个自定义的图标,语法如下:
       object.MouseIcon = LoadPicture( pathname )
       参数object是必需的,一个有效的对象。
       参数pathname是必需的,指定包含自定义图标的文件的路径和文件名。
       设置后的鼠标指针的形状如图所示。
       Snap9.jpg

技巧141 自定义窗体中的鼠标指针类型.rar

9.71 KB, 下载次数: 836

TA的精华主题

TA的得分主题

发表于 2009-5-6 10:53 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-6 11:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-5-6 16:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
版主之利害,                                                         
强,顶!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 03:36 , Processed in 0.040122 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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