如何在Delphi里面利用Word的VBA代码进行一些总结

2023-11-05


1、  生成VBA代码。Word本身具有很强的可扩展性,尤其是支持用户自定义功能,其实现
的主要方式就是通过VBA代码来实现的。在“工具->宏->Visual Basic编辑器”里面就可以看
到具体的宏代码,可以直接进行编辑。而且还可以使用录制宏的功能自动生成宏代码。方法是
选择“工具->宏->录制新宏”,然后执行自己想通过程序实现的功能,如存盘、打印等功能,
此时Word一边执行你要实现功能,一边将你的操作生成了一个宏,在实现功能后,可以选择
“工具->宏->VisualBasic编辑器”,查看生成的宏代码。

例如:我们要将文档中的“讨论”全部替换成“研讨”。
a.  点击“工具->宏->录制新宏”,直接点击确定,默认的宏保存到了Normal.dot系统公
用模板里面。
b.  点击“编辑->查找”,出现弹出对话框,输入查找和替换的字,点确定。进行替换。
c.  结束宏的录制,点击结束按钮。
d.  按F11或者“工具->宏->Visual Basic 编辑器”,查看宏代码。缺省查看Normal里面
的模块里面的NewMacros模块。
以下是生成的宏代码:
Sub Macro1()
'
' Macro1 Macro
' 宏在 2002-2-1 由 yzhshi 录制
'
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
       .Text = "讨论"
       .Replacement.Text = "研讨"
       .Forward = True
       .Wrap = wdFindContinue
       .Format = False
       .MatchCase = False
       .MatchWholeWord = False
       .MatchByte = True
       .MatchWildcards = False
       .MatchSoundsLike = False
       .MatchAllWordForms = False
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
End Sub
2、  精简宏代码。通常,生成的宏代码有很多语句对你要实现的功能来说都是多余的。我们要
做的就是如何找到我们需要的代码。此时我们查看具体的代码,剔除明显没有用途的代码,然后光
标停留在宏上面,按F5执行,看是否实现功能,逐步精简,得到最小代码。此步骤可参考Word的
VBA帮助来判断代码是否有用。

如上例,精简下来,剩下以下代码。
Sub Macro1()
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
       .Text = "讨论"
       .Replacement.Text = "研讨"
   End With
   Selection.Find.Execute Replace:=wdReplaceAll
End Sub

3、  转换成Delphi代码。这一步其实很简单,对于VBA代码,只需要在前面添加Word的句柄或者
文档的句柄或者文档的句柄.Application就可以直接操作了。
例:逐句翻译:(Word_Handle是Word的句柄)
(VB)     Selection.Find.ClearFormatting
(Delphi)  Word_Handle.Selection.Find.ClearFormatting;

(VB)     Selection.Find.Replacement.ClearFormatting
(Delphi)  Word_Handle.Selection.Find.Replacement.ClearFormatting;
以上两句简单添加上Word的句柄就可以了。

(VB)     With Selection.Find
             Text = "讨论"
             Replacement.Text = "研讨"
End With
(Delphi)  Word_Handle.Selection.Find.Text := '讨论';
 Word_Handle.Selection.Find.Replacement.Text := '研讨';
以上几句因为Delphi不支持Variant的With结构,所以分开写。同时转换成Delphi语法。

(VB)    Selection.Find.Execute Replace:=wdReplaceAll
(Delphi) Word_Handle.Selection.Find.Execute(Replace:=2);
上面一句存在一个小技巧,如何找到常量wdReplaceAll的数值为2?
这里有几个办法,
一:直接use Word2000或者word97单元,那么直接使用常量wdReplaceAll就可以了;
二:到Word2000.pas或者Word97.pas里面查找wdReplaceAll的数值;
三:直接使用VBA代码见wdReplaceAll的数值显示出来。办法是写一个小过程,然后执行,如下:
Sub ShowValue()
 MsgBox wdReplaceAll
End Sub

最后补充一下,很多关于Word的东西可以从Word的VBA帮助里面获得。具体文件在
?: Program files Microsoft Office Office10 2052(XP)下,VBAWD10.CHM,其他版本路径基本类似。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Delphi里面利用Word的VBA代码进行一些总结 的相关文章

  • VB:在 Adob​​e Illustrator、Photoshop 中分配给布尔属性

    在使用 VBA 自动化 Adob e Illustrator CS3 时 我发现分配一个布尔变量 to a 布尔属性结果总是分配 False Dim New Path As Illustrator PathItem Dim v As Boo
  • 在单元格更改时循环遍历一系列单元格,以将序列中的下一个数字显示为单元格的新值

    我了解如何循环范围 For Each cell In Range A1 A5 If condition Then End If Next 我知道 OnChange 事件 Private Sub Worksheet Change ByVal
  • 如何根据文本框值过滤列表框值

    我在用户窗体上有一个文本框和一个列表框 我想根据我在文本框中输入的值过滤列表框中的值 名为 TMP 的工作表具有值 我根据文本框更改事件对其进行过滤 但在将该值添加到列表框中时它 会自动退出 Private Sub Textbox1 Cha
  • 将 CSV 导入 Excel - 自动“文本到列”和“插入表格”

    我想在 Excel 2010 上打开 CSV 逗号分隔 文件并自动将文本转换为列 然后选择所有活动单元格并插入带标题的表格 是否可以在我的功能区中添加一个按钮来为我完成这一切 我经常使用不同大小的 CSV 文件 我发现每次手动执行此操作有点
  • 如何确保我的 IE 选项卡名称正确?

    我使用此代码从 Word VBA 获取 Internet Explorer 的实例 并从网页中抓取一些值 我循环遍历 4 个项目 以防万一 有时我不小心抓住了一个名为 Windows Explorer 的东西 我不知道那是什么 来抓住 In
  • 在 VBA 中从范围创建数组

    我遇到了一个看似基本的问题 但找不到任何资源来解决它 简而言之 我只想将一系列单元格 所有一列 的内容加载到数组中 我能够通过以下方式完成此任务 DirArray Array Range A1 Range A2 但由于某种原因 我无法以这种
  • 从命令行增加 Delphi XE 项目版本号

    我有一个 Delphi XE 项目 我试图在使用 MSBuild 构建它之前更改程序的版本号 版本号信息位于 DPROJ 文件中 但如果我更改这些值 版本号不会更改 我认为原因是当您在 IDE 中更改版本号时 Delphi 会将更改保存到
  • 检查工作表是否存在,如果不存在则创建-VBA [重复]

    这个问题在这里已经有答案了 我已经测试了许多代码 这些代码检查工作表是否存在 基于名称 如果不存在则创建一个 其中一些循环所有工作表 一些引用工作表 如果创建错误则意味着该工作表不存在 哪一种是最合适的 正统的 更快的方式来完成这个任务 目
  • Delphi 2010 控制闪烁

    我一直在从 XP 操作系统升级或迁移我们的软件 以便能够在 Windows 7 下编译和运行 我们的软件开始出现我们在 Windows XP 下没有注意到的问题 目前 我正在处理 TForm 上闪烁的用户定义控件 它似乎时不时地闪烁 但并非
  • VBA Excel 选择以字符开头的命名范围

    我在命名范围方面遇到了一些问题 我在不同的工作表上有多个命名范围 我想用VBA隐藏或显示所有这些范围 命名范围的示例 r1 name1 另一张纸上的第二个是r1 name2 因此 所有范围都以前面相同的代码开头 r1 我如何循环遍历以 r1
  • Excel VBA 多张表求和

    我正在尝试创建一个或多个函数 可以将每个客户的考勤卡每日工作时间相加 得出每天的总工作时间 每个客户在一个工作簿中都有自己的工作表 目前 我有一个函数可以确定与第一个客户一起使用的工作表 工作簿中的第三个工作表 Function First
  • 以高效的方式将字符串转换为十六进制

    我开发了以下函数将字符串转换为十六进制值 function StrToHex const S String String const HexDigits array 0 15 of Char 0123456789ABCDEF var I I
  • 使用 UnmanagedExports 包 [DllExport] 在 VBA 中调用 C# DLL 触发“找不到 DLL 入口点”错误

    我在用着罗伯特 吉塞克 http stackoverflow com users 35443 robert giesecke用于访问 Excel VBA 中的 c dll 的非托管导出包 我遵循了几个示例并继续收到运行时错误 453 在 m
  • SSIS-从 Sharepoint 下载 Excel 并将其加载到 SQL 数据库

    我目前遇到的情况是共享点网站上有一个 Excel 文件 我需要将该 Excel 文件加载到数据库中 Excel 文件有多个工作表 我尝试过以下方法 但运气为零 方法 1 我访问 sharepoint 站点并访问 库 选项卡 并选择使用资源管
  • Delphi RTTI,已发布的属性出现两次

    我想对属性使用属性 但这些属性偶尔会在继承的类中发生更改 这是一个示例代码 非常简化 TBaseClass class TObject private FFoo string published BaseAttirib hello prop
  • 将 VBA 字符串转换为双精度

    我正在使用非常基本的 VBA for word 编码来创建一个模板 该模板可以从 Windows 中的其他屏幕中提取数据 当它提取数字时 它们被格式化为字符串 我现在需要将字符串转换为双精度 以便对它们进行加 减 我一直在尝试一切 但似乎无
  • 如何使用VBA删除工作簿中的空白工作表?

    Sub delete Dim sh As Worksheet wb As String c As Range wb InputBox work book name Set sh Workbooks wb Sheets For Each Sh
  • Excel VBA 通过简单除法引发溢出错误

    Excel 2013 VBA 这段代码 Sub test On Error GoTo Err Dim p As Double p 362 100 2005 Exit Sub Err If Err Description lt gt And
  • 将单独的范围放入二维数组中

    我正在尝试获取大小的二维数组 x 3 填充 X只是工作表的大小 行数 并且有 3 列我感兴趣 例如 这些列彼此不靠近arr i 0 应从 AA 栏开始填写 arr i 1 应来自 K 列 并且arr i 2 需要来自 L 列 我尝试按以下方
  • Delphi错误数据集未处于插入或编辑模式

    客观的 单击 TRxDBCombo 上的按钮调用搜索框 从搜索框中选择记录时 结果将设置为 TComboEditBox 的字段值 并发布在 TRxMemoryData 数据集中 错误 第二次调用此函数时出现数据集未处于插入或编辑模式 TDB

随机推荐

  • 安装SAPTrex

    1 下载安装包2 安装过程3 启动Admin工具C usr sap T02 TRX02TREXAdmin bat4 保存后 SM59会有一个新的T连接生成5 进去tcode SRMO 转载于 https blog 51cto com jen
  • android adb install apk的安装流程

    目录 一 PackageManagerService启动流程 二 apk adb安装流程 一 简介 1 Android上应用安装可以分为以下几种方式 通过adb命令安装 adb 命令包括adb push install 用户下载的Apk 通
  • 后端代码审计——PHP函数及PHP危险函数

    文章目录 PHP函数 1 自定义函数 1 1 函数语言结构 1 2 函数传参 1 3 函数调用 1 3 1 函数调用过程 1 4 变量范围 1 4 1 局部变量 1 4 2 全局变量 1 5 参数传递 1 5 1 按值传参 1 5 2 默认
  • 【程序员的财富自由之路】停更说明...

    停更原因 一个月前我发表了 程序员的财富自由之路 开篇序这篇文章 承蒙CSDN博客编辑的厚爱 将该专栏推荐到了专栏首页显示 因此带来了很多网友的关注 写那篇文章的时候 我信心满满 但惭愧的是 一个多月过去了 我仍然没有更新过专栏文章 让很多
  • 央行数字货币开始崛起:DC/EP正在领跑全球

    2020年8月24日 国际清算银行 以下简称BIS 发表题为 央行数字货币崛起 驱动因素 方法和技术 的工作报告 报告认为 央行数字货币 以下简称CBDC 将极大改变人类未来的支付以及生活方式 在全球诸多经济体中 中国人民银行的数字货币DC
  • golang exec 标准错误输出有 error 但是 err 是 nil

    golang 的 exec 模块 有可能标准错误输出会有类似 ERROR Incorrect date and time argument 2021 11 16 13 52 10 0000 UTC 但是 err 确是 nil package
  • \r \n 和strcat 笔记

    r 回车 ASCII码13 r gt return n 换行 ASCII码10 n gt newline 在Windows中 r 回车 回到当前行的行首 而不会换到下一行 n 换行 换到当前位置的下一行 而不会回到行首 描述 C 库函数 c
  • 详解如何使用AWS完善架构框架改造云上架构

    对于大部分项目来说 上云后的重构才刚开始 因为很多企业在上云之初 只是简单的把从前在物理服务器上的业务放到云上 并没有针对云环境做优化 没有充分到利用云服务的优势 上云之后 你需要重构业务架构 以提升企业的IT能力 比如通过架构优化让你的业
  • python爬虫学习(十二)xpath解析爬取58二手房

    xpath解析 最常用且便捷高效的解析方式 通用性 1 实例化一个etree的对象 且需要将被解析的页面源码数据加载到该对象中 2 调用etree对象中的xpath方法结合这xpath表示式实现标签的定位和内容的捕获 环境的安装 1 pip
  • 计算机网络常见题目

    题目地址 https www nowcoder com exam interview TCP和UDP的区别 回答要有条理 记起来好记 是什么 TCP是传输控制协议 UDP是用户数据报协议 它们都是属于传输层的协议 为应用层提供服务 而且他们
  • SSM - Springboot - MyBatis-Plus 全栈体系(八)

    第二章 SpringFramework 四 SpringIoC 实践和应用 4 基于 配置类 方式管理 Bean 4 4 实验三 高级特性 Bean 注解细节 4 4 1 Bean 生成 BeanName 问题 Bean 注解源码 publ
  • vue脚手架项目搭建以及常见命令

    1 安装vue2脚手架 1 在cmd命令行中输入脚手架安装命令 2 全局安装vue脚手架 npm install g vue cli 或者指定版本 npm i vue cli 5 0 4 g 3 安装以后 输入 vue V 出现相应的版本号
  • 7-2 两个有序链表序列的交集(编程题)

    已知两个非降序链表序列S1与S2 设计函数构造出S1与S2的交集新链表S3 输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔 输出格式 在一行中输出两个输入序列的交集
  • Python很好,但招聘不需要?

    前言 可能主要原因在于 人人都认为python简单 所以很少人专注于Python所实现的业务场景 多数人仅仅停留在会用的层面 再加上对于很多大公司而言 是不会轻易改变公司使用多年的编程语言的 这会涉及到很大的成本 多年积累的代码和培养的人才
  • ubuntu系统安装hadoop

    Hadoop 分布式计算平台 核心是分布式文件系统HDFS ubantu下 安装jdk wget https repo huaweicloud com openjdk 18 0 1 1 openjdk 18 0 1 1 linux aarc
  • ABAP ALV自定义F4搜索帮助

    文章目录 前言 一 介绍 二 实现步骤 1 代码展示 2 效果如下 总结 前言 我们ALV选择自定义值的方法有下拉列表 搜索帮助等 ALV单元格下拉列表 历史博文 https blog csdn net JZYDDFZJ article d
  • Oracle中TRUNC函数使用说明

    一 TRUNC函数简单说明 RUNC函数用于对值进行截断 用法有两种 TRUNC NUMBER 表示截断数字 TRUNC date 表示截断日期 二 TRUNC NUMBER 表示截断数字 格式 TRUNC n1 n2 n1表示被截断的数字
  • PHP自学教程之PHP语法基础

    一 PHP5 4的基本语法格式 1 PHP注释与语法标识 1 单行注释 来源于C 的注释 来源于C语言的注释 2 多行注释 来源于C语言的注释 二 PHP5 4的变量与变量的数据类型 变量是由一个美元符 开头 后是一个标识符 标识字符串只字
  • 简单介绍.NET

    1 概要 如果对 NET体系有基础了解的小伙伴可以直接划走 这里主要是分享一些刚学C 编程的小伙伴一些基础知识 刚接触C 或者 NET的小伙伴会对一对专业词汇根本不理解或者不清楚这些东西的作用和关系 例如 NET Native C NET
  • 如何在Delphi里面利用Word的VBA代码进行一些总结

    1 生成VBA代码 Word本身具有很强的可扩展性 尤其是支持用户自定义功能 其实现 的主要方式就是通过VBA代码来实现的 在 工具 gt 宏 gt Visual Basic编辑器 里面就可以看 到具体的宏代码 可以直接进行编辑 而且还可以