我討論了Excel 2007和Excel 2010 Beta中存在的錯誤。以下是該條目的摘要:當報表工作簿中的Excel范圍名稱引用數據庫工作簿中的表單范圍名稱時,如果先打開報表工作簿,然后再打開數據庫工作簿,則Excel會刪除報表工作簿在數據庫工作簿中引用的所有表單范圍名稱。如果您不使用工作表范圍的名稱,那么此建議意義不大。因此,讓我們先討論打印范圍來討論范圍名稱的范圍…分配打印區域時,實際上是在為工作表分配范圍名稱“ Print_Area”。然后,在打印工作表時,如果已定義,則Excel僅打印Print_Area范圍。這種方法在早期的Excel中非常有效,當時工作簿只能有一個工作表。但是后來,Microsoft在1993年用Excel 5引入了多頁工作簿。據說,微軟正在向一組開發人員演示Excel 5的早期版本。其中一個問:“我們現在可以在一個工作簿中放幾張紙。但是我們只能有一個Print_Area范圍名稱。那么我們如何為工作簿中的每張圖紙分配一個打印區域?”
程序員擠在舞臺上,故事走了,最后告訴開發人員:“我們會盡快就此與您聯系。”程序員想出的是一種限定范圍名稱的方法。即,Excel范圍名稱可以具有工作簿范圍或工作表范圍。若要查看它們的工作原理,假設您定義“ Foo”以引用新工作簿的第1頁的某些范圍。默認情況下,這將是一個工作簿范圍的名稱。現在,在工作表2中,假設您將工作表的區域定義為“ Sheet2!Foo”。這樣做會將范圍定義為工作表范圍的名稱。(新Excel中的“新名稱”對話框提供了一個下拉列表框,與以前的Excel版本相比,它使您可以更輕松地指定范圍。)現在讓我們看看這些名稱是如何工作的……激活圖紙2.按F5鍵,在“轉到”對話框中輸入“ Foo”作為“參考”,然后按OK。Excel將為工作表2選擇工作表范圍的名稱。激活圖紙3.再次使用GoTo對話框轉到“ Foo”。這次,Excel將選擇由工作簿作用域名稱定義的范圍,該名稱參考表1。激活圖紙3.使用“轉到”對話框轉到“ Sheet2!Foo”。這次,Excel將選擇由工作表范圍名稱定義的范圍名稱,該名稱指的是工作表2。一個工作簿中可以有一個工作簿作用域名稱,但是與工作表一樣多。這使我們進入了數據庫工作簿……到目前為止,我建議在數據庫工作簿中使用多個工作表。例如,您可以在名為Actual的工作表中擁有一個數據庫,而在名為Target的工作表中擁有另一個數據庫。可以為這兩個數據庫分配工作表范圍的名稱Data。使用這種方法,您可以使用以下引用來引用兩個范圍:= [Database.xls]實際!數據= [Database.xls]目標!數據在Excel 2007之前,這種方法非常有效。但是,正如我在博客條目中對Excel漏洞(與Excel 2007(可能還有Excel 2010))中所述的那樣,必須在打開報表工作簿之前打開Database.xls(或Database.xlsx)。如果首先打開報表工作簿,則Excel將在數據庫工作簿中找到報表工作簿所依賴的所有工作表范圍的名稱,然后自動刪除它們。
那么,解決此錯誤的最佳方法是什么?在我的博客文章中,我提供了三種選擇:使用Excel 2003,先打開數據庫工作簿,或者在數據庫工作簿中不要使用工作表范圍的名稱。最后的建議似乎是最好的長期解決方案。也就是說,當您設置數據庫和報表工作簿時,請按照設置范圍名稱以將報表連接到Excel數據庫,第1部分中的說明來設置數據庫工作簿。然后,當您需要其他數據庫時-用于目標或在不同的時間時間段,或者邏輯上不同的數據,或者其他任何內容,請在單獨的工作簿中創建這些數據庫。然后,當您打開報表工作簿時,可以使用“編輯鏈接”對話框打開所有數據庫工作簿。為此……在New Excel中,選擇“數據”,“連接”,“編輯鏈接” …在Classic Excel中,選擇“編輯”,“鏈接” …最后,在“編輯鏈接”對話框中,選擇列表中的所有工作簿,然后選擇“開源”。當您這樣做時,Excel將打開所有這些數據庫工作簿。這是我目前聽到和研究的最好建議。如果我有更好的建議或者讀者這邊有更好的建立,我會一直與大家討論并研究和大家一起分享的。