Office
taller_2000
不积跬步,无以至千里;不积小流,无以成江海
展开
-
惊天秘闻-绕过安全设置悄悄导入VBA代码
`ThisWorkbook.Modules.Add` 可以在未启用【信任对VBA工程对象模型的访问】的情况下导入模块代码,并且新导入的模块属于`ThisWorkbook.VBProject.VBComponents`集合,是不是很神奇!原创 2024-01-27 14:30:12 · 410 阅读 · 0 评论 -
VBA定位文本框控件中光标位置
实例需求:用户窗体中有如下4个TextBox控件,TextBox1中已经有文字内容,点击【定位】按钮,统计TextBox1中段落数量,并定位TextBox1中光标位置(箭头处),如下图所示。原创 2023-04-01 01:04:54 · 2729 阅读 · 0 评论 -
Office VBA也能任性截图(屏幕任意区域截图)
Excel是否可以实现屏幕任意区域截图?听起来似乎有些不务正业,已经有那么多截图软件,并且微信、QQ等也都提供了截图功能,但是存在的就是合理的,借助强大的PowerShell就可以实现任意区域截图功能。原创 2023-04-01 01:05:37 · 3909 阅读 · 7 评论 -
如何为文件夹选择对话框指定缺省目录
想必大家都已经知道VBA中`Application.FileDialog(msoFileDialogFolderPicker).Show`可以实现目录选择对话框,本文解释另一种实现方式 -- Shell对话框。原创 2022-02-02 13:57:36 · 943 阅读 · 0 评论 -
快速判断文件是否存在
提到查找文件通常实现方法都是使用Dir函数,其实VBA中提供了返回指定文件长度(以字节为单位)的函数`FileLen`,利用这个函数也可以实现快速判断文件是否存在。原创 2022-02-02 13:55:54 · 965 阅读 · 0 评论 -
VBA之正则表达式(32)-- 提取指定规格
实例需求:按照指定规则从示例数据提取相应的规格,示例数据如下所示。A75432222新粉色M/160 – 提取规格为:MB43243333畅销黑色44 – 提取规格为:44C93119125 – 无规格方法1:Sub Demo1() Dim regExp As Object, regExpMHs As Object Set regExp = CreateObject("vbscript.regExp") regExp.Global = True regExp.P原创 2022-01-01 07:33:13 · 1024 阅读 · 0 评论 -
PowerPoint VBA中如何实现ThisPresentation
众所周知,在Excel VBA中有ThisWorkbook,在Word VBA中有ThisDocument,但是不知道为啥PowerPoint VBA并不提供ThisPresentation,对于加载宏工具来说,经常需要引用工具所在的Presentation对象,既然微软官方没有提供这个对象,那么咱们自己动手丰衣足食。原创 2022-01-01 07:30:51 · 902 阅读 · 0 评论 -
VBA之正则表达式(30)-- 提取机构代码
实例需求:提取A列示例数据行末的机构代码,如下图所示。示例数据:1.1MERRILLLYNCH INTERNATIONAL一般机构21.563.221.2中国工商银行股份有限公司-天弘添利债券型证券投资基金(LOF)基金35.965.371.3中国工商银行-诺安平衡证券投资基金基金9.001.341.4博时价值回报固定收益型养老金产品-中国银行股份有限公司一般机构16.532.471.5吴丰礼–224.3533.481.6国寿养老稳健5号固定收益型养老金产品-中国工商银行股份有限公司一般机原创 2021-12-08 00:24:30 · 830 阅读 · 0 评论 -
Win10微软拼音使用小鹤双拼方案
双拼作为一种快捷输入法,相当对于五笔来说,学习曲线不是那么陡峭,掌握起来相对容易,速度比全拼也很大提升。目前流行的双拼方案有多种:微软、搜狗、QQ、百度、谷歌、加加、紫光、小鹤等等,编码方案虽然略有区别,大家总体来说,差别不大,如果大家开始学习的就微软双拼,那么恭喜你,任何一个Windows电脑都可以用,不幸的是我是从小鹤双拼开始的,现在已经习惯了,不想再去切换到其他的双拼方案。如果使用百度、讯飞输入法,都已经内置了小鹤双拼,在这方面微软不够大度,只有自家的双拼方案,但是微软也没有把其他方案拒之门外,可以通原创 2021-12-02 02:55:24 · 6037 阅读 · 0 评论 -
如何使Office文档默认“不压缩文件中的图像”
Office 2007之后的版本提供压缩图片的功能,压缩文件中的图片,也减少文件的大小,占用更少的硬盘空间。在Office的选项设置中,也提供了“不压缩文件中的图像”的选项,非常不方便的时,新建文档的默认选项是压缩图像,也就是此选项未被勾选,只能在保存文件时再修改,确实有些麻烦。原创 2021-10-01 12:29:35 · 4625 阅读 · 6 评论 -
如何在被保护的Excel工作表中设置格式
实例需求:为了避免工作表内容被意外修改,因此设置了保护工作表,但是审核者需要将错误数据标记出来(例如设置单元格填充黄色)。这个需求引发了很多讨论,有的网友建议利用工作表事件代码,在审核者选中单元格时,解除该单元格的保护,这样可以设置单元格格式了,但是单元格内容可能会被意外修改,那么将需要进一步将单元格内容保存下来,然后再进行核对 … 太复杂了,有些头疼的其实,这真的是把简单问题复杂化了,设置保护工作表时,选中【设置单元格格式】,就直接解决了,完全不需要任何代码。效果如下图所示。...原创 2021-07-31 13:52:17 · 1178 阅读 · 0 评论 -
使用VBA在Office中输入特殊字符(续)
使用VBA在Office中输入特殊字符(3/3)感谢网友T_DC_Q提出的问题Function UTF16(sHex As String, Optional sMode As String = "HEX") As String Dim lByte, hByte, arrRes If Application.Hex2Dec(sHex) > &H10000 Then '&HDC00 = 56320, &HD800 = 55296原创 2021-05-03 12:42:36 · 3361 阅读 · 6 评论 -
VBA玩转系统剪贴板
前几天分享了博文《如何使用VBA将变量值拷贝到剪贴板?》,有的网友觉得使用的是旁门左道,今天来个根正苗红的Windows API解决方案。示例代码如下。Private Declare Function GlobalAlloc Lib _ "kernel32.dll" (ByVal wFlags As Long, _ ByVal dwBytes As Long) As LongPrivate Declare Func原创 2021-04-28 10:41:39 · 6170 阅读 · 5 评论 -
使用VBA读取UTF文件
文本文件可以有不同编码格式(ANSI,UTF8,UTF16 等等),文本编辑器可以自动识别相应的编码格式,例如下面两个文件内容完全相同,但是文件格式却不同。Sub ReadUTFTxt() Dim objStream, strData Set objStream = CreateObject("ADODB.Stream") objStream.Charset = "utf-8" objStream.Open objStream.LoadFromFile ("c:\原创 2021-04-27 13:07:38 · 5200 阅读 · 6 评论 -
如何使用VBA将变量值拷贝到剪贴板?
VBA中使用Excel拷贝和粘贴方法是很容易的,并且很多时候为了提升代码运行效率,应尽量避免在代码中使用拷贝和站,而应优先采用直接赋值的方法。不可否认,有些应用场景中仍然需要将某些内容放置到剪贴版中,这样可以供其他应用程序使用,如果内容已经在单元格中,那么直接使用Range对象的Copy方法就可以,但是如果内容是保存在变量中,是否可以直接放置到剪贴板,而不使用单元格做中转呢?答案是肯定的。原创 2021-04-26 11:34:38 · 7792 阅读 · 9 评论 -
VBA浮点运算错误怎么解?
常常听网友吐槽VBA这个老态龙钟的古董级别的编程语言太难用,出道多年这个是不争的事实,但是是否好用就另当别论了,钻石在切割之前,也不过是个普通的石头,只有慧眼识珠的人才能发现其价值。言归正传,今天来看看经常被吐槽的VBA浮点运算问题,VBA不是专门的科学计算语言,所以会产生浮点计算误差。原创 2021-03-15 04:35:38 · 1084 阅读 · 0 评论 -
如何判断动态数组为空?
VBA开发时经常用到数组,但是如何判断数组是否为空,这里说的“空”指的是,动态数组声明后,但是未赋值之前的状态,在【本地窗口】中显示如下。此时Dim语句已经执行完毕,可以认为已经完成了初始化,数组并无法直接使用,因此可以使用错误捕获的方式来实现检测这个状态。示例代码如下:Sub Demo() Dim arrTest() On Error Resume Next idx = LBound(arrTest) If Err.Number > 0 Then原创 2021-03-15 03:37:38 · 3679 阅读 · 0 评论 -
巧用VBA读取压缩包中文件信息
读取ZIP压缩包中的文件信息,通常思路需要先解压,然后再访问文件信息,其实大可不必这么麻烦,无需解压ZIP压缩包就可以提取相关信息。原创 2021-02-28 15:08:17 · 2091 阅读 · 4 评论 -
未公开的秘密花园--VBA中实现自动关闭消息框
显示消息框时,代码过程将处于暂停状态,如果用户没有进行选择,后续代码无法执行。如果消息框只是提醒用户,并不需要获取用户的输入,那么使用可以自动关闭的消息提示框,可以避免程序暂停挂起,无法继续执行的问题,但是VBA中提供的MsgBox无法实现自动关闭的功能。下面介绍一个未公开的Windows API函数,可以完美实现自动关闭的消息框。原创 2021-02-28 12:44:36 · 4934 阅读 · 2 评论 -
VBA之正则表达式(22)-- 组合数据拆分(2/2)
实例需求:规格数据保存在A1单元格,其中包含多行数据,每行数据都是有多个字段组合而成,现在需要将数据拆分为C列至H列的数据(假设第2行的标题行已经存在)。上一篇博客已经实现了数据拆分,但是正则模式表达式有些长,下面介绍一个更简单的方法。Sub Demo2() Dim regExp Set regExp = CreateObject("vbscript.regExp") regExp.Global = True regExp.Pattern = "[^一-龟\d\n]+"原创 2020-10-01 12:57:34 · 631 阅读 · 0 评论 -
VBA之正则表达式(21)-- 组合数据拆分(1/2)
实例需求:规格数据保存在A1单元格,其中包含多行数据,每行数据都是有多个字段组合而成,现在需要将数据拆分为C列至H列的数据(假设第2行的标题行已经存在)。原创 2020-10-01 12:57:07 · 718 阅读 · 4 评论 -
你真的会使用VBA的Select Case吗?
对于判断条件有多种分支的情况,使用Select Case替代If嵌套是个不错的选择,语法格式可以参考微软在线文档:[Select Case 语句](https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/select-case-statement?WT.mc_id=M365-MVP-33461)。似乎语法格式和用法都很简单,但是实际使用过程中可能就不是那回事了。下面示例来自于网友提问:下面的代码原创 2020-10-01 12:55:35 · 4847 阅读 · 0 评论 -
使用VBA在Office中输入特殊字符(3/3)
在博文《使用VBA在Office中输入特殊字符(1/3)》中我们知道月亮符号的字符代码为0x1F319。本文讲解如何计算特殊字符对应的Byte数组的值。原创 2020-09-08 15:10:30 · 3134 阅读 · 5 评论 -
使用VBA在Office中输入特殊字符(2/3)
在上一篇博文《使用VBA在Office中输入特殊字符(1/3)》中使用Byte数组实现了输入特殊字符,但是如果获得代表特殊字符的Byte数组的值呢?其实也不复杂。原创 2020-09-08 07:05:03 · 1454 阅读 · 0 评论 -
使用VBA在Office中输入特殊字符(1/3)
有个网友希望使用代码输入如下“月亮”字符,从截图中可以看出其字体是Segoe UI Symbol。如果文件中已经有这个字符,当然最简单的方法就是复制/粘贴,可以如果空白文档,那么该如何输入呢?是否可以使用VBA代码直接输入这个特殊字符?原创 2020-09-05 13:28:21 · 5875 阅读 · 3 评论