Board logo

標題: 如何取得某個檔案的儲存格資料?(檔案檔名,寫在存儲存格內) [打印本頁]

作者: eigen    時間: 2013-11-6 14:50     標題: 如何取得某個檔案的儲存格資料?(檔案檔名,寫在存儲存格內)

本帖最後由 eigen 於 2013-11-6 14:52 編輯

如何取得某個檔案的儲存格資料?(檔案檔名,寫在存儲存格內)

目前做出來的:

https://dl.dropboxusercontent.com/u/12575824/Book3.xls

我參考 http://forum.twbts.com/thread-6224-1-1.html 完成了 開啟檔案讀取檔名的功能。

現在我想要的是參考這個儲存格,動態抓取檔案內的資料。

原本寫死的是這樣 A2 = 'D:\report\[20131106 銷貨.xls]Sheet4'!$E7

Setup!B1=D:\report\20131106 銷貨.xls

現在我希望是 A2 = Setup!B1   !Sheet4'!$E7

這樣該用什麼語法來做?

麻煩大德指點,謝謝~~
作者: luhpro    時間: 2013-11-6 23:15

如何取得某個檔案的儲存格資料?(檔案檔名,寫在存儲存格內)

目前做出來的:

https://dl.dropboxus ...
eigen 發表於 2013-11-6 14:50


A2=INDIRECT(CONCATENATE("'",LEFTB(CELL("filename",Setup!B1),FINDB("]",CELL("filename",Setup!B1),1)),"Sheet4","'","!E7"),1)
作者: eigen    時間: 2013-11-7 10:57

A2=INDIRECT(CONCATENATE("'",LEFTB(CELL("filename",Setup!B1),FINDB("]",CELL("filename",Setup!B1), ...
luhpro 發表於 2013-11-6 23:15



   謝謝~~不過....cell 抓到的目前檔案的filename ,而我要的檔案 filename 已經寫在 Setup!B1
作者: eigen    時間: 2013-11-7 12:09

本帖最後由 eigen 於 2013-11-7 12:11 編輯

我改寫 http://forum.twbts.com/thread-6224-1-1.html  抓檔案的方式
  1. Private Sub CommandButton1_Click()
  2.         Dim file_Input As String
  3.         Dim file_path As String
  4.         Dim file_name As String
  5.         Dim file_index As Integer
  6.         file_Input = Application.GetOpenFilename("EXCE檔(*.XLS),*xls")
  7.         

  8.         If file_Input <> "" Then
  9.                 file_index = InStrRev(file_Input, "\")
  10.                
  11.                 file_path = Left(file_Input, InStrRev(file_Input, "\"))
  12.                 file_name = Right(file_Input, Len(file_Input) - InStrRev(file_Input, "\"))
  13.                
  14.                 MsgBox "Reference " & file_Input
  15.                 'Cells(1, 2) = file_path
  16.                 Range("B1").Value = file_path & "[" & file_name & "]"
  17.                
  18. '                Range("B2").Value = file_path
  19. '               Range("B3").Value = file_name
  20.   '              Range("B4").Value = file_Input
  21.         End If

  22. End Sub
複製代碼
儲存格的顯示就改成這樣
Setup!B1= D:\report\[20131106 銷貨.xls]

我又在 名稱 定義了 ref_point ="'"&Setup!$B$1&Setup!$B$8&"'!"

如果在儲存格直接填入 ref_point ='D:\report\[20131106 銷貨.xls]Sheet4'!

接著我參考的 luhpro 的寫法  儲存格=indirect(ref_point&"A7",1)  終於可以抓到另一個檔案的資料了

目前的進度

https://dl.dropboxusercontent.com/u/12575824/Book3.xls

現在有兩個問題

一、indirect(ref_point&"A7",1) 會顯示 #REF! ,除非將 D:\report\20131106 銷貨.xls 開啟

二、indirect(ref_point&"A7",1) copy 到其它儲存格, a7不會遞增成 a8 a9 a10 a11....

請高手幫幫忙,這兩個問題怎麼克服,謝謝:'(

作者: luhpro    時間: 2013-11-7 21:55

本帖最後由 luhpro 於 2013-11-7 21:57 編輯
...
現在有兩個問題
一、indirect(ref_point&"A7",1) 會顯示 #REF! ,除非將 D:\report\20131106 銷貨.xls 開啟
二、indirect(ref_point&"A7",1) copy 到其它儲存格, a7不會遞增成 a8 a9 a10 a11....
請高手幫幫忙,這兩個問題怎麼克服,謝謝:'(
eigen 發表於 2013-11-7 12:09

一、 標的檔案未開啟的狀態下抓不到儲存格內容是正常的.
若想要避免秀出錯誤訊息的話,
我較常用的方式是在會出現 #REF! 的公式上套用 :
=IF(ISERROR(原公式),"",原公式)
的形式,
這樣若有錯誤發生則變成不顯示任何文字.

二、可以用 indirect(ref_point&"A"&ROW()+1,1)
以上假設公式放在 第 6 列任一儲存格上,
ROW() = 6 再 + 1 就是 7 了,
至於其下一列 : ROW() = 7 再 + 1 就是 8 了. (加減多少依公式所在儲存格的列號來決定)
作者: Hsieh    時間: 2013-11-7 23:27

回復 4# eigen

看來你是要讓輸出頁的儲存格,依據Setup的B1與B8所組成的外部參照字串做連結
例如:輸出頁A4要得到D:\report\[20131106 銷貨.xls]Sheet4!A4的值
所以輸出頁A4必須是公式='D:\report\[20131106 銷貨.xls]Sheet4'!A4
    所以程式碼就直接寫入公式即可
Sheet2.[A4] = "='" & [B1] & [B8] & "'!A4"
  1. Private Sub CommandButton1_Click()
  2.         Dim file_Input As String
  3.         file_Input = Application.GetOpenFilename("EXCEL檔(*.XLS),*xls")
  4.         If file_Input <> "" Then
  5.                 MsgBox "Reference " & file_Input
  6.                 Range("B1").Value = Replace(file_Input, Dir(file_Input), "[" & Dir(file_Input) & "]") '轉成參照形式的字串
  7.                 Sheet2.[A4] = "='" & [B1] & [B8] & "'!A4" '輸出頁A4寫入公式
  8.         End If
  9. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)