Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用文件中最近的日期名称打开excel文件_Excel_Vba - Fatal编程技术网

使用文件中最近的日期名称打开excel文件

使用文件中最近的日期名称打开excel文件,excel,vba,Excel,Vba,我每天都做一份报告,名为“英国合同价值-年月日” 其中,dd-mm-yy表示运行报告的日期、月份和年份 我尝试了下面的代码,但似乎找不到该文件 有人能帮我修改下面的代码吗?非常感谢 Sub OpenLatest() a matching date Dim dtTestDate As Date Dim sStartWB As String Const sPath As String = "C:\Users\Documents\Weekly Contract Values Analysis\

我每天都做一份报告,名为“英国合同价值-年月日”

其中,
dd-mm-yy
表示运行报告的日期、月份和年份

我尝试了下面的代码,但似乎找不到该文件

有人能帮我修改下面的代码吗?非常感谢

 Sub OpenLatest()
 a matching date

Dim dtTestDate As Date
Dim sStartWB As String

Const sPath As String = "C:\Users\Documents\Weekly Contract Values Analysis\"
Const dtEarliest = #1/1/2018#  

  dtTestDate = Date
  sStartWB = ActiveWorkbook.Name

  While ActiveWorkbook.Name = sStartWB And dtTestDate >= dtEarliest
    On Error Resume Next
    Workbooks.Open sPath & "Contract Values UK - " & Format(dtTestDate, "(DD-MM-YY)") & ".xlsm"
    dtTestDate = dtTestDate - 1
    On Error GoTo 0
 Wend

 If ActiveWorkbook.Name = sStartWB Then MsgBox "Earlier file not found."
 End Sub

这就是你想要的吗?(未经测试)

我假设文件名类似于
Contract Values UK-dd-mm-yy.xlsm

Const sPath As String = "C:\Users\Documents\Weekly Contract Values Analysis\"
Const dtEarliest = #1/1/2018#

Sub Sample()
    Dim i As Long
    Dim dt As Date: dt = Date
    Dim flName As String, dtPart As String

    '~~> Loop through dates in reverse
    For i = dt To dtEarliest Step -1
        dtPart = Format(i, "dd-mm-yy")
        '~~> Create your file name
        flName = "Contract Values UK - " & dtPart & ".xlsm"

        '~~> Check if exists
        If Dir(sPath & flName) <> "" Then
            MsgBox sPath & flName '<~~ You can now work with this file
            Exit For
        End If
    Next i
End Sub
Const sPath As String=“C:\Users\Documents\Weekly Contract Values Analysis\”
Const dt最早=#1/1/2018#
子样本()
我想我会坚持多久
尺寸dt作为日期:dt=日期
Dim flName作为字符串,dtPart作为字符串
“~~>反向循环日期
对于i=dt至dt,最早的步骤为-1
dtPart=格式(i,“dd-mm-yy”)
“~~>创建您的文件名
flName=“合同价值英国-”&dtPart&“.xlsm”
“~~>检查是否存在
如果目录(sPath&flName)“,则

MsgBox sPath&flName'的可能重复项。方法是相同的,而不是
FileDateTime
检查文件名中的日期,您可以使用类似
FileNameDate=Mid$(file,Len(file)-13,8)
的内容从文件名中提取该日期。另请看@peh yes,这是一种相同的原则(没有发现早期的oops),尽管我并不完全理解代码,但我已经尝试过更新和定制我的问题,但无法让任何东西正常工作。我已将代码更新为最新的解决方案,但无法让excel找到该文件:(您能告诉我哪里出错了吗?然后我将此标记为重复。@Pᴇʜ我还包括了一个文件名的图像,我在路径中弄乱了文件名,你想在“文件名”或“文件属性”中查找最近的日期吗?不确定为什么要在
IF
条件下检查
ActiveWorkbook.Name=sStartWB
,因为这将始终与分配前的行中相同。我将使用
DIR
浏览文件夹中的所有文件,然后打开所需的文件,这将返回文件链接,但如何打开文件文件:')文件名现在是个问题,有一张文件的图片(以今天的日期为例)。我要么找不到文件,要么打开文件:'(只需将
MsgBox sPath&flName
替换为
Set wb=Workbooks.open(sPath&flName)
;)好的,这就行了!唯一的问题是,即使我删除了消息框,消息框仍然打开:/我想我不小心在某处添加了一些东西,但可能会感谢!