您使用關聯式資料 (其中的相關資料會分別儲存在個別資料表) 時,經常需要在同一份報表上檢視多個資料表或查詢中的資訊。 舉例來說,您想要查看客戶資料,但同時也想查看客戶的訂單資訊。 Access 中的子報表是執行此作業的實用工具,因為它能讓您在含有客戶資訊的報表上,以邏輯且容易閱讀的方式呈現訂單資訊。 Access 提供多種方式可協助您快速建立子報表。
您想要做什麼?
了解子報表
插入另一份報表中的報表稱為子報表。 在結合報表時,必須要有一份報表成為包含其他報表的主報表。 主報表若非「繫結」就是「未繫結」。 繫結報表指的是能夠呈現資料,並在其 [記錄來源] 屬性中指定資料表、查詢或 SQL 陳述式的報表。 未繫結報表指的是能不以資料表、查詢或 SQL 陳述式為基礎的報表 (也就是說,報表的 [記錄來源] 屬性為空白)。
含有兩個不相關子報表的未繫結主報表範例
未繫結主報表無法顯示任何自身資料,但仍能做為您想要結合之不相關子報表的主報表。
1. 未繫結主報表包含兩份子報表。
2. 一份子報表根據員工來摘要銷售量。
3. 另一份子報表則根據類別摘要銷售量。
繫結至相同記錄資料來源的主報表和子報表範例
您可以使用主報表來顯示詳細記錄 (例如年度中的每筆銷售),然後使用子報表來顯示摘要資訊 (例如各季的總銷售額)。
1. 子報表根據季度摘要出當年的銷售量。
2. 主報表列出每日銷售量。
繫結至相關記錄資料來源的主報表和子報表範例
主報表可以含有一或多份子報表中也有的資料。 在此案例中,子報表含有與主報表中之資料相關的資料。
1. 主報表列出每場交易會的名稱和城市。
2. 子報表列出將會出席每場交易會的代表人員。
報表上的子表單
除了子報表外,主報表還可以包含子表單,並且可根據您的需要包含任何數量的子表單和子報表。 此外,主報表最多可以含有七層子表單和子報表。 例如,報表中可以有子報表,而該子報表可以包含子表單或子報表,以此類推,最多七個層級。
如果您在報表中新增表單,然後在 [報表] 檢視中開啟該報表,就能使用子表單來篩選和瀏覽記錄。 雖然在這種情況下部分有些事件會停用,不過附加至該表單的 Visual Basic for Applications (VBA) 程式碼和內嵌巨集及其控制項都會繼續執行。 您無法使用報表中的表單來新增、編輯或刪除記錄。
將報表連結至子表單或子報表
在插入含有與主報表中資料相關之資訊的子表單或子報表時,子報表的控制項必須連結至主報表。 該連結會確保子表單或子報表所呈現的記錄能正確對應至主報表中列印的記錄。
當使用精靈或是藉由將物件從 [瀏覽窗格] 拖曳至表單來建立子表單或子報表時,Access 會在符合下列條件的情況下,自動將子表單或子報表連結到主報表。
-
您定義所選之資料表的關聯性,或定義以所選查詢為基礎之資料表的關聯性。
-
主報表以含有主索引鍵的資料表為基礎,且在子表單或子報表做為基礎的資料表中,有欄位的名稱與該主索引鍵相同,並具有同樣或相容的資料類型。 比方說,如果主報表之基礎資料表中的主索引鍵為 [自動編號] 欄位,而且 [欄位大小] 屬性設為 [長整數],那麼子表單或子報表之基礎資料表中的對應欄位必須是一個 [欄位大小] 屬性設為 [長整數] 的 [數值] 欄位。 如果您選取一或多個查詢做為子表單或子報表的記錄來源,該查詢中的基礎資料表也必須符合相同的條件。
建立子報表
如果子報表將會連結至主報表,在使用下列程序前,請先確定已關聯基礎記錄。
使用子報表精靈來建立子報表
此程序假設您已經擁有一份報表,並想在其中新增子報表。 如需如何建立報表的詳細資訊,請參閱建立簡易報表或建立分組或摘要報表 (機器翻譯) 等文章。
-
在 [瀏覽窗格] 中,以滑鼠右鍵按一下要新增子報表的報表,然後按一下 [設計檢視]。
-
在 [設計] 索引標籤的 [控制項] 群組中,按一下右下角的向下箭號來開啟 [控制項] 庫:
-
在隨即出現的功能表中,確定已選取 [使用控制項精靈]。
-
再次開啟控制項庫,然後按一下 [子表單/子報表]。
-
在報表上,按一下您要放置子表單的位置。
-
如果出現安全性注意事項對話方塊,請按一下 [開啟] 來啟動精靈。
-
在子表單精靈的第一頁,如果想要依據資料表或查詢來建立新的子表單或子報表,請按一下 [使用現存的資料表或查詢]。 如果您有想要做為子報表的現成報表或表單,請按一下 [使用現有的報表或表單],在清單中選取報表或表單,然後按一下 [下一步]。
附註: 如果資料庫中沒有其他報表或表單,該清單會保持空白,且無法使用 [使用現有的報表或表單] 選項。
-
如果您在精靈的前一頁中選擇 [使用現有的報表或表單],請跳過此步驟,並直接移至步驟 9。 否則,請從 [資料表/查詢] 清單中選取含有您想要納入子報表之欄位的資料表或查詢,然後在 [可用的欄位] 清單中按兩下您想要的欄位,來將它們新增至子報表。
如果您打算將子報表連結至主報表,請務必納入將會用來建立該連結的一或多個欄位,即使您不想要報表顯示它們也一樣。 一般而言,連結欄位會是識別碼欄位。 在上述圖例中,[訂單] 資料表是子報表的記錄來源,而 [客戶] 資料表則是主報表的記錄來源。 因為 [訂單] 資料表透過 [客戶識別碼] 欄位與 [客戶] 資料表相關聯,所以系統會將該欄位新增至 [已選取的欄位] 清單。
附註: 您可以在子報表上包含來自多個資料表和查詢的欄位。 新增完一個資料表中的欄位後,請從 [資料表/查詢] 清單選取下一個資料表或查詢,然後新增您想要的欄位。
按一下 [下一步] 繼續。
-
在精靈的這個頁面中,您可以決定子報表連結至主報表的方式。 如果 Access 找到看起來可適用於連結子報表至主報表的欄位,精靈就會顯示一份可能的連結建議清單。
您可以選取看起來最適合您需求的連結建議,或者,如果您不想要將子報表連結至主報表,請選取 [無]。 如果您想要將子報表連結至主報表,但卻沒看到合適的建議,請按一下 [定義自己專屬的欄位]。
附註: 精靈如果沒找到適合連結的欄位,就不會提供連結建議清單,且會自動選取 [定義自己專屬的欄位] 選項。
選取 [定義自己專屬的欄位] 選項時,精靈會顯示兩組清單。
-
在 [表單/報表欄位] 底下,請選取一或多個您想要用來將主報表連結至子表單或子報表的主報表欄位。 您最多可以選取三個欄位,每個所選欄位都必須符合子表單或子報表資料來源中的某個相關欄位。
-
在 [子表單/子報表欄位] 底下,請選取一或多個連結至您所選主報表欄位的子表單對應欄位或子報表對應欄位。
-
若要保持子表單或子報表不連結至主報表,請確定所有清單都是空白。
按一下 [下一步] 繼續。
-
-
在精靈的最後一頁上,請輸入子表單或子報表的名稱,或直接按一下 [完成] 來接受預設值。
Access 會將子報表控制項新增至您的報表,並將控制項繫結 (也就是設定 [來源物件] 屬性) 如下:
-
如果您在精靈的第一頁中選取 [使用現有的報表或表單],Access 會將子報表控制項繫結到您指定的報表或表單。
-
如果您在精靈的第一頁中選取 [使用現存的資料表或查詢],Access 會在 [瀏覽窗格] 中建立一個新物件,然後將子報表控制項繫結到該物件。 新報表控制項的名稱會與您在精靈最後一頁中輸入的相同。
將資料表、查詢、表單或報表新增至報表以做為子報表
快速將子報表新增到報表的方法,是在 [版面配置檢視] 或 [設計檢視] 中開啟主報表,然後將物件從 [瀏覽窗格] 拖曳到其中。 如果您想要將子報表連結至主報表,請確定已關聯基礎記錄來源,且該記錄來源中包含要用於將連結子表單或子報表連結至主報表的欄位。
-
在 [瀏覽窗格] 中,用滑鼠右鍵按一下要用來當做主報表的報表,然後按一下捷徑功能表中的 [版面配置檢視] 或 [設計檢視]。
-
從 [瀏覽窗格] 中,將資料表、查詢、表單或另一份報表拖曳至您想要子報表出現的主報表區段。
Access 會執行下列其中一項操作:
-
如果 Access 能決定連結這兩項物件的方式,Access 會在報表中新增子報表控制項。 如果您新增表單或報表,Access 會將子報表控制項繫結到該物件。 如果您新增資料表或查詢,Access 會先建立一個報表物件,然後再將子報表控制項繫結到該物件。
-
如果 Access 無法決定連結這兩項物件的方式,子報表精靈便會隨即出現。 若要繼續,請遵循使用子報表精靈來建立子報表一節中的程序,從步驟 9 開始。
執行完精靈後,Access 會將子報表新增至報表。
使用下列程序來仔細檢查子表單或子報表是否已正確連結至主報表。
-
按一下子報表控制項以選取。
-
如果沒有顯示屬性表,請按 F4 顯示屬性表。
-
在屬性表的 [資料] 索引標籤上,檢查 [連結主欄位] 和 [連結子欄位] 屬性。
-
如果是未連結的子表單或子報表,這兩項屬性都應該為空白。
-
如果是已連結的子表單或子報表,[連結主欄位] 和 [連結子欄位] 屬性應該會顯示同時關聯至這兩項物件的一或多個欄位。 舉例來說,如果主報表顯示來自 [員工] 資料表的資訊,而子表單或子報表顯示來自 [訂單] 資料表的資訊,那麼 [連結主欄位] 屬性應該要顯示 [員工] 資料表的 [識別碼] 欄位,[連結子欄位] 屬性則該顯示 [訂單] 資料表的 [識別碼] 欄位。
-
您可能會發現您需要編輯這些屬性,子表單或子報表才能正常運作。 使用下列程序。
-
在屬性表的 [資料] 索引標籤上,按一下 [連結主欄位] 屬性方塊,然後按一下 [建立] 按鈕 。
隨即會出現 [子報表欄位連結器] 對話方塊。
-
在 [主欄位] 和 [子欄位] 清單中,選取要用來連結報表的欄位。 如果您不確定要使用哪些欄位,請按一下 [建議],讓 Access 嘗試判斷連結欄位。 完成後請按一下 [確定]。
如果您沒有看到要用來連結報表的欄位,可能需要編輯主報表的記錄來源或是子表單或子報表的記錄來源,以確保當中含有連結欄位。 例如,如果該報表是以查詢為基礎,您應該確保連結欄位出現在查詢結果中。
-
儲存主報表並切換到 [報表] 檢視,然後確認該報表如預期般運作。
將資料表或查詢新增至報表以做為資料工作表
資料工作會以簡單、視覺化的方式呈現資料,與試算表類似。 資料工作表中的每個資料行都代表來源資料表或查詢中的一個欄位,同時每一列都代表一筆記錄。 您可以使用子表單/子報表控制項,來在報表上顯示資料工作表。 這項絕佳技巧非常適合用於想要壓縮資料顯示,但又不需要表單或報表物件之格式設計功能的時候。 若要在報表新增資料工作表:
-
在 [瀏覽窗格] 中,用滑鼠右鍵按一下要用來當做主報表的報表,然後按一下捷徑功能表中的 [設計檢視]。
-
在 [設計] 索引標籤的 [控制項] 群組中,按一下右下角的向下箭號來開啟 [控制項] 庫:
-
在隨即出現的功能表中,確定您未選取 [使用控制項精靈]。
-
再次開啟控制項庫,然後按一下 [子表單/子報表]。
-
在報表上,按一下您要放置子表單的位置。
-
如果系統啟動子報表精靈,請按一下 [取消] 以關閉。
-
如果沒有顯示屬性表,請按 F4 顯示屬性表。
-
在報告中,按一下子新的報表控制項加以選取。
-
在屬性表的 [資料] 索引標籤上,按一下 [來源物件] 屬性方塊中的箭號,然後按一下您想要顯示在子報表控制項中的資料表或查詢。 例如,若要顯示 [訂單] 資料表,請按一下 [資料表.訂單]。
Access 會試著依據資料庫中定義的關聯性,將資料工作表連結至主報表。
-
在屬性表的 [資料] 索引標籤上,檢查 [連結主欄位] 和 [連結子欄位] 屬性。
-
如果是未連結的資料工作表,請確定這兩項屬性都為空白。
-
如果是已連結的資料工作表,請確定 [連結主欄位] 和 [連結子欄位] 屬性顯示的是將主報表關聯至該資料工作表的一或多個欄位。 舉例來說,如果主報表顯示來自 [員工] 資料表的資訊,而資料工作表顯示來自 [訂單] 資料表的資訊,那麼 [連結主欄位] 屬性應該要顯示 [員工] 資料表的 [識別碼] 欄位,[連結子欄位] 屬性則該顯示 [訂單] 資料表的 [識別碼] 欄位。
-
在某些案例中,您可能需要自行設定連結欄位屬性。 您可以使用下列程序來執行這項作業。
-
在屬性表的 [資料] 索引標籤上,按一下 [連結主欄位] 屬性方塊,然後按一下 [建立] 按鈕 。
-
如果出現安全性注意事項對話方塊,請按一下 [開啟]。
隨即會出現 [子報表欄位連結器] 對話方塊。
-
在 [主欄位] 和 [子欄位] 清單中,選取您要用來將主報表連結至資料工作表的欄位。 如果您不確定要使用哪些欄位,請按一下 [建議],讓 Access 嘗試判斷連結欄位。 完成後請按一下 [確定]。
如果您沒有看到想用來進行連結的欄位,您可能需要編輯主報表或資料工作表的記錄來源,以確保當中含有連結欄位。 例如,如果該資料工作表是以查詢為基礎,您應該確保連結欄位有出現在查詢結果中。
-
儲存主報表並切換到 [報表] 檢視,然後確認該報表如預期般運作。
變更子報表的設計
將子報表新增至報表後,您可能會想要對子報表進行設計變更,或者想要參照到主報表中的資報表資料。 下列各節提供如何完成這些工作的祕訣。
在 [設計檢視] 內的新視窗開啟子表單或子報表
若要在 [設計檢視] 中處理主報表的時候變更其子表單或子報表的設計,您可以在獨立的視窗中開啟子表單或子報表。
-
按一下子表單或子報表以選取它。
-
在 [設計] 索引標籤的 [工具] 群組中,按一下 [新視窗中的子報表]。
附註: 如果子表單/子報表繫結至資料表或查詢,您將無法使用這項命令。
在主報表上顯示子報表的總計
假設您使用的子報表名為 [訂單子表單],其中包含一個名為 [運費總額] 的文字方塊,且該文字方塊會加總 [運費] 資料行。 若要在主報表上顯示來自子報表的加總,您必須主報表新增一個文字方塊,然後使用運算式來參照至子報表上的 [運費總額] 文字方塊。 您可以使用下列程序來執行這項作業。
-
以滑鼠右鍵按一下 [瀏覽窗格] 中的主報表,然後按一下捷徑功能表上的 [設計檢視]。
-
在 [設計] 索引標籤上,按一下 [控制項] 群組中的 [文字方塊]。
-
在主報表上,按一下您要放置新文字方塊的位置。
-
如果沒有顯示屬性表,請按 F4 顯示屬性表。
-
在屬性表的 [資料] 索引標籤上,於 [控制項資料來源] 屬性方塊中輸入下列運算式。
=IIf(IsError([訂單子表單].[報表]![運費總額]),0,[訂單子表單].[報表]![運費總額])
附註:
-
在這個範例中您可以使用更簡單的運算式「=[訂單子表單].[報表]![運費總額]」,但這樣的話,如果子報表中不含任何資料,主報表上的該控制項就會顯示 #Error。 請在 IIf 函數中使用 IsError 函數 (如第一個運算式所示),以確保主報表中的文字方塊會在子報表未傳回任何資料時顯示零 (0)。
-
您可以按一下 [控制項資料來源] 屬性方塊中的 [建立] 按鈕 ,來使用運算式建立器建立運算式。
-
-
在屬性表的 [格式] 索引標籤上,將 [格式] 屬性設定適合的值 (這個案例中為 [貨幣])。
-
儲存報表並切換到 [報表] 檢視,以確認該計算如預期般運作。