資料處理過濾增益集3.5:合併工作表功能

為了解決(WORD自動化文件設計範例:聯絡簿範本進階版(應用合併列印))這篇文章的最後一個問題,要讓合併列印一班一頁(我們設計的聯絡簿範本一頁32),我們必須將各班的資料筆數用空白資料補足成32筆,然後再將所有班級的資料合在一個工作表,再以此工作表為合併列印資料的來源。

為了快速完成此項工作,我在資料處理過濾增益集3.5[特殊操作]新增一個[合併工作表]的功能,此功能主要畫面如下:


clip_image001

 

舉例要合併每一個工作表32筆資料,使用者先選取某一個工作表要合併的資料範圍($A$2:$K$33),點選[合併工作表]\[合併區域]\[選取] 設定要合併區域。

clip_image003

接下來只要點選[執行合併]鈕,即可進行合併。程式會自動將工作簿中每一個工作表$A$2:$K$33的區域複製合併至新的工作表中,工作表會被命名為合併+數字

 

clip_image005

 

我們只要將原來的工作表欄位名稱複製插入合併之工作表即可完成要合併列印的資料來源。

WORD自動化文件設計範例:聯絡簿範本進階版(應用合併列印)

延續上篇文章,現在如果我們希望針對不同的學生輸出不同的內容,以這次第三次模擬志願選填為例,一開始我們採取的是每位學生都通知一樣的內容。(如下圖)

clip_image002[4]

但是隨著選填的進行,部分學生完成選填,我們只要通知未選填的學生即可。(如下圖)

clip_image004[4]

要達到這個目的,可以利用的技巧就是合併列印這個功能。但是在合併列印的預設是以每筆資料為一節,把一節的資料放置在一頁的版面,但是在上圖我們可以看到我們要的是是一頁中,要放置一班沒有選填志願的學生。這個要如何做?

1.我們一樣使用聯絡簿範本,先利用此範本建立合併的文件

clip_image006[4]
 

2.點選[郵件]功能區
 

clip_image008[4]
 

3.點選[郵件]\[選取收件者]\[使用現有清單]

clip_image009[4]

 

4.選擇合併資料的檔案,我們選擇用未選填志願的學生Excel檔案

clip_image011[4]

指定資料來源的表格

clip_image013[4]
 

5.在聯絡簿範本產生的文件的第1格,點選[插入合併欄位],插入我們要合併的資料欄位

 

clip_image014[4]
 

6.完成如下圖,但是如果這樣執行合併會變成1個學生一頁,這樣太浪費紙張了。

clip_image016[4]

7.我們先執行聯絡簿範本所提供的 [複製訊息] 巨集功能。

clip_image017[4]

將所有表格都填上合併欄位的內容如下圖

clip_image019[4]

點選[郵件]\[完成與合併]\[編輯個別文件]

clip_image020[4]

先合併第1筆與第2筆,看結果是否是我們要的?

clip_image021[4]

但是這樣執行合併會變如下圖,同一頁每一個格子內都是同一個學生的資料,這不是我們要的。

clip_image023[4]

8.我們希望同一班的多筆資料在同一頁,所以必須將調整合併的規則,在[郵件]\[完成與合併]\[規則],選擇插入[Next  Record (下一筆記錄) ]在原來的合併欄位之前,

clip_image024[4]

然後再執行聯絡簿範本所提供的 [複製訊息] 巨集功能,將每個格子填入相同的合併指令,但是第1格的[Next  Record (下一筆記錄) ]指令要刪掉,否則會跳過第1筆資料。

clip_image026[4]

然後再執行[郵件]\[完成與合併]\[編輯個別文件],選擇合併全部的資料,如下圖。

clip_image028[4]

這樣便可以在同一頁有不同筆的資料。但是讀者可能發現為什麼每一頁中有會有空白的資料,其實這是為了方便我們發送資料給每一班,原則上同一班沒有選填志願的人會在同一頁。這樣要怎麼做才能達成,因為我們一頁上面有32(大概是目前本校1班最多的人數),所以按照我們所設定的合併規則,一頁會放進32筆資料,但是每一班不一定有32個人,所以如果我們不額外處理合併的來源資料,基本上沒辦法一班一頁,可能一頁中有好幾班混在其中。所以我們必須幫每一班補至32筆資料,每一頁空白的部分就是補進的空白資料。至於如何快速的幫每一班補進不足的資料筆數,下回分曉!

WORD自動化文件設計範例:如何從一份文件的第四頁開始標頁碼?(頁碼公式進階應用)

最近有同事問一個頁碼的問題:如何從一份文件的第四頁開始標頁碼?也就是把第四頁標為頁碼1

 

關於WORD頁碼的功能是在頁首或頁尾插入功能變數PAGEPAGE這個功能變數會計算所在的頁數,如果要從第四頁開始放頁碼,也就是前三頁不能出現頁碼,如果單純的在頁首頁尾插入功能變數PAGE是不行的,因為在頁首頁尾放置的內容在每一頁都會出現,所以我們必須還搭配其他功能變數。如何做?

以下用WORD 2010來示範:

 

1.     首先我們先拿一份超過四頁未加頁碼的文件進行測試,先進行加頁碼的步驟,點選功能區[插入]\[頁碼]\[頁面底端]\[純數字2]

clip_image002
插入頁碼之後如下,我們再將游標移至頁尾部分頁碼旁邊。

clip_image004

2.     然後我們同時按鍵盤alt鍵和F9,這組快速鍵的組合可以把原始功能變數呈現出來,所以我們會看到頁尾頁碼的部分會變成下圖,如果要隱藏功能變數再按鍵盤alt鍵和F9

clip_image005

3.     我們把游標移到功能變數的{}中進行編輯,因為功能變數內容還蠻多,如果要有個編輯的參考,我們可按滑鼠右鍵叫出浮動的功能視窗。
clip_image006

然後點選[編輯功能變數],可以在以下的視窗畫面進行編輯,如果不熟悉功能變數參數可以利用這個介面來編輯。

clip_image008
如果熟悉功能變數可以利用同時按鍵盤Ctrl鍵和F9
,插入空的功能變數進行編輯如下圖,然後在其中進行編輯,當然也可以在功能變數中再加上功能變數,變成功能變數組合。
clip_image009

4.     在問題中我們希望從第4頁才開始加頁碼,這個牽涉到流程判斷的問題,在功能變數中有提供IF的功能變數,可以進行簡單的流程判斷。我先將整個功能變數寫出來,再解釋其所代表的含意。
clip_image010

IF(假如)的功能變數後面接空格,然後再接條件(在本例條件是頁碼大於3,即{ PAGE }>3),再接空格,再接符合條件要呈現的內容(在本例是頁碼減3,在此必須使用功能變數中函數的功能變數,即{={ PAGE } – 3 }),再接空格,再接符不合條件要呈現的內容(在本例我們不要呈現任何內容,只要輸入””)

5.     輸入完功能變數,再同時按鍵盤alt鍵和F9一次,我們便可以看到計算後新的頁碼(如下圖),左下角可以看到目前頁面在第3(文件有13),頁碼是空白。

clip_image012
下圖左下角可以看到目前頁面在第4(文件有13),頁碼是1

clip_image014
6.按照上述的方法,使用者只要善用功能變數,即可設定不同類型的頁碼呈現方式,給各位一個問題:如果我們要奇數頁用阿拉伯數字當頁碼,偶數頁用中文數字當頁碼,功能變數應該如何寫?大家可以試試看,答案在以下連結的檔案。(範例
)

WORD自動化文件設計範例:聯絡簿範本

現在的國中生雖然已經在學校很多年,但是要他們抄個聯絡簿還是落東落西,經常重要的訊息不是沒寫到就是寫錯。很多導師只好用小學一二年級的方法,把重要訊息用電腦打字,全班有幾位學生就複製貼上幾個,作成一張列印出來(如下圖),再請學生裁剪貼在聯絡簿上。

image

這件工作看起來是小事一件,但是每天如果都要複製貼上二三十次也是有點煩。雖然我不是導師,但是因為我負責升學報名的業務,最近一堆升學相關的重要訊息,要麻煩導師轉知家長學生,為了減輕導師端的負荷,只好我自己來做要貼聯絡簿的資料,作成一張然後複印27份給九年級各班導師。

這種事做兩次就有點煩,就乾脆設計一個WORD巨集範本(範本下載連結),這個範本的功能很簡單,使用者下載檔案解壓縮之後,只要用滑鼠點範本檔案(聯絡簿範本.dotm)兩下,自動會啟動WORD,並以此範本新增一個WORD檔案,內容如下:

image

使用者只要依提示在表格的第一格輸入要通知家長的訊息,然後點選[增益集]功能區,會看到[自訂工具列]中會出現[複製訊息]這個按鈕,只要按這個按鈕,範本中的巨集程式自動會將第1格的內容複製貼到其它格子中。

image

舉例我要通知學生家長模擬選填的起迄時間,我在表格的第一格輸入以下內容

image

 

然後點選[增益集]\[自訂工具列]\[複製訊息],巨集程式自動將訊息複製貼到表格中所有格子(如下),使用者就不用複製貼上那麼多次。

image

 

巨集程式碼如下

'作者:楊煥謀 20140225
Sub t()
Dim i As Long, j As Long
Dim c As Long
Dim r As Long
 ActiveDocument.Tables(1).Select

c = ActiveDocument.Tables(1).Columns.Count
r = ActiveDocument.Tables(1).Rows.Count

For i = 1 To c

For j = 1 To r

ActiveDocument.Tables(1).Columns(1).Cells(1).Select
Selection.Copy

ActiveDocument.Tables(1).Columns(i).Cells(j).Select
Selection.Paste


Next j

Next i

End Sub
Sub addmain()
On Error Resume Next
    Dim obCommandbar  As CommandBar
    Dim newItemI1 As CommandBarButton
   
    Set obCommandbar = ActiveDocument.CommandBars.Add(Name:="聯絡簿", Position:=msoBarTop, Temporary:=False)


    obCommandbar.Visible = True
    
    
   
     Set newItemI1 = obCommandbar.Controls.Add(Type:=msoControlButton, Temporary:=False)
   
    With newItemI1
    .Caption = "複製訊息"
    .Enabled = True
    .BeginGroup = True
   .Style = msoButtonWrapCaption
.OnAction = "t"
    End With
    
    
    
   
  Set obCommandbar = Nothing
    Set newItemI1 = Nothing
    
End Sub


Sub dc()
On Error Resume Next
    
     ActiveDocument.CommandBars("聯絡簿").Delete
End Sub

注意事項:

1.現在的班級人數大概是30人左右,範本的格子數目為32,版面是B4大小,使用者可以依照需要修改表格的欄列數目,或變更版面大小,但是記得程式只針對文件中第一個表格進行操作。

2.範本是在WORD 2010撰寫,要用於WORD 2003,請開啟範本利用另存新檔的功能儲存範本為2003的範本格式。