尝试使用包含随机数的原始名称标识和重命名文件

问题描述 投票:0回答:1

您好我在尝试重命名文件夹中的文件(具有多个类似的文件),但即使使用通配符方法我也很难识别它。原始文件名如下所示:“2018_02_26_20180228_XXXXXX_GDW_Audit_CView_Report.txt”所以我唯一的识别方法是知道部分名称(“_GDW_Audit_CView_Report.txt”),因为多个文件的日期相同。我编写了以下代码,当我尝试运行它时,它会给出Path / File Access错误。任何帮助,将不胜感激。

Option Explicit
Sub HGDW_WKD()

    Dim myDateTemp As String
    Dim myDate1 As String
    Dim myDate2 As String
    Dim HGDW_CV1 As String
    Dim HGDW_CV2 As String

    myDateTemp = Format(Date, "yyyy-mm-dd")
    myDate1 = Replace(myDateTemp, "-", "_")
    myDate2 = Format(Date, "yyyymmdd")

    HGDW_CV1 = myDate1 & "_" & myDate2 & "*_GDW_Audit_CView_Report.txt*"
    HGDW_CV2 = "35999_HR_Global_Data_Warehouse_CView_PROD_" & myDate2 & ".txt"

    Name "C:\Users\bf91955\SourceFldr\" & HGDW_CV1 As _ 
    "C:\Users\bf91955\SourceFldr\" & HGDW_CV2

End Sub
excel vba excel-vba filesystems
1个回答
3
投票

我不确定这是不是你的意思,但你可以使用带通配符的Dir函数来尝试获取文件名。

所以说我有一个名为的文件

2018_02_28_20180228_XXXXXX_GDW_Audit_CView_Report.txt

我可以检索实际名称,如下所示。第一场比赛。如果没有找到真正的错误处理,则只测试该字符串被赋予的值不是初始化的值。您可以将文件夹路径作为变量传递。

Sub TEST()

    Dim fname As String

    fname = Dir("C:\Users\User\Desktop\Test\*_GDW_Audit_CView_Report.txt")

    If fname <> vbNullString Then

        Debug.Print fname

    End If

End Sub

传递文件夹变量和date1的示例(注意date1 =“2018_02_28”此时):

Sub TEST()

    Dim myDate1 As String

    myDate1 = Format$(Date, "yyyy_mm_dd")

    'Debug.Print myDate1

    Dim fname As String
    Dim folderPath As String

    folderPath = "C:\Users\User\Desktop\Test"

    fname = Dir(folderPath & Application.PathSeparator & myDate1 & "*_GDW_Audit_CView_Report.txt")

    If fname <> vbNullString Then

        Debug.Print fname

    End If

End Sub

为什么我使用Application.PathSeparator?在尝试添加分隔符之前,您应该真正测试分隔符的存在。在这种情况下,我出于兼容性原因使用它。这将在Mac和Windows上使用正确的分隔符。

有关信息,请参阅:

Excel 2016 Power Programming with VBA (2016) Part IV. Developing Excel Applications , Chapter 21. Understanding Compatibility Issues

引用:

如果您的代码处理路径和文件名,则需要使用适当的路径分隔符构建路径(Mac的冒号,Windows的反斜杠)。更好的方法是避免对路径分隔符进行硬编码并使用VBA来确定它。以下语句将路径分隔符分配给名为PathSep的变量:

PathSep = Application.PathSeparator

参考:

http://www.excelfunctions.net/vba-dir-function.html

© www.soinside.com 2019 - 2024. All rights reserved.