iT邦幫忙

0

VBA抓取資料如何自動抓取

Sub 自動取得()
Dim strYear As String
strPath = Excel.ActiveWorkbook.Path & "" & Format(Date, "yyyy")
Filename = Format(Date, "yyyymmdd")
fday = Day(Date) ' 天數

           Cells(2, 2) = "=vlookup(" & Chr(65) & 2 & ",'" & strPath & "\[" & Filename & ".xlsx]工作表1'!$A$2:$E$6,5,FALSE)"

End Sub

請教各位
這段程式碼主要是將抓取當天日期檔案裡的某些儲存格的數值
但是執行後,都會出現要我手動選取檔案
我確定檔案是放在同一個資料夾裡面,SHEET名稱也是工作表1
謝謝

3
海綿寶寶
iT邦超人 1 級 ‧ 2017-03-31 10:00:15
最佳解答
Sub 自動取得()
   Dim strYear As String
   strPath = Excel.ActiveWorkbook.Path & "\" & Format(Date, "yyyy") & "\"
   Filename = Format(Date, "yyyymmdd")
   fday = Day(Date) ' 天數

   strFormula = "=vlookup(A2,'" & strPath & "[" & Filename & ".xlsx]工作表1'!$A$2:$E$6,5,FALSE)"
   MsgBox strFormula, vbOKOnly

   Cells(2, 2) = strFormula
End Sub

問題的原因很單純
就是「找不到檔案」

我不知道你的路徑長怎樣
上面的程式碼是假設
若目前目錄是 c:\home\user\excel
則 20170331.xlsx 放在 c:\home\user\excel\2017 目錄下

MsgBox 可以把一些變數值顯示出來
debug 時很好用
debug 之後可以拿掉或註解掉

還有一點小建議
不管寫什麼程式語言
除了註解和說明之外
不要寫中文(變數名稱、函式名稱...)
看起來很不專業

看更多先前的回應...收起先前的回應...
蟹老闆 iT邦大師 1 級 ‧ 2017-03-31 13:04:06 檢舉

正解在這裡
/images/emoticon/emoticon16.gif/images/emoticon/emoticon16.gif/images/emoticon/emoticon16.gif
搞錯了,路徑問題

你能體諒,我有/images/emoticon/emoticon68.gif
偶爾膽怯,你都了解

蟹老闆 iT邦大師 1 級 ‧ 2017-03-31 23:43:08 檢舉

/images/emoticon/emoticon45.gif/images/emoticon/emoticon45.gif/images/emoticon/emoticon45.gif

z22344566 iT邦新手 5 級 ‧ 2017-04-12 16:45:43 檢舉

謝謝建議/images/emoticon/emoticon08.gif

0
Ericssont39
iT邦好手 1 級 ‧ 2017-03-30 19:40:17

大大您好:

因為我沒有相關環境,所以,此篇連結供您參考

http://www.excel-easy.com/vba/examples/files-in-a-directory.html

0
蟹老闆
iT邦大師 1 級 ‧ 2017-03-31 12:44:58

因為你在B2欄位輸入了vlookup函數,而參照的位置又是別的檔案,所以會跳出檔案視窗,這是輸入參照時的特性,你可以試著在儲存格中輸入完整的公式(包含檔案路徑),例如:
=VLOOKUP(A2,'你的路徑[20170331.xlsx]工作表1'!$A$2:$E$6,5,FALSE)
然後按ENTER,你會發現還是跳檔案視窗讓你選檔案.
一般來說都已寫巨集了應該沒有必要在使用巨集寫入公式到儲存格中,若不是需要參考來源的變動值(取得後不會變動)可以參考以下做法

Sub GetValue()
    Dim FP As String
    Set FP = GetObject(Excel.ActiveWorkbook.Path & "\" & Format(Date, "yyyymmdd") & "\" & Format(Date, "yyyymmdd") & ".xls")
    fday = Day(Date) ' 天數
    Cells(2, 2) = Application.VLookup(Range("A2"), FP.Sheets("工作表1").[A2:E6], 5, False)
End Sub

說明:
在巨集中使用 Vlookup 函數取得對應值後寫入指定的儲存格

我要發表回答

立即登入回答