如何根据文件名的左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
答案 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
或使用括号()
我唯一不清楚的是您运行此代码的位置以及如何迭代您发送的文件?
我ThisWorkBook
这需要代码在实际文件中运行。我认为你需要修改它,例如你循环遍历文件夹中的一堆文件并以这种方式访问文件名。
答案 1 :(得分:0)
谢谢Alex。我将测试您的代码并告诉您它是如何工作的。
我通过电子邮件每天至少收到10次此类文件。在将文件存储在按月份和文件类别命名的文件夹中之前,我在文件上运行宏。
但是考虑到这一点,你在文件夹中迭代文件的想法非常棒!您是否可以使用相同的代码迭代文件夹中的所有文件,最好是其子文件夹?
我的文件存储在层次结构中的文件夹中 - " C:\ Dropbox \ Work \ 2016 \ Jan \ ARDET Jan"要么 - " C:\ Dropbox \ Work \ 2016 \ Jan \ BkgInv Jan"