- 帖子
- 129
- 主題
- 25
- 精華
- 0
- 積分
- 159
- 點名
- 0
- 作業系統
- win7
- 軟體版本
- office2010
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2011-12-24
- 最後登錄
- 2022-12-12
|
[發問] 程式F8可以F5就當機,以及關閉WORD.EXE
本帖最後由 iceandy6150 於 2020-3-31 23:13 編輯
大家好,我寫了一個按鈕,按下去之後,主要功能是開啟一個WORD檔
然後進行合併列印,並合併列印到新檔案
等使用者列印後,關掉新檔案跟原檔案
(這邊本來想要寫成,新檔案會自動列印,然後關掉所有WORD檔)
(但是怕使用者的印表機可能不盡相同,因此作罷)
前面會先檢查是否已經開啟WORD檔
有開就詢問是否關掉WORD,或者不存檔強制關閉
問題在,每一次使用者列印後,關掉WORD新檔案跟原檔案後
其實【工作管理員】裡面,WORD.EXE這個程序還是存在
然後【先檢查是否已經開啟WORD檔】這邊,如果F8逐步執行,是沒問題的
如果直接按下按鈕執行,就會卡住(F5直接執行就會卡住)
解決辦法是去【工作管理員】裡面,把WORD.EXE這個程序關掉,才能正常跑- Private Sub CommandButton2_Click()
- '====偵測是否有開啟中的WORD檔,並選則是否存檔關閉====
- Dim WordApp As Object, Doc As Object
- Dim box
- On Error GoTo Skip '設置出錯跳轉位置
- Set WordApp = GetObject(, "word.application") '獲取第一個word進程
- Do While Not WordApp Is Nothing '如果成功獲取進程,則進入迴圈操作
- With WordApp
- If .Documents.Count > 0 Then '如果進程中有打開的文檔
- MsgBox ("偵測到有尚未關閉的WORD檔案")
- box = MsgBox("您要離開本程式,先將WORD檔案關閉?" + Chr(13) + "【是】離開本程式" + Chr(13) + "【否】不存檔直接關閉WORD", 4, "重要訊息")
- If box = 6 Then
- Exit Sub
- Else
- For Each Doc In .Documents '迴圈各個打開的文檔
- Doc.Close False '關閉文檔並不保存(注:想保存的話,將後面的參數改為True)
- Next Doc
- End If
- End If
- .Quit '關閉當前的word進程 <<<<<<這邊如果F8執行,是可以成功關閉工作管理員中的WORD.EXE的
- End With
- Set WordApp = GetObject(, "word.application") '獲取下一個word進程
- Loop
- Skip:
- Set Doc = Nothing '結束或出錯跳轉至此,清空變數專案
- Set WordApp = Nothing
- '================================
- Dim wdObj As Object
- Dim strXls As String, strSQL As String
- Dim a, b
- a = ThisWorkbook.Path '此EXCEL檔案存放位置
- b = ThisWorkbook.Name 'b為檔名
- strXls = a & "\" & b '此EXCEL檔案完整路徑及檔名
- Set wdObj = CreateObject("Word.Application") '會先把所有WORD都關掉,所以用Creat 不用Get
- Set wdObj = New Word.Application '啟動Word
- wdObj.Visible = True
- wdObj.Documents.Open (a & "\列印.docx")
- With wdObj '使用With後就正常了
- '這邊以下是用WORD錄製巨集得到的合併列印寫法
- .ActiveDocument.MailMerge.OpenDataSource Name:= _
- strXls, ConfirmConversions:=False, _
- ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
- PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
- WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
- Connection:= _
- "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=strXls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locki" _
- , SQLStatement:="SELECT * FROM `工作表1", SQLStatement1:="", SubType:= _
- wdMergeSubTypeAccess
-
- .ActiveDocument.MailMerge.Fields.Add Range:=.ActiveDocument.Tables(1).Cell(2, 1).Range, Name:="號碼"
-
- .CommandBars("Mail Merge Panes").Visible = False
-
- With .ActiveDocument.MailMerge
- .Destination = wdSendToNewDocument
- .SuppressBlankLines = True
- With .DataSource
- .FirstRecord = wdDefaultFirstRecord
- .LastRecord = wdDefaultLastRecord
- End With
- .Execute Pause:=False
- End With
-
- End With
- Set wdObj = Nothing
- MsgBox ("列印後,關閉WORD檔案時,記得通通【不要儲存】")
- MsgBox ("最後不印了,記得執行【清除背景WORD程式】")
- End Sub
複製代碼 求救各位,謝謝
合併列印測試.rar (34.5 KB)
|
|