一個(gè)工作薄的工作表的單元格可以使用公式直接引用另一個(gè)工作簿的工作表的單元格的值,自然,被引用的工作表的單元格的值更新后,打開引用了此工作表的工作簿后,其值也會(huì)自動(dòng)更新。 如以下路徑“F:\工作簿間數(shù)據(jù)引用”,有兩個(gè)文件夾: 現(xiàn)打開3個(gè)工作簿: 其中“F:\工作簿間數(shù)據(jù)引用\a\a.xlsx”的Sheet1的內(nèi)容如下:
其中“F:\工作簿間數(shù)據(jù)引用\b\b.xlsx”的Sheet1的內(nèi)容如下:
其中“F:\工作簿間數(shù)據(jù)引用\c.xlsx”的Sheet1使用公式引用其它工作簿中單元格的數(shù)據(jù):
注意其語(yǔ)法規(guī)則。 此時(shí)關(guān)閉工作簿a、b,工作簿C的工作表Sheet1的公式的引用會(huì)將公式引用工作簿的絕對(duì)路徑顯示出來(lái):
試圖將上面的絕對(duì)路徑改為相對(duì)路徑:
結(jié)果如下:
可以知道,工作簿之間的數(shù)據(jù)引用,只能使用絕對(duì)路徑。 除非工作盤下的文件夾整體移動(dòng)到其它工作盤,否則文件夾或文件的移動(dòng),打開工作簿C.xlsx時(shí),會(huì)提示以下錯(cuò)誤: 原因是絕對(duì)路徑錯(cuò)誤(工作盤盤符可以自動(dòng)改變)。 同樣的,引用未打開的工作簿的數(shù)據(jù),我們也可以使用VBA代碼。 從上面可知,對(duì)于引用其它打開的工作簿,公式引用時(shí)切換工作簿即可。在VBA代碼中,可以用VBA代碼打開其它工作簿,并引用對(duì)象,所以我們引用未打開的工作簿,可以將指定的工作簿以只讀方式打開,獲取數(shù)據(jù)后又將其關(guān)閉。將屏幕更新屬性值設(shè)置為False,用戶看不到打開工作簿的過(guò)程。也可以不打開工作簿,使用公式,將路徑按既定的語(yǔ)法規(guī)則寫清楚或定義一個(gè)函數(shù)。實(shí)現(xiàn)這種方法的VBA 代碼如下: Sub 獲取其他工作簿數(shù)據(jù)() Dim wb As Workbook '以只讀方式打開工作簿 Set wb = Workbooks.Open('F:\工作簿間數(shù)據(jù)引用\a\a.xlsx', True, True) With ThisWorkbook.Worksheets('Sheet1') '從工作簿中讀取數(shù)據(jù) ' 方式1,從打開的工作簿引用 .Range('B2') = wb.Worksheets('Sheet1').Range('B2') + _ wb.Worksheets('Sheet1').Range('B3') + _ wb.Worksheets('Sheet1').Range('B4') ' 方式2,使用公式和絕對(duì)路徑 .Range('B3').Formula = '=SUM('F:\工作簿間數(shù)據(jù)引用\b\[b.xlsx]Sheet1'!$C$2:$C$4)' ' 方式3,將方式2的使用定義為一個(gè)函數(shù) .Range('B4').Formula = GetClosedData('F:\工作簿間數(shù)據(jù)引用\b', 'b.xlsx', 'Sheet1', 'D2:D4') End With wb.Close False '關(guān)閉打開的工作簿且不保存任何變化 Set wb = Nothing '釋放內(nèi)存End SubFunction GetClosedData(ByVal path As String, ByVal WorkbookName As String, _ ByVal SheetName As String, ByVal RangeName As String) '參數(shù)Path 為工作簿路徑 '參數(shù)WorkbookName 為工作簿名稱 '參數(shù)SheetName 為工作表名稱 '參數(shù)RangeName 為單元格區(qū)域 Dim r r = '=sum('' & path & '\[' & WorkbookName & ']' r = r & SheetName & ''!' & RangeName & ')' GetClosedData = rEnd Function ref 吳永佩 成麗君 《征服Excel VBA:讓你工作效率倍增的239 個(gè)實(shí)用技巧》 -End- |
|