excel - VBA-Excel 导入问题回复:文件名
问题描述
简要说明我正在尝试做的事情:
- 将多个 .csv 文件中的数据导入到具有多个工作表的单个工作簿中。
我遇到的问题描述:
- 原始 .csv 数据文件的后缀每天都在变化(数据库会自动将报告运行的日期添加为整数的后缀[例如,今天的日期将是 03182019 的后缀])。
我创建了下面的宏来定位必要的文件,然后提供一个 InputBox 以便手动输入后缀(将日期报告为整数)。这段代码完美运行,在很大程度上满足了我的需求,但我想消除手动输入后缀的需要,因为宏将导入 15 个单独的工作簿。因此,我必须输入 15 次后缀 - 每个原始 .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
如上所述,这个宏工作正常,但我必须手动输入后缀。我尝试了此代码的变体,以消除手动输入后缀的需要,因为原始 .csv 文件总是下载到我计算机上的同一位置。这是我尝试的新代码:
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 = "*"
返回与FileName:=sFileName
代码段相关的相同运行时错误。同样,正确的文件名显示在运行时错误消息中。
我不确定我在这里错过了什么,并且觉得它必须是非常明显的东西。将不胜感激您能提供的任何见解。我是 VBA 的相对菜鸟,并且已经用尽了谷歌和这个网站来解决这个问题。
解决方案
该Dir()
函数返回文件名及其扩展类型。
要解决此问题,请尝试:
sFileName = Dir(sBase & "*" & sExt)
sFileName = sBase & sFileName
推荐阅读
- keras - Keras Tuner 错误:搜索期间使用的所有回调都应该是可深度复制的
- firebase - 如何从我的科尔多瓦应用程序将图像上传到 Firebase 存储
- c# - 如何在 ASP.NET MVC 网站上使用 IronPython
- python - 泛型、类和实例
- python - Python 聊天应用程序:“尝试对非套接字的操作进行操作”
- python - 如何正确阅读 discord 上的嵌入消息?
- unity3d - OnCollisionEnter 触发时更改文本
- c - 从文件中读取数据并在排序后将其写入文件
- python - os.rename() 的问题 - 获取 [WinError 5] 访问被拒绝:
- angular - 在 .ts 文件中设置 Angular 属性