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