ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA冷门方法整理&不完全研究

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-12 23:04 | 显示全部楼层
非常感谢楼主分享

TA的精华主题

TA的得分主题

发表于 2022-10-13 11:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-10-13 11:58 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-2 15:57 | 显示全部楼层
13. 避开设置信任中心任对VBA工程对象模型的访问,导入模块
    好像论坛没有对这个的讨论,说明基本没有需求,就当知道一下吧,简单至一句:
  
  1. Modules.Add.InsertFile "your path" & "\your file full name."
复制代码

    可以导入.bas文件,也可以导入自己保存在.txt里的代码。
    注意:如果有多个打开的工作簿,有可能会导入到其他工作簿中,前面加一句"目标工作簿.activate"可以指哪打哪

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-2 19:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不错,标记一下。

TA的精华主题

TA的得分主题

发表于 2024-2-2 20:35 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-3 09:48 | 显示全部楼层
对13项的补充说明:
1、用modules("模块名").delete可以删除相应模块,同样不需要信任中心设置;
2、手工创建的模块或者常规方法插入的模块(菜单->文件->导入文件,或者用import),不在modules()集合内,所以无法用modules("模块名").delete删除,但用insertfile导入的模块可以;
3、modules("模块名1").name="模块2"可以对模块改名,限制同第2条;
4、modules("模块名").insertfile "path\filename" 可以在现有模块内插入文件,不会覆盖原有内容,限制同第2条;
5、导入的文件(bas,txt等)如果有Attribute VB_Name = "模块名",则不需要再重新命名,导入时的模块名自动变成这个,如果第4项导入的文件内含有这句,则会将现有模块的名称改掉。

思考:为什么常规方法创建或导入的标准模块都不在modules()集合内,而insertfile方式导入的标准模块都在集合内,即便文件保存重新打开后仍然如此,如有高手指教,当感激不尽。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-3 10:03 | 显示全部楼层
14.简化版选择器,甚至可以代替简单的字典功能
     基本没看到有人使用的Switch()函数,功能简单,选项不多时挺方便:
  1. s = InputBox("Pls enter ""a"" or ""b"" or ""c""")
  2. MsgBox "you're " & Switch(s = "a", "animal", s = "b", "beast", s = "c", "Chinese")
复制代码

当然返回的结果不一定必须是字符串,也可以是对象,不详述,如下:
  1. Switch(s = "a", UserForm1, s = "b", UserForm2, s = "c", UserForm3).Show
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-5 13:37 | 显示全部楼层
15.RemoveDuplicates去重复方法使用变量数组
录制宏结果:
ActiveSheet.Range("$A$1:$D$12").RemoveDuplicates Columns:=Array(1, 2, 4), Header:=xlNo
将array替换为变量数组后:
arr = Array(1, 2, 4)
ActiveSheet.Range("$A$1:$D$12").RemoveDuplicates Columns:=arr, Header:=xlNo
运行失败,测试很多方法都无法使用变量数组,最终找到解决方法如下:
arr = Array(1, 2, 4)
ActiveSheet.Range("$A$1:$D$12").RemoveDuplicates Columns:=(arr), Header:=xlNo
就是在语句里面的数组变量外面加括号,原因不明

TA的精华主题

TA的得分主题

发表于 2024-2-6 08:31 | 显示全部楼层
大灰狼1976 发表于 2024-2-5 13:37
15.RemoveDuplicates去重复方法使用变量数组
录制宏结果:
ActiveSheet.Range("$A$1:$D$12").RemoveDupli ...

这个变量数组的用法看上去怪怪的,以前只看到Array用法。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 10:39 , Processed in 0.043672 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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