ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

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

回复 488楼 yuanzhuping 的帖子

本帖已被收录到知识树中,索引项:开发帮助和教程
太感谢袁版了! 一般的例子中都不会出现这样的使用场景,所以看完后还是不知道该怎么写,看袁版的示例贴,效果绝对胜过啃什么VBA宝典!

TA的精华主题

TA的得分主题

发表于 2009-3-18 22:40 | 显示全部楼层

回复 161楼 yuanzhuping 的帖子

这个只能对一行只有一个单元格有内容进行判断,如果一行中有多个单元格包含内容,只想删除完全一样的行,请问袁版应该把这句改成怎么样才能实现呢?
If WorksheetFunction.CountIf(.Columns(1), .Cells(i, 1)) > 1 Then

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-19 07:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原帖由 ice_ksharp 于 2009-3-18 22:40 发表
这个只能对一行只有一个单元格有内容进行判断,如果一行中有多个单元格包含内容,只想删除完全一样的行,请问袁版应该把这句改成怎么样才能实现呢?
If WorksheetFunction.CountIf(.Columns(1), .Cells(i, 1)) > 1  ...

使用高级筛选,不重复数据。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-19 08:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

第7部分 菜单和工具栏

技巧86         自定义右键快捷菜单
       在工作表中创建自定义的右键快捷菜单替换Excel默认的右键快捷菜单,如下面的代码所示。
  1. #001  Sub Mycell()
  2. #002      With Application.CommandBars.Add("Mycell", msoBarPopup)
  3. #003          With .Controls.Add(Type:=msoControlButton)
  4. #004              .Caption = "会计凭证"
  5. #005              .FaceId = 9893
  6. #006          End With
  7. #007          With .Controls.Add(Type:=msoControlButton)
  8. #008              .Caption = "会计账簿"
  9. #009              .FaceId = 284
  10. #010          End With
  11. #011          With .Controls.Add(Type:=msoControlPopup)
  12. #012              .Caption = "会计报表"
  13. #013              With .Controls.Add(Type:=msoControlButton)
  14. #014                  .Caption = "月报"
  15. #015                  .FaceId = 9590
  16. #016              End With
  17. #017              With .Controls.Add(Type:=msoControlButton)
  18. #018                  .Caption = "季报"
  19. #019                  .FaceId = 9591
  20. #020              End With
  21. #021              With .Controls.Add(Type:=msoControlButton)
  22. #022                  .Caption = "年报"
  23. #023                  .FaceId = 9592
  24. #024              End With
  25. #025          End With
  26. #026          With .Controls.Add(Type:=msoControlButton)
  27. #027              .Caption = "凭证打印"
  28. #028              .FaceId = 9614
  29. #029              .BeginGroup = True
  30. #030          End With
  31. #031          With .Controls.Add(Type:=msoControlButton)
  32. #032              .Caption = "账簿打印"
  33. #033              .FaceId = 707
  34. #034          End With
  35. #035          With .Controls.Add(Type:=msoControlButton)
  36. #036              .Caption = "报表打印"
  37. #037              .FaceId = 986
  38. #038          End With
  39. #039      End With
  40. #040  End Sub
复制代码
代码解析:
       Mycell过程在Excel工作表中创建自定义的右键快捷菜单。
       第2行代码,使用Add方法添加名称为“Mycell”命令栏,设置“Mycell”命令栏的Position属性为msoBarPopup,使“Mycell”命令栏为快捷菜单。关于Position参数的MsoBarPosition常数请参阅技巧83 。
       第3行到第39行代码,使用Add方法在“Mycell”命令栏中添加菜单和菜单项,并设置其各项属性。
       为了让自定义右键快捷菜单替换Excel默认的右键快捷菜单,并且只在右键单击Sheet1工作表时显示,需要在Sheet1工作表的BeforeRightClick事件中写入下面的代码。
  1. #001  Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  2. #002      Application.CommandBars("Mycell").ShowPopup
  3. #003      Cancel = True
  4. #004  End Sub
复制代码
代码解析:
       工作表的BeforeRightClick事件过程,在右键单击工作表时,将“Mycell”命令栏作为右键快捷菜单,在当前光标位置显示。
       工作表BeforeRightClick事件语法如下:
Private Sub expression_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
       参数expression是必需的,Worksheet类型对象。
       参数Target 是可选的,右键单击发生时最靠近鼠标指针的单元格。
       参数Cancel是可选的,当事件发生时为False。如果在事件过程中将Cancel参数设为True,则该过程执行结束之后不进行默认的右键单击操作。
       第2行代码,使用ShowPopup方法将“Mycell”命令栏作为右键快捷菜单,在当前光标位置显示。
       ShowPopup方法的语法如下:
expression.ShowPopup(x, y)
       参数expression是必需的,返回一个CommandBar对象。
       参数x是可选的,快捷菜单所在位置的 x 坐标。如果省略此参数,将使用当前光标位置的x坐标。
       参数y是可选的,快捷菜单所在位置的y坐标。如果省略此参数,将使用当前光标位置的y坐标。
       当用鼠标右键单击工作表中任意单元格时激活BeforeRightClick事件,此事件先于默认的右键单击操作。在使用ShowPopup方法显示“Mycell”命令栏后,将Cancel参数设置为True,过程执行结束之后不进行默认的右键单击操作,Excel右键快捷菜单就不会显示。
       运行Mycell过程后,右键单击Sheet1工作表,在工作表中显示自定义右键快捷菜单,如图所示。
Snap1.jpg

[ 本帖最后由 yuanzhuping 于 2009-3-20 07:20 编辑 ]

技巧86 自定义右键快捷菜单.rar

8.72 KB, 下载次数: 1543

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-19 09:24 | 显示全部楼层

第7部分 菜单和工具栏

技巧87         使用右键菜单制作数据有效性
       在工作表中输入数据时可以使用自定义右键菜单制作数据有效性,如下面的代码所示。
  1. #001  Sub Mycell()
  2. #002      Dim arr As Variant
  3. #003      Dim i As Integer
  4. #004      Dim Mycell As CommandBar
  5. #005      On Error Resume Next
  6. #006      Application.CommandBars("Mycell").Delete
  7. #007      arr = Array("经理室", "办公室", "生技科", "财务科", "营业部")
  8. #008      Set Mycell = Application.CommandBars.Add("Mycell", 5)
  9. #009      For i = 0 To 4
  10. #010          With Mycell.Controls.Add(1)
  11. #011              .Caption = arr(i)
  12. #012              .OnAction = "MyOnAction"
  13. #013          End With
  14. #014      Next
  15. #015  End Sub
  16. #016  Sub MyOnAction()
  17. #017      ActiveCell = Application.CommandBars.ActionControl.Caption
  18. #018  End Sub
复制代码
代码解析:
       Mycell过程创建自定义的右键菜单,请参阅技巧86 。
       MyOnAction过程是点击自定义右键菜单所运行的过程,将所选右键菜单的名称写入活动单元格。
       为了使自定义的右键菜单在Sheet1工作表的特定区域中显示,需要在VBE中双击Sheet1表后写入下面的代码。
  1. #001  Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  2. #002      If Target.Column = 2 Then
  3. #003          Call Mycell
  4. #004          Application.CommandBars("Mycell").ShowPopup
  5. #005          Cancel = True
  6. #006      End If
  7. #007  End Sub
复制代码
代码解析:
       工作表的BeforeRightClick事件过程,在右键单击工作表时,将“Mycell”命令栏作为右键快捷菜单,在当前光标位置显示,请参阅技巧86 。
       在工作表的B列中点击右键结果如图所示。
Snap2.jpg

技巧87 使用右键菜单制作数据有效性.rar

8.33 KB, 下载次数: 1310

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-19 10:12 | 显示全部楼层

第7部分 菜单和工具栏

技巧88         禁用工作表右键菜单
       有时并不希望用户使用工作表中的右键菜单对工作表进行操作,那么可以使用下面的代码禁用工作表右键菜单。
  1. #001  Sub DisBar()
  2. #002      Dim myBar As CommandBar
  3. #003      For Each myBar In CommandBars
  4. #004          If myBar.Type = msoBarTypePopup Then
  5. #005              myBar.Enabled = False
  6. #006          End If
  7. #007      Next
  8. #008  End Sub
复制代码
代码解析:
       DisBar过程禁用工作表中所有的右键菜单。
       第3行代码使用For Each...Next 语句遍历CommandBars集合。CommandBars集合代表应用程序中所有的命令栏。
       第4行代码根据命令栏的Type属性判断命令栏是否为右键菜单。应用于 CommandBar对象的Type属性返回命令栏的类型,可以为表格所列的MsoBarType 常量之一。
Snap1.jpg
       第5行代码将CommandBars集合中右键快捷菜的Enabled属性设置为False,使之无效。
       运行DisBar过程将禁用工作表中所有的右键菜单,需要恢复时只需将其Enabled属性设置为True即可。

技巧88 禁用工作表右键菜单.rar

6.46 KB, 下载次数: 1147

TA的精华主题

TA的得分主题

发表于 2009-3-19 13:52 | 显示全部楼层
好东西啊,不知道整理完了没啊?

TA的精华主题

TA的得分主题

发表于 2009-3-19 15:09 | 显示全部楼层

记下,慢慢咀嚼

精华,绝对精华。且方法值得推广,好好收集一下。

TA的精华主题

TA的得分主题

发表于 2009-3-19 20:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

关于 禁用单元格拖放功能的一点问题

袁版主,您好:
   技巧10         禁用单元格拖放功能。我发现,单元格被禁用拖放功能后如果想复制该单元格所在的行到另外一个工作簿的某一行,粘贴功能被禁止。

   也就是说,单元格被禁用拖放功能后是不能进行改单元格所在行的复制和粘贴。

  请教,有什么方法可以鱼和熊掌兼得?

TA的精华主题

TA的得分主题

发表于 2009-3-19 22:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢楼主,提一个问题,在工作簿中当选定某一工作表时自定义菜单显现,而选定其他表自定义菜单隐藏的代码如何写
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-14 15:16 , Processed in 0.044795 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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