搜GOOGLE一个晚上了 关于巨集的问题

Home Home
引用 | 编辑 qoo98756
2011-06-30 07:26
楼主
推文 x0
小弟不才

最近在改一个程式

关于Word巨集的 如何能让巨集做 ..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 ebolaman
2011-06-30 08:42
1楼
  
不管是巨集(Macros)的模组(.bas)还是文件的模组

只要加入 Sub main 即可,接着用 Sub main 去呼叫你想要的 程序或函数即可


Tips : 在 Word 2003 里面,点工具列右键 >> Visual Basic 这样编辑会比较快


复制程式
Sub main()

  MsgBox "testing"

End Sub

你可以再详细描述一点

献花 x0
引用 | 编辑 qoo98756
2011-06-30 21:22
2楼
  
抱歉 我还是不太懂...

能不能请您帮小弟做一个范本 借我参考...

Sub main()

  MsgBox "testing"

End Sub

这串程式 我要直接贴我的巨集放在?

还有 我VB是想做成一个按键 然后启动 我的巨集

抱歉 问题有点多... 有请高手包我解答 我会很感激你的...

献花 x0
引用 | 编辑 ebolaman
2011-07-01 00:04
3楼
  
啊啊,抱歉,我误会了你的意思

我以为你是在说 Word 里面的巨集




因为程式都必须要 "程序进入点",所以如果你的程式没有 表单(Form) 之类的东西

只剩模组的话,就要在模组里面加一个 主程序 Sub main 来当作起始点

就像 C++ Console的 由 int main() 来起始一样



你遇到的是这个吧





只要加入 Sub main() 即可解决,找一个空白的地方贴上即可





范例程式码 (只有一个 .bas ,在此模组 .bas 中):
复制程式
Option Explicit

Public Sub main()

  Dim d As Double
  
    d = calc_factorial(5)
    
    MsgBox d '计算 5! = 5*4*3*2*1

End Sub

Public Function calc_factorial(ByRef max As Double) As Double

  Dim d As Double
  
    calc_factorial = 1
    For d = 2 To max
      calc_factorial = calc_factorial * d
    Next d

End Function




但是你的意思是不是要做出一个 程式(有表单,互动式的那种)

那么就要加入一个表单,用表单的程序来呼叫 .bas 里面的函数才行了


专门在 Word 上执行的巨集有些到 VB 都无法执行,大概只能用一些单纯资料转换的函数了

献花 x1
引用 | 编辑 qoo98756
2011-07-01 06:08
4楼
  
下面是引用 ebolaman 于 2011-07-01 00:04 发表的 : 到引言文
啊啊,抱歉,我误会了你的意思
我以为你是在说 Word 里面的巨集



因为程式都必须要 "程序进入点",所以如果你的程式没有 表单(Form) 之类的东西
.......

谢谢你 抱歉欧

我vb6还不是很熟= =

我是想做成这种



按GO!就执行我的.bas

尽量说简单一点 我大脑有点转不太过来 拍谢= =

献花 x0
引用 | 编辑 ebolaman
2011-07-01 09:13
5楼
  
恩,这样就要用表单来设计了

我试做了一个 VB6 专案 : Run macros



可以以特定 巨集名称 批次执行大量 Word 文件,请参考

但是你将 NewMacros 从 Word 抽取出来了吧,其实不需要那个模组

将 巨集 直接储存在 Word 文件里面 即可从 外部执行




底下附的档案解压缩后,到 [Program] 找已经编译的程式 Run macros.exe

可以将 [VB6 Project]\[Documents] Test\testing.doc  这个我做的测试文件拖曳到 程式里面 试试看





由于巨集包含在 testing.doc 里面,因此只需要特定的巨集名称就能执行大量的 文件

唯一的缺点是 巨集名称是固定的 (底下的程式设定为 macro1 ) ,我有看到其他人能取得 文件内 巨集的程式码

但我刚刚测试,他说不允许用外部程式编辑,我可能能力不足,也只好作罢



VB6 专案在 [VB6 Project] 内,可以自行编辑


要注意,里面的三个模组都是程式本身自行使用的,并非抽取出来的巨集

核心程式码: (位于 mod_macros 模组)

复制程式
Public Sub run_macros_prebuild()
  
  On Error GoTo Err1
  
  Set objapp = CreateObject("Word.Application")
  
  With objapp
    .Visible = set_appvisible
  End With
  
  appstatus = 1

Exit Sub
Err1:

  MsgBox "发生未知错误,无法建立 Word 元件 " & vbNewLine & Err.Description

End Sub

Public Sub run_macro(ByRef name As String, ByRef dir As String, ByRef outputdir As String)
  
    If appstatus = 0 Then run_macros_prebuild
  
  On Error GoTo Err1
  
  With objapp
    .Documents.Open FileName:=dir
    
    .Run name 'Run macros
    
      With objapp.ActiveDocument.Content.Find
        'Add something here
      End With
    
    .ActiveDocument.SaveAs force_dir(Replace(outputdir, "%Appdir%", App.Path)) & get_filename(dir)
    .Documents.Close
    
  End With

Exit Sub
Err1:

  MsgBox "发生未知错误 " & vbNewLine & Err.Description

End Sub


最主要的程式码是这一行,建立 Word 的元件

Set objapp = CreateObject("Word.Application")


接着就能用 objapp 去控制 Word 的周遭环境
举凡 开启档案、关闭档案、控制 Word视窗、控制文件内容等 都能以 objapp 的成员来控制

可以上网搜寻 Word.Application, VB 控制 Word 等关键词来找更详细的文章





另外我参考的一些网页 (也附在 [VB6 Project]\[References]\Word.Application.txt ):


http://tw.knowledge.yahoo.com/question/question?qid=1508050802551

http://phorum.study-area.org/index.php?topic=34203.0

http://tw.knowledge.yahoo.com/question/question?qid=1508051901894

http://blog.tenyi.com/2007/09/vbvbawordmacro.html

本帖包含附件
档名: zip Run_macros.rar   (2022-06-09 14:18 / 56 KB)  
Run_macros | Filetype : RAR | CRC-32 : AF13FC22
下载次数:3


献花 x1
引用 | 编辑 qoo98756
2011-07-02 06:15
6楼
  
下面是引用 ebolaman 于 2011-07-01 09:13 发表的 : 到引言文
恩,这样就要用表单来设计了
我试做了一个 VB6 专案 : Run macros

可以以特定 巨集名称 批次执行大量 Word 文件,请参考
但是你将 NewMacros 从 Word 抽取出来了吧,其实不需要那个模组
.......

高手 WOW

不能做成按GO!直接执行巨集吗~"~

因为我拿到别台电脑用时 那台电脑没装WORD

献花 x0
引用 | 编辑 ebolaman
2011-07-02 12:17
7楼
  
下面是引用 qoo98756 于 2011-07-02 06:15 发表的 : 到引言文


高手 WOW

不能做成按GO!直接执行巨集吗~"~

因为我拿到别台电脑用时 那台电脑没装WORD



没装 Word 将会造成很大的困扰,并非不可行

因为巨集的原先 "执行环境" 是在 Word 下,没有了 Word,那么 CreateObject("Word.Application") 就当场失效

后面也不能做任何事情


这么一来就只能自行解析 doc 文件,有些像是 免费软体 OpenOffice, Total Commander, Free Opener 都能自行开启 doc 文件

这个对我而言太难,而且还要执行巨集这是难上加难

献花 x0
引用 | 编辑 qoo98756
2011-07-03 01:26
8楼
  
下面是引用 ebolaman 于 2011-07-02 12:17 发表的 : 到引言文




没装 Word 将会造成很大的困扰,并非不可行

因为巨集的原先 "执行环境" 是在 Word 下,没有了 Word,那么 CreateObject("Word.Application") 就当场失效

后面也不能做任何事情


这么一来就只能自行解析 doc 文件,有些像是 免费软体 OpenOffice, Total Commander, Free Opener 都能自行开启 doc 文件

这个对我而言太难,而且还要执行巨集这是难上加难

但是我的巨集是用WORD的VB写的

照理说 我把程式码换到VB6在+上一个表单应该就可以了啊~"~

献花 x0
引用 | 编辑 ebolaman
2011-07-03 06:32
9楼
  
下面是引用 qoo98756 于 2011-07-03 01:26 发表的 : 到引言文


但是我的巨集是用WORD的VB写的

照理说 我把程式码换到VB6在+上一个表单应该就可以了啊~"~


原来你是要这样做

那么在有安装 Word 的电脑上,ActiveDocument 只要转换成 objapp 的成员就 OK 了


你可以将其中一小段 巨集 程式码贴上来看看

如果我想的没错的话,只要在模组加上一个程序及几个变数即可


你认为不管 Word 还是 VB,都是用相同的程式码

问题是在 Word 制作的巨集 通常都是控制 Word 环境的东西 (所以你最好把一小段巨集贴上来看看,免得我不知道如何去修改)

VB6 预设里面可没有 ActiveDocument 的控制项,所以直接将 巨集从 Word 拖到 VB6 里面就直接执行是不可行的







献花 x0