2015-06-03 153 views
2

我想弄清楚一行代碼來打開文件。 路徑是不變的,那就是VBA代碼打開更改文件名

"H:\silly\goose\*filename.xlsm*" 

然而,這個文件的名字將每一次我嘗試運行此宏觀變化。這是因爲我將使用這個宏來自動執行每週運行的報告。每個報告都與標題中的日期一起保存,所有報告都保存在同一個文件夾中,這意味着我不能只是將它們命名爲完全相同。 例子:

H:\傻\鵝\報告06-03-15.xlsm
H:\傻\鵝\報告05-27-15.xlsm

唯一的幫助一塊信息是這個報告將在每個星期三運行。因此,每個文件名將有7天的差異。不過,我不知道我在這裏可以用Date方法做些什麼。

+1

你能證明你用它來拯救* *文件名中的代碼?邏輯應該幾乎相同。 –

+3

否則,我們需要更多信息。應用程序應該如何知道要打開哪個文件?它是否總是打開*最近的*文件(即,<7天前生成的文件? –

+0

)使用您給出的2個示例,我們知道「06-03-15」>「05-27-15」。通過文件名進行這種比較,如果爲真,那麼讓新文件比較文件名打開,最高的數字自然會冒泡到表面上。 –

回答

0

This reference具有這樣的功能:

Function GetFileList(FileSpec As String) As Variant 
' Returns an array of filenames that match FileSpec 
' If no matching files are found, it returns False 

    Dim FileArray() As Variant 
    Dim FileCount As Integer 
    Dim FileName As String 

    On Error GoTo NoFilesFound 

    FileCount = 0 
    FileName = Dir(FileSpec) 
    If FileName = "" Then GoTo NoFilesFound 

' Loop until no more matching files are found 
    Do While FileName <> "" 
     FileCount = FileCount + 1 
     ReDim Preserve FileArray(1 To FileCount) 
     FileArray(FileCount) = FileName 
     FileName = Dir() 
    Loop 
    GetFileList = FileArray 
    Exit Function 

' Error handler 
NoFilesFound: 
    GetFileList = False 
End Function 

現在你可以這樣做:

p = "H:\silly\goose\*.xlsm" 
x = GetFileList(p) 

並獲得文件你想

2

你需要做的是什麼重新構造你的文件名第一。

Const fpath As String = "H:\silly\goose\" ' your fixed folder 
Dim fname As String 

' Below gives you the Wednesday of the week 
fname = Format(Date - (Weekday(Date) - 1) + 3, "mm-dd-yy") ' returns 06-03-15 if run today 
fname = "Report " & fname & ".xlsm" ' returns Report 06-03-15.xlsm 
fname = fpath & fname ' returns H:\silly\goose\Report 06-03-15.xlsm 

然後執行該文件打開:

Dim wb As Workbook 
Set wb = Workbooks.Open(fname) 
If wb Is Nothing Then MsgBox "File does not exist": Exit Sub 

' Rest of your code goes here which works on wb Object 
+0

你能解釋一下這行代表什麼意思?:Format(Date - Weekday(Date)+ 3 ,「mm-dd-yy」)我刪除了-1,因爲這個宏應該總是在星期三運行。但是,我仍然不明白星期幾(日期)+3 – Tawm

+0

@Tawm這個簡單的獲取*星期三*,這樣你就可以創建一個文件,所以本週它會返回* 6/3/2015 *,但下週運行它將返回* 2013年6月10日*。現在,如果這不是你所需要的,相應地修改你的問題並解釋一些你需要的東西。 – L42