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
Excel 是否有VBA函数将文件名拉入代码?_Excel_Vba - Fatal编程技术网

Excel 是否有VBA函数将文件名拉入代码?

Excel 是否有VBA函数将文件名拉入代码?,excel,vba,Excel,Vba,我把一个宏放在一起运行股票供给报告分析;但是,我已经将其特定于单个文件。我使用文件名并提取一部分来创建列标题。目前,代码使用特定的文件路径/文件名来完成此任务,但我想将其作为一个通用函数,可以对多个文件进行操作,每个文件使用相同的结构 我甚至不知道从哪里开始引用文件名以继续 Dim MyPath As String, mps As Variant, mps_temp As String, mydate As Date, IntroDate As Date, i As Integer MyPat

我把一个宏放在一起运行股票供给报告分析;但是,我已经将其特定于单个文件。我使用文件名并提取一部分来创建列标题。目前,代码使用特定的文件路径/文件名来完成此任务,但我想将其作为一个通用函数,可以对多个文件进行操作,每个文件使用相同的结构

我甚至不知道从哪里开始引用文件名以继续

Dim MyPath As String, mps As Variant, mps_temp As String, mydate As Date, IntroDate As Date, i As Integer

MyPath = "C:\Users\Kirank\Documents\Stock Feed Analysis\HVL_Available_to_Sell_Report_with_Headers 2019.01.01"
mps = Split(MyPath, " ")

For i = LBound(mps) To UBound(mps)
    mps_temp = mps(UBound(mps) - i)
    If mps_temp Like "####.##.##" Then
        mydate = DateSerial(Mid(mps_temp, 1, 4), Mid(mps_temp, 6, 2), Mid(mps_temp, 9, 2))
        IntroDate = mydate - 181
        Exit For
    End If

我希望有代码将文件路径拉入MyPath字段,这样我就可以使用Split函数将日期从文件名中拉出来。

对不起,忽略此答案,因为我理解错了问题

您可以使用以下命令获取文件路径:

MyPath=thisworkbook.path
这对你有用吗?

希望下面的代码会有用

我使用了Do loop和Dir函数,以便循环浏览硬编码文件夹StockAnalysis中存在的所有excel文件,而不使用硬编码文件名

Dim Mypath As String, fileName As String, mps As Variant, mps_temp As String, mydate As Date, IntroDate As Date, i as integer

Application.ScreenUpdating = False

Mypath = "C:\Users\Kirank\Documents\Stock Feed Analysis\"

fileName = Dir(Mypath & "*.xl?")    'Dir functions support use of wildcards character * and ? used to look for all types of excel files in the folder.


Do While fileName <> ""

Count = Count + 1

mps = Split(fileName, " ")

For i = LBound(mps) To UBound(mps)
  mps_temp = mps(UBound(mps) - i)
    If mps_temp Like "####.##.##.xlsx" Then
      mydate = DateSerial(Mid(mps_temp, 1, 4), Mid(mps_temp, 6, 2),Mid(mps_temp, 9,2))
        IntroDate = mydate - 181      

        Cells(Count, 1).Value = IntroDate    'Saving Introdate in excel, feel free to change the destination.
        Exit For
    End If
Next i

fileName = Dir()

Loop

这是您打开的文件,还是包含宏代码的文件?@BigBen-这是我打开的文件,宏将单独存储。thisworkbook.path将获取包含宏的文件的路径,而不是用户打开的文件的路径。ActiveWorkbook.path是一个更好的选项,Application.FileDialogmsoFileDialogFilePicker用于单个文件或应用程序。FileDialogmsoFileDialogFolderPicker用于多个文件可能是最好的,具体取决于Op的确切设置。当我使用建议的选项时,查询输出显示为12:00:00 AM。当转换为日期时,会出现1/0/1900。日期应为2019年1月1日,文件名使用以下结构:yyyy.mm.dd.@KiranKelkar,因为For循环和分割部分都是不必要的。使用strev获取的最后一个索引。将文件扩展名修剪掉,然后抓取最右边的10个字符,并将这10个字符的字符串转换成一个合适的日期。1/0/1900 12:00:00 AM对应于VBA中的日期值0。啊,好的,很抱歉我误解了这个问题,与日期有关,假设mypath=my route/myfolder/01.01.2019,您可以使用以下方法获取日期:mydate=midmypath,lenmypath-9,2&/&mypath,lenmypath-6,2&/&mypath,lenmypath-3,4@Alvaro抄送-它可能是值得的,在它被否决之前