搜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