根据文件名的字符调用宏

时间:2016-01-30 09:17:49

标签: excel vba excel-vba

如何根据文件名的左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

2 个答案:

答案 0 :(得分:1)

我尝试这样的设置:

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
  • 在调用子
  • 时,您不需要使用Call或使用括号()
  • 我避免让人们输入前5个字符 - 而是以编程方式获取

我唯一不清楚的是您运行此代码的位置以及如何迭代您发送的文件?

ThisWorkBook这需要代码在实际文件中运行。我认为你需要修改它,例如你循环遍历文件夹中的一堆文件并以这种方式访问​​文件名。

答案 1 :(得分:0)

谢谢Alex。我将测试您的代码并告诉您它是如何工作的。

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

但是考虑到这一点,你在文件夹中迭代文件的想法非常棒!您是否可以使用相同的代码迭代文件夹中的所有文件,最好是其子文件夹?

我的文件存储在层次结构中的文件夹中 - " C:\ Dropbox \ Work \ 2016 \ Jan \ ARDET Jan"要么 - " C:\ Dropbox \ Work \ 2016 \ Jan \ BkgInv Jan"