根据文件名的字符调用宏



如何根据文件名的左n个字符调用宏?

详:
我每个月都会通过电子邮件收到许多文件,这些文件的名称包含几个字符,后跟日期或序列号。

例如
- 应收账款文件命名为 ARDET 25-01-16.xls、ARDET 19-01-16.xls、ARDET 31-12-15.xls等- 发票文件命名为 Bkg_Inv_01.xls、Bkg_Inv_02.xls、Bkg_Inv_03.xls等

我已经记录了各种宏以在这些文件上运行。例如,我有Sub ARDET()和Sub Bkg_Inv()来处理上述文件。

如果文件名的前 5 个字符与某些文本匹配,我想创建一个宏来调用上述 Subs。

我正在寻找的代码需要大致使用以下语法:

Sub Call_Macro_if_leftn_is()
' Making variables
This_File_name  = Currently open file's filename
n = InputBox("Enter the total number of characters from the left of the filename to match")
y = Left n characters of This_File_name

'If Then statements to call other macros
If y = ARDET
Call ARDET()
Else if y = Bkg_I
Call Bkg_Inv()
Else if y = PDC_I
Call PDC_Inv()
Else Msgbox "Filename does not match specified characters"
End Sub

我会尝试这样的设置:

Sub RunCodeBasedOnFileName()
    Dim fileID As String
    fileID = VBA.Left$(ThisWorkbook.Name, 5)
    If fileID = "ARDET" Then
        ARDET
    ElseIf fileID = "Bkg_I" Then
        Bkg_I
    ElseIf fileID = "PDC_I" Then
        PDC_I
    Else
        MsgBox "This file is of unknown origin!"
    End If
End Sub
Sub ARDET()
    'Do stuff
End Sub
Sub Bkg_I()
    'Do stuff
End Sub
Sub PDC_I()
    'Do stuff
End Sub
  • 调用 sub 时,您无需使用 Call()括号
  • 我会避免让人们输入前 5 个字符 - 而是以编程方式获取它

我唯一不清楚的是你从哪里运行这段代码,你如何迭代你发送的文件?

在我ThisWorkBook的地方,这需要代码在实际文件中运行。我认为您需要对其进行修改,例如,您循环访问文件夹中的一堆文件并以这种方式访问文件名。

谢谢亚历克斯。我将测试您的代码并告诉您它是如何工作的。

我每天至少通过电子邮件获取此类文件10次。在将宏存储在按文件月份和文件类别命名的文件夹中之前,我会对文件运行宏。

但是想想看,您遍历文件夹中文件的想法很棒!您能否使用相同的代码遍历文件夹中的所有文件,最好是遍历其子文件夹?

我的文件存储在层次结构中的文件夹中,如下所示- "C:\Dropbox\Work\2016\Jan\ARDET Jan" 或- "C:\Dropbox\Work\2016\Jan\BkgInv Jan"

最新更新