VBA-Excel导入问题:文件名

时间:2019-03-18 17:41:25

标签: excel vba

我要做什么的简短说明:

  • 将数据从多个.csv文件导入到包含多张图纸的单个工作簿中。

我遇到的问题的描述:

  • 原始.csv数据文件的后缀每天更改一次(数据库自动将报表运行的日期后缀作为整数后缀[例如,今天的日期后缀为03182019])。
  • 我创建了以下宏来查找必需的文件,然后提供一个InputBox以便手动输入后缀(报告日期为整数)。这段代码可以完美地工作,并且可以满足我的需要,但是我想消除手动输入后缀的需要,因为该宏将导入15个单独的工作簿。结果,我将不得不输入15次后缀-每个原始.csv文件一次。

    class B

如上所述,该宏工作正常,但我必须手动输入后缀。由于原始.csv文件始终下载到计算机上的同一位置,因此我尝试了此代码的各种变体,以消除手动输入后缀的需要。这是我尝试过的新代码:

Dim otherWB As Workbook, ThisWS As Worksheet
Dim sFileName As String
Dim sBase As String
Dim sExt As String
Dim sSuffix As String

Sheets("AJP EGC").Select
Set ThisWS = ActiveSheet

sBase = "/Users/plum/Downloads/AJP EGC "
sExt = ".csv"
sSuffix = InputBox("Enter suffix for filename")

sFileName = sBase & sSuffix & sExt
Workbooks.Open FileName:=sFileName

Set otherWB = ActiveWorkbook

Application.ScreenUpdating = False

ActiveSheet.Range("A1").CurrentRegion.Copy 
Destination:=ThisWS.Range("A1")

otherWB.Close False
ThisWS.Activate

Set ThisWS = Nothing
Set otherWB = Nothing

Application.ScreenUpdating = True

运行此代码时,出现以下运行时错误:

Run-time Error '1004'

此运行时错误图像显示选择了正确的后缀,并且我已经验证这是要导入的正确文件的确切名称;但是,该错误表明它无法在我的计算机上找到该文件。当我在错误框中选择“调试”时,将转到以下行:

    Dim otherWB As Workbook, ThisWS As Worksheet
    Dim sFileName As String
    Dim sBase As String
    Dim sExt As String

    Sheets("AJP EGC").Select
    Set ThisWS = ActiveSheet

    sBase = "/Users/plum/Downloads/AJP EGC "
    sExt = ".csv"

    sFileName = Dir(sBase & "*" & sExt)
    Workbooks.Open FileName:=sFileName

    Set otherWB = ActiveWorkbook

    Application.ScreenUpdating = False

    ActiveSheet.Range("A1").CurrentRegion.Copy 
    Destination:=ThisWS.Range("A1")

    otherWB.Close False
    ThisWS.Activate

    Set ThisWS = Nothing
    Set otherWB = Nothing

    Application.ScreenUpdating = True

单击“调试”后,当我将鼠标悬停在Workbooks.Open FileName:=sFileName 上时,将再次显示正确的文件名,尽管它不包括目录位置...只是文件名。文件没有更改位置,正如我所说,当我运行第一个代码时,我会提示用户手动输入后缀,它会发现文件没有问题。

我还尝试将原始代码中的FileName:=sFileName更改为sSuffix = InputBox,这将返回与sSuffix = "*"代码段相关的相同运行时错误。再次,正确的文件名显示在运行时错误消息中。

我不确定我在这里想念的是什么,感觉好像很痛苦。希望您能提供任何见解。我是VBA的相对菜鸟,为了解决这个问题,已经用尽了Google和此网站的精疲力尽。

1 个答案:

答案 0 :(得分:1)

Dir()函数返回文件的名称及其扩展名类型。

要解决此问题,请尝试:

sFileName = Dir(sBase & "*" & sExt)
sFileName = sBase & sFileName