ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

怎样用开发语言在word中建宏?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2002-4-8 20:31 | 显示全部楼层
搞了半天,原来是VBA的窗口打开时,FindWindow函数就能找到,否则就找不到.那就换另一种方法吧 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Sub Command1_Click() Err.Clear On Error Resume Next Dim App As Word.Application Dim doc As Word.Document Set App = GetObject(, "Word.application") If Err.Number = 0 Then MsgBox "Word已经运行" Else Set App = New Word.Application Set doc = App.Documents.Add App.Visible = True Err.Clear End If End Sub FindWindow函数第一个参数是类名,可以用GetClassName函数得到.
[此贴子已经被惊叹不已于2002-4-8 20:31:01编辑过]

TA的精华主题

TA的得分主题

发表于 2002-4-8 16:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哈哈,lovesun兄,你真是命苦啊,老是遇到些稀奇古怪的问题,我重启后运行了数十次都没有问题,你也试试吧,再不行你只能只叹命苦了. [em06]

TA的精华主题

TA的得分主题

发表于 2002-4-8 16:06 | 显示全部楼层
重启机器试一下,我刚才没有引用Word9.0出错后,WinWnd也总是0,重启就行了. 我发现在VB中控制Office组件,如果出错的次数多了,运行结果就经常不正确,即使代码没有问题,一般重启都可以回复正常.

TA的精华主题

TA的得分主题

发表于 2002-4-8 15:32 | 显示全部楼层
这段代码运行很正常呀,你在WinWnd = FindWindow("OpusApp", "")后面加一行: Msgbox "WinWnd的值:" & WinWnd 看看WinWnd是不是总为0

TA的精华主题

TA的得分主题

发表于 2002-4-8 14:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没有不同,我刚在VB中运行没问题,我的是WIN2000 Server,我在Win98运行也没问题,我用的是Word2000.

TA的精华主题

TA的得分主题

发表于 2002-4-8 14:25 | 显示全部楼层
不会呀,你试试 Private Sub Command2_Click() WinWnd = FindWindow("OpusApp", "") If WinWnd = 0 Then MsgBox "Word没有运行" End If End Sub 我运行这段程序,有Word窗口就没反应,没有Word窗口就弹出对话框,很正常呀.

TA的精华主题

TA的得分主题

发表于 2002-4-8 10:44 | 显示全部楼层
1.将上次的例子改一下. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Sub Command1_Click() Dim App As Word.Application WinWnd = FindWindow("OpusApp", "") If WinWnd = 0 Then 'Word没有运行 Set App = New Word.Application Dim doc As Word.Document Set doc = App.Documents.Add Else 'Word已经被运行 Set App = GetObject(, "Word.Application") '将Word赋给对象变量 End If App.Visible = True With App.Templates("Normal.dot").VBProject.VBComponents("ThisDocument").CodeModule .DeleteLines 1, .CountOfLines '删除全部代码 .CreateEventProc "Open", "Document" .InsertLines 2, "Msgbox""打开文档就会自动运行." Me.Print "代码总行数:" & .CountOfLines Me.Print "第二行的内容为:" & .Lines(2, 1) Me.Print "事件代码所在行:" & .ProcBodyLine("Document_Open", vbext_pk_Proc) Me.Print "事件内代码总行数:" & .ProcCountLines("Document_Open", vbext_pk_Proc) Me.Print "第3行属于事件:" & .ProcOfLine(3, vbext_pk_Proc) Me.Print "事件名称所在行:" & .ProcStartLine("Document_Open", vbext_pk_Proc) Me.Print "通用声明的行数" & .CountOfDeclarationLines Me.Print "是否含有字符'Open':" & .Find("Open", 1, 1, 10, 20) .InsertLines 5, "'I Like MM" .InsertLines 6, "'I also like MM " .ReplaceLine 5, "'We all like MM" End With App.Templates("Normal.dot").Save '保存模板 App.Quit Set App = Nothing End Sub 2.看顶端的贴子

TA的精华主题

TA的得分主题

发表于 2002-4-7 14:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2002-4-5 18:12 | 显示全部楼层
我运行是没有问题的,不知你增加了什么代码,再强调一次就是要退出Word再进入. 当然,我给你的例子是示范了如何在VB中编写Word的宏代码而已,只是示范了如何操作的方法,并不代表在使用时要生搬硬套,为了简单及保证能正确运行,我先把所有代码删除再插入代码,在实际使用中不一定要这样做,可以用Find方法查找是否存在某些内容和根据已有代码所在的行和行数来设置插入点和插入的内容.比如可以先Find查找是否存在Document_Open事件,不存在就增加,存在就找到它所在行,修改和插入行.
[此贴子已经被惊叹不已于2002-4-5 18:12:01编辑过]

TA的精华主题

TA的得分主题

发表于 2002-4-5 17:16 | 显示全部楼层
1.那就不要保存那行了,关闭Word时,会自动保存Normal.dot的. 2.关闭的语句是放在AutoExec中的,也就是说Word启动时就已经把VBA窗口Show出来,并马上关闭,再也不能打开了.你退出Word再进入吧.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 15:33 , Processed in 0.041488 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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