标题: [原创] 宏:批处理在Word、Excel中的应用 [打印本页]
作者: cjiabing 时间: 2011-8-26 19:39 标题: 宏:批处理在Word、Excel中的应用
本帖最后由 cjiabing 于 2011-8-26 20:43 编辑
批处理在办公软件自动化处理方面作用很大,但许多人对此了解甚少,特地搜索一些此方面的内容供大家学习。
分楼层介绍:
一楼:论坛中使用批处理处理Word、Excel的帖子
二楼:宏的一些基础知识
三楼:微软Office关于宏的介绍
四楼:批处理办公自动化例子
五楼:如何使 Word 自动运行并运行一个宏
单纯使用批处理可能无法直接处理Word和Excel中的宏,但VB可以处理,而且批处理也可以编辑VB,或者通过第三方操作。所以,批处理在宏处理方面可以有所作为。本帖子之所以发在批处理区而非VB区正是基于此,主要目的是侧重于批处理在宏方面的应用。或者,有许多小白和我一样,对VB一无所知,只是想把VB装进批处理里面,直接使用批处理来处理宏,哈哈,有点多此一举,但很需要。希望有技术的人多开发几个命令行版的宏处理工具,那样我们这些不懂VB的就有福了。
以下是论坛中一些相关帖子:
批处理也autoit,自动操作word
Word、Excel文件转文本文件:doctotext_0.12.0
VBS对Office软件Word、Excel等的操作实例
VBS控制Excel常见方法
作者: cjiabing 时间: 2011-8-26 19:39
本帖最后由 cjiabing 于 2011-8-26 20:43 编辑
什么是宏
计算机科学里的宏是一种抽象的,根据一系列预定义的规则替换一定的文本模式。Excel 办公软件自动集成了“VBA”高级程序语言,用此语言编制出的程序就叫“宏”。使用“VBA”需要有一定的编程基础和耗费大量的时间,因此,绝大多数的使用者仅使用了Excel的一般制表功能,很少使用到“VBA”。
解释器或编译器在遇到宏时会自动进行这一模式替换。对于编译语言,宏展开在编译时发生,进行宏展的工具常被称为宏展开器。宏这一术语也常常被用于许多类似的环境中,它们是源自宏展开的概念,这包括键盘宏和宏语言。绝大多数情况下,使用“宏”这个词的使用暗示着将小命令或动作转化为一系列指令。
宏的用途在于自动化频繁使用的序列或者是获得一种更强大的抽象能力--但这常常是一回事。
计算机语言如C或汇编语言有简单的宏系统,由编译器或汇编器的预处理器实现。C的宏预处理器的工作只是简单的文本搜索和替换,使用附加的文本处理语言如M4,C 程序员可以获得更精巧的宏。
Lisp类语言如Common Lisp和Scheme有更精巧的宏系统: 宏的行为如同是函数对自身程序文本的变形,并且可以应用全部语言来表达这种变形。一个C宏可以定义一段语法的替换,然而一个Lisp的宏却可以控制一节代码的计算。获得了控制代码的执行顺序(见惰性计算和非限制函数)的能力,使得新创建的语法结构与语言内建的语法结构不可区分。例如,一种Lisp 方言有 cond 而没有if ,就可以使用宏由前者定义后者。Lisp 语法的去部主要扩展,比如面向对象的CLOS 系统,可以由宏来定义。
Word 宏功能介绍和使用
宏是一个批处理程序命令,正确地运用它可以提高工作效率。微软的office软件运行用户自己编写,叫VBA的脚本来增加其灵活性,进一步扩充它的能力。如完成一个一打开word文件同时要打开某个文件的功能,必须要自己编写一段称之为宏的脚本。具体做法是在“工具”菜单“宏”-“宏”弹出的对话框输入宏名,然后按“创建”按钮会打开visual basic编辑器,你就可以编程了,这个就是宏。学会它会有很多乐趣的。玩过街机模拟器的人肯定有体会,在格斗游戏中,用模拟器来录制宏,以实现一键放绝招。
简单点说就是批处理,但是要比批处理功能更强大.使你一个简单的操作,比如一个左键点击,就可以完成多项任务,很方便的. 比如我们从网上复制的网页内容粘贴到Word以后可能会不少空行,有的行距又很大,手工去除空行、改行距、进行页面设置等等较麻烦,如果你录制一个宏以后,你只要按一下你设定的快捷键,一切工作就自动完成了。另外,我们经常使用的一些功能也在不知不觉地使用宏,比如Word的稿纸功能实际上是已经设置好的“页眉和页脚”的一个宏。宏是一系列 Word 命令和指令,这些命令和指令组合在一起,形成了一个单独的命令,以实现任务执行的自动化。 所以, 如果在 Microsoft Word 中反复执行某项任务,可以使用宏自动执行该任务。
比如说你的电脑每天要监控并记录很多组的数据,而且这些数据是不断变化更新的(发/变电站记录表记等),这样你就需要做个宏来将服务器里这些数据定时转到一个或多个WORD文档里来,便于计算存档和打印.你的领导办公室在远一些的地方也可以通过网络来调用这个宏来将数据传到他的办公桌的电脑上.当你启动做好了的这个含有宏的文件的时候会弹出一个窗口问你是否起用宏.
为了让你具体地了解运用,下面举个例子:录制一个进行页面设置的宏。
你任意打开一个Word文档后用鼠标依次点击“工具”—“宏”—“录制新宏”,再点击“键盘”,在“请按新快捷键”内填入你想设定的快捷键(如Ctrl+1),再单击右边的“指定”按钮及“关闭”按钮,这时开始录制宏,屏幕上有一个工具条,有暂停(恢复)、结束按钮。现在你可以对打开的Word文档,像以前一样地进行页面设置,设置完以后你点一下工具条上的“结束”按钮,宏就录制好了。下次你要对一篇Word文档像录制宏时一样重新进行页面设置时,只要打开这篇Word,再按一下“Ctrl+1”(即您设定的快捷键),一切OK。
宏的一些典型应用
加速日常编辑和格式设置 .
组合多个命令,例如插入具有指定尺寸和边框、指定行数和列数的表格 .
使对话框中的选项更易于访问 .
自动执行一系列复杂的任务 .
Word 提供两种方法来创建宏:宏录制器和 Visual Basic 编辑器 。
微软Word和宏病毒
Visual Basic for Applications (VBA),是 Microsoft Office 里的一种编程语言. 但由上面的定义,它完全不是一种宏语言。然而,它的功能已经从中发展并最终替代了用户应用程序的宏思想,所以他被广泛地错误地称为是一种宏语言。
VBA 可以访问许多操作系统函数并支持文档打开时自动执行宏。这使得用这种语言写计算机病毒成为可能。1990年代中后期,宏病毒成为了最流行的计算机病毒类型之一。其它的包括宏语言的项目,故意从其宏语言中排除了一些功能(如:自动执行)以避免破坏程序。然而,这一特性在很多事务中受到欢迎。
作者: cjiabing 时间: 2011-8-26 19:39
本帖最后由 cjiabing 于 2011-8-26 20:54 编辑
微软Office关于宏的介绍:支持 / Excel / Excel 2003 帮助和操作方法 / 自动执行任务和可编程性
http://office.microsoft.com/zh-cn/excel-help/CH006252839.aspx
Excel 4.0 宏函数
文章 Microsoft Excel 4.0“宏函数帮助”文件包含 Excel 中所有 Excel 4.0 宏函数(XLM 宏)的参考信息。您可以从 Microsoft Office Online 下载“Excel 2000 帮助文件:运行 Excel 4.0 宏” 。 要点 此帮助文件只适用于 Microsoft...
Excel 中的自定义宏简介
文章 全部显示 全部隐藏 适用于 Microsoft Office Excel 2003 Microsoft Excel 2002 本文由 Microsoft Office Excel 2003 Programming Inside Out(《Microsoft Office Excel 2003 编程揭密》)一书的作者...
使宏能够运行
文章 当 Excel 中的宏安全级别设置为 “低” (不建议使用)时,宏可以直接运行而不给出提示。当宏安全级别设置为 “中” 时,Excel 会显示一个对话框,询问您是否要启用宏。当宏安全级别设置为 “高” (建议所有用户使用此宏安全设置)时,Excel 只允许运行经过数字签名或存储在 Excel 启动 (XLStart...
停止运行宏
文章 全部显示 全部隐藏 请执行下列操作之一: 如果要停止当前正在运行的 宏 (宏:可用于自动执行任务的一项或一组操作。可用 Visual Basic for Applications 编程语言录制宏。) ,请按 Esc,在“Microsoft Visual Basic”对话框中单击“结束”。 如果要防止在启动...
关于宏
文章 全部显示 全部隐藏 如果经常在 Microsoft Excel 中重复某项任务,那么可以用宏自动执行该任务。宏是一系列命令和 函数 (函数:函数是预先编写的公式,可以对一个或多个值执行运算,并返回一个或多个值。函数可以简化和缩短工作表中的公式,尤其在用公式执行很长或复杂的计算时。) ,存储于 Visual...
创建宏
文章 全部显示 全部隐藏 录制宏 将安全级设置为“中”或“低”。 操作方法 在“工具”菜单上,单击“选项”。 单击“安全性”选项卡。 在“宏安全性”之下,单击“宏安全性”。 单击“安全级”选项卡,再选择所要使用的安全级。 在“工具”菜单上,指向“宏”,再单击“录制新宏”。 在“宏名”框中,输入 宏 (宏:可用于自动执行任务的...
删除宏
文章 全部显示 全部隐藏 打开含有要删除的 宏 (宏:可用于自动执行任务的一项或一组操作。可用 Visual Basic for Applications 编程语言录制宏。) 的工作簿。 在“工具”菜单上,指向“宏”,再单击“宏”。 在“位置”列表中,单击“当前工作簿”。 在“宏名”框中,单击要删除的宏的名称。 单击“删除”。
宏疑难解答
文章 全部显示 全部隐藏 单击“刷新”按钮时,有消息显示对宏的更改将丢失 如果在“Visual Basic 编辑器”中更改了宏,又在“Microsoft 脚本编辑器”中更改了工作簿的副本,则会显示此消息。 若要保存对宏所做的更改,请执行下列操作: 单击“否”。 切换到“Visual Basic 编辑器”窗口。...
将宏模块复制到其他工作簿中
文章 全部显示 全部隐藏 将安全级设置为“中”。 操作方法 在“工具”菜单上,单击“选项”。 单击“安全性”选项卡。 在“宏安全性”之下,单击“宏安全性”。 单击“安全级”选项卡,再选择所要使用的安全级。 请打开包含要复制 模块 (模块:存储在一起作为一个命名单元的声明、语句和过程的集合。有两种类型的模块:标准模块和类模块。)...
编辑宏
文章 全部显示 全部隐藏 在编辑 宏 (宏:可用于自动执行任务的一项或一组操作。可用 Visual Basic for Applications 编程语言录制宏。) 之前,必须先熟悉 “Visual Basic 编辑器” (Visual Basic 编辑器:一种环境,用于编写新的 Visual Basic for...
运行宏
文章 全部显示 全部隐藏 运行宏 将安全级设置为“中”或“低”。 操作方法 在“工具”菜单上,单击“选项”。 单击“安全性”选项卡。 在“宏安全性”之下,单击“宏安全性”。 单击“安全级”选项卡,再选择所要使用的安全级。 请打开包含 宏 (宏:可用于自动执行任务的一项或一组操作。可用 Visual Basic...
作者: cjiabing 时间: 2011-8-26 19:39
本帖最后由 cjiabing 于 2011-8-26 20:31 编辑
下面介绍netbenton 的machwo.exe,很好用的工具。
复制代码
作者: cjiabing 时间: 2011-8-26 19:40
本帖最后由 cjiabing 于 2011-8-26 19:59 编辑
本文讨论了如何使 Word 自动运行并运行一个宏,需要个参数中使用的 Microsoft 基础类 (MFC) 库安装与 Microsoft Visual c + + 4.2 版。
回到顶端
更多信息您可以将本文中的代码复制到消息处理函数,MFC.cpp 文件中定义的事件。但是,代码的目的是为了说明使用 IDispatch 接口和 Msword 类型库中定义...您可以将本文中的代码复制到消息处理函数,MFC.cpp 文件中定义的事件。但是,代码的目的是为了说明使用 IDispatch 接口和 Msword 类型库中定义的成员函数的过程。主要优点来自于阅读和理解代码,以便您可以修改该的示例或自动发送到 Microsoft Word VBA 宏的参数从头开始编写代码。
本示例显示了两种方法可以将参数传递给 Word VBA 宏:
第一种方法调用"ThisDocument"对象的类模块中定义的宏。该宏的定义指定的参数。
第二种方法使用 Word 变量的对象。宏定义未指定任何参数 ; 但是,宏代码访问存储在文档变量的值。使用 Run 方法调用该宏。
注: 此方法不适用于受保护的文档。
回到顶端
分步示例
在 Microsoft Word 中创建一个新的文档,然后按 ALT + F11 可显示 Visual Basic 编辑器。
在 Word Visual Basic 宏编辑器"项目"框 (通常位于左上角的 Visual Basic 窗口),双击树节点的"ThisDocument"以显示其模块窗口。添加以下代码:
Public Sub testmacro(x As String)
MsgBox "First Method" & vbcr & x
End Sub
在插入菜单上单击插入新的模块并将下面的代码添加到模块的模块:
Sub GetSetVarVals()
For Each myVar In ActiveDocument.Variables
If myVar.Name = "VarVal" Then
ActiveDocument.Variables("VarVal").Delete
End If
Next myVar
ActiveDocument.Variables.Add Name:="VarVal", _
Value:=ActiveDocument.Variables("FullName").Value
' Retrieve the contents of the document variable.
MsgBox "Second method" & _
vbcr & ActiveDocument.Variables("VarVal").Value
End Sub
Sub DelVariables() 'Delete the variable "FullName".
For Each myVar In ActiveDocument.Variables
If myVar.Name = "FullName" Then
ActiveDocument.Variables("FullName").Delete
End If
Next myVar
End Sub
将文档另存为 C:\Test.doc。关闭文档并退出 Word。
请按照步骤 1 至 12 中,以下 Microsoft 知识库文章创建示例项目使用 IDispatch 接口和 MSWord 类型库中定义的成员函数的步骤操作:
178749 (http://support.microsoft.com/kb/178749/EN-US/ ) 如何创建自动化项目使用 MFC 和类型库
要创建在步骤 4 和步骤 5 中的父项目 178749 (http://support.microsoft.com/kb/178749/EN-US/ ) 的对话框中,添加"编辑框"控件从控件工具栏 (如果这是不可见的请用鼠标右键单击灰色区域 Visual Studio 的命令栏。从上下文弹出菜单选择"控件)。
此控件将显示该 ID 的 IDC_EDIT1 编辑属性对话框的常规选项卡页中。
在视图菜单上单击类向导 (或按 CTRL + W)。在 MFC 类向导对话框成员变量选项卡上选择 IDC_EDIT1,然后单击添加变量。为成员变量名中,键入 m_Argument (不带引号),然后单击确定。单击确定关闭类向导对话框。
AutoProjectDlg.cpp 文件顶部添加以下行:
#include "msword8.h" //For Word 2000, include msword9.h. For Word 2002, include msword.h
将下面的代码添加到 CAutoProjectDlg::OnRun() AutoProjectDlg.cpp 文件中:
UpdateData(TRUE); // Transfers data from edit box
// on opening dialog box
// to the member variable m_Argument.
// Convenient constants.
COleVariant covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND,
VT_ERROR);
// Objects.
_Application objWord;
Range objRange;
objWord.CreateDispatch("Word.Application");
objWord.SetVisible(TRUE);
Documents oDocs(objWord.GetDocuments()); // Use the Constructor
// for Documents.
_Document oDoc;
oDoc.AttachDispatch(oDocs.Open(COleVariant("C:\\Test.doc",VT_BSTR),
covFalse, //Confirm Conversions.
covFalse, // Not read only.
covTrue, // Add to recent documents.
covOptional, // PassWordDocument.
covOptional, // PassWordTemplate.
covFalse, // Revert.
covOptional, // WritePasswordDocument.
covOptional, // WritePasswordTemplate.
covOptional, // Format, e.g., WordOpenFormat.
covOptional, // New with Word 9 - Encoding
covOptional, // Visible - Ditto
covOptional, // New with Word 10 - OpenConflictDocument
covOptional, // Ditto - OpenAndRepair
(long) 0, // Ditto - DocumentDirection - Left to Right
covOptional // Ditto - NoEncodingDialog
)
);
// Here is code for the method that passes an argument to a Word
// VBA macro defined in the ThisDocument class. The macro specifies
// a string parameter. Such a macro won't appear in the document's
// macro list.
// The macro is not declared in the Word typelib, so the code
// retrieves the dispid at run time from the IDispatch interface
// for the Document object. It uses that dispid in the call to
// InvokeHelper.
OLECHAR FAR* szMember = OLESTR("testmacro");
DISPID dispid;
if(FAILED(oDoc.m_lpDispatch->GetIDsOfNames ( IID_NULL,
&szMember, //Function name.
1, //Number of functions.
LOCALE_SYSTEM_DEFAULT,
&dispid)))
{
AfxMessageBox("Unable to get dispID for testmacro");
}
COleVariant result;
UCHAR *parmStr = (BYTE *)( VTS_VARIANT );
COleVariant x;
x = COleVariant(m_Argument);
oDoc.InvokeHelper( dispid,
DISPATCH_METHOD | DISPATCH_PROPERTYGET,
VT_VARIANT,
(void *)&result,
parmStr,
&x);
// Here is code that passes an argument using Word variables.
// This method won't work on a protected document, because that
// won't let the user--in this case your MFC client--set
// variable values.
AfxMessageBox("Next, pass an argument using a Variable");
Variables oVariables = oDoc.GetVariables(); // Create Variables
// collection for current doc.
objWord.Run("DelVariables"); // Word Macro to purge the variable
// "FullName".
covOptional, covOptional, // Word 9 & Word 10 take
covOptional, covOptional, // up to 30 arguments
covOptional, covOptional, // in addition to Macro's name
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional);
VARIANT *v = new VARIANT; // Creating pointer to a VARIANT.
v->vt = VT_BSTR; // Variant type = VT_BSTR
v->bstrVal = m_Argument.AllocSysString(); //The string from Edit Box.
oVariables.Add("FullName", v); // "FullName" is the Word Variables
// item.
objWord.Run("GetSetVarVals"); // Word Macro to show the contents of
// "FullName".
covOptional, covOptional, // Word 9 & Word 10 take
covOptional, covOptional, // up to 30 arguments
covOptional, covOptional, // in addition to Macro's name
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional,
covOptional, covOptional,covOptional, covOptional);
delete v; // Release the memory block for the Variant.
objWord.Quit(covFalse, covOptional, covFalse);
// The parameters mean Save Changes, Original Format, RouteDocument.
您可能需要修改 CAutoProjectDlg::OnRun() 以指示文档 Test.doc 的文档正确的路径中的代码。在下面的行中引用该文档:
oDoc.AttachDispatch(oDocs.Open(
COleVariant("C:\\Test.doc",VT_BSTR)...
编译 VC + + 项目,然后运行它。
将出现该对话框。输入诸如"乔治华盛顿"(不带引号) 在编辑框中的字符串。
单击对话框中的运行。然后 Word 将显示"GetSetVarVals()"将显示为宏的消息框。在 MFC 编辑框中输入该参数已传递给 Word VBA 宏。
回到顶端
参考有关使用 MFC 的 Microsoft Word 自动化的详细信息请参阅 Microsoft 知识库中下面的文章:
178784 (http://suppo...有关使用 MFC 的 Microsoft Word 自动化的详细信息请参阅 Microsoft 知识库中下面的文章:
178784 (http://support.microsoft.com/kb/178784/EN-US/ ) 如何使用自动化打开并打印 Word 文档
180312 (http://support.microsoft.com/kb/180312/EN-US/ ) 如何使用自动化的 MFC 项目中设置打印机
有关自动化的 Office 应用程序的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
222101 (http://support.microsoft.com/kb/222101/EN-US/ ) 如何查找和使用 Office 对象模型文档
本文来自:如何使用自动化运行了参数的 Word 宏http://support.microsoft.com/kb/q183369/
作者: CUer 时间: 2011-8-26 19:49
BAT在哪里?这帖该发到VBS版吧?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |