當前位置:首頁 > 科技 > 正文

Excel引用其它工作簿中的單元格的值及使用VBA操作

一個工作薄的工作表的單元格可以使用公式直接引用另一個工作簿的工作表的單元格的值,自然,被引用的工作表的單元格的值更新後,打開引用了此工作表的工作簿後,其值也會自動更新。

如以下路徑“F:\工作簿間數據引用”,有兩個文件夾:

現打開3個工作簿:

其中“F:\工作簿間數據引用\a\a.xlsx”的Sheet1的内容如下:

a

b

c

m1

1

2

3

m2

4

5

6

m3

77

8

9

其中“F:\工作簿間數據引用\b\b.xlsx”的Sheet1的内容如下:

a

b

c

m1

11

12

13

m2

14

15

16

m3

17

18

19

其中“F:\工作簿間數據引用\c.xlsx”的Sheet1使用公式引用其它工作簿中單元格的數據:

n

sum

a

=SUM([a.xlsx]Sheet1!$B$2:$B$4)

b

=SUM([b.xlsx]Sheet1!$C$2:$C$4)

注意其語法規則。

此時關閉工作簿a、b,工作簿C的工作表Sheet1的公式的引用會将公式引用工作簿的絕對路徑顯示出來:

n

sum

a

=SUM('F:\工作簿間數據引用\a\[a.xlsx]Sheet1'!$B$2:$B$4)

b

=SUM('F:\工作簿間數據引用\b\[b.xlsx]Sheet1'!$C$2:$C$4)

試圖将上面的絕對路徑改為相對路徑:

n

sum

a

=SUM('..\a\[a.xlsx]Sheet1'!$B$2:$B$4)

b

=SUM('[b.xlsx]Sheet1'!$C$2:$C$4)

結果如下:

n

sum

a

=SUM('C:\Users\ww\a\[a.xlsx]Sheet1'!$B$2:$B$4)

b

=SUM('F:\工作簿間數據引用\b\[b.xlsx]Sheet1'!$C$2:$C$4)

可以知道,工作簿之間的數據引用,隻能使用絕對路徑。

除非工作盤下的文件夾整體移動到其它工作盤,否則文件夾或文件的移動,打開工作簿C.xlsx時,會提示以下錯誤:

原因是絕對路徑錯誤(工作盤盤符可以自動改變)。

同樣的,引用未打開的工作簿的數據,我們也可以使用VBA代碼。

從上面可知,對于引用其它打開的工作簿,公式引用時切換工作簿即可。在VBA代碼中,可以用VBA代碼打開其它工作簿,并引用對象,所以我們引用未打開的工作簿,可以将指定的工作簿以隻讀方式打開,獲取數據後又将其關閉。将屏幕更新屬性值設置為False,用戶看不到打開工作簿的過程。也可以不打開工作簿,使用公式,将路徑按既定的語法規則寫清楚或定義一個函數。實現這種方法的VBA 代碼如下:

Sub 獲取其他工作簿數據() Dim wb As Workbook '以隻讀方式打開工作簿 Set wb = Workbooks.Open('F:\工作簿間數據引用\a\a.xlsx', True, True) With ThisWorkbook.Worksheets('Sheet1') '從工作簿中讀取數據 ' 方式1,從打開的工作簿引用 .Range('B2') = wb.Worksheets('Sheet1').Range('B2') + _ wb.Worksheets('Sheet1').Range('B3') + _ wb.Worksheets('Sheet1').Range('B4') ' 方式2,使用公式和絕對路徑 .Range('B3').Formula = '=SUM('F:\工作簿間數據引用\b\[b.xlsx]Sheet1'!$C$2:$C$4)' ' 方式3,将方式2的使用定義為一個函數 .Range('B4').Formula = GetClosedData('F:\工作簿間數據引用\b', 'b.xlsx', 'Sheet1', 'D2:D4') End With wb.Close False '關閉打開的工作簿且不保存任何變化 Set wb = Nothing '釋放内存End SubFunction GetClosedData(ByVal path As String, ByVal WorkbookName As String, _ ByVal SheetName As String, ByVal RangeName As String) '參數Path 為工作簿路徑 '參數WorkbookName 為工作簿名稱 '參數SheetName 為工作表名稱 '參數RangeName 為單元格區域 Dim r r = '=sum('' & path & '\[' & WorkbookName & ']' r = r & SheetName & ''!' & RangeName & ')' GetClosedData = rEnd Function

ref

吳永佩 成麗君 《征服Excel VBA:讓你工作效率倍增的239 個實用技巧》

-End-

你可能想看:

有話要說...

取消
掃碼支持 支付碼