Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于文件名字符调用宏_Vba_Excel - Fatal编程技术网

Vba 基于文件名字符调用宏

Vba 基于文件名字符调用宏,vba,excel,Vba,Excel,如何根据文件名的左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()来处理上述文件 如

如何根据文件名的左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个字符与某些文本匹配,我想创建一个宏来调用上述子文件

我要查找的代码需要大致采用以下语法:

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个字符,而是通过编程方式获取
我唯一不清楚的一点是,您从何处运行此代码,以及如何迭代发送的文件


如果我有
此工作簿
,则需要在实际文件中运行代码。我认为您需要修改它,例如,在文件夹中循环一组文件,并以这种方式访问文件名。

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

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

但是仔细想想,您在文件夹中迭代文件的想法非常棒!您能让相同的代码迭代一个文件夹中的所有文件,最好是它的子文件夹吗

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

我认为您可以使用函数匹配字符串的一部分,也可以使用函数从字符串的开头或结尾获取前n个字符,然后使用它测试匹配是-很容易在文件夹和子文件夹上迭代。在这个网站上有很多例子,如果你搜索的话。祝你好运。我找到了一种迭代子文件夹的方法。但是,我们如何修改代码以处理文件名中包含特定字符串的文件,而不是使用文件名的左字符。这样可以在字符串中查找文本。