基于部分文件名的导入(Microsoft Excel)
Ira每周收到一个用文本分隔的文件,他使用宏将其导入Excel。文件名每周总是相同的,因此Ira可以将其嵌入到宏中。这使得导入非常容易。最近,供应商的新系统开始每周更改文件名,但前12个字符始终保持不变。 Ira想知道他如何编码宏以导入该文本文件,而无需每周修改文件名。
有几种方法可以解决此问题,所有这些都可能意味着对宏进行了广泛的重新编码。您选择的方法应取决于您每周的工作方式。例如,假设您知道存储传入文件的目录,文件名的前12个字符是什么以及文件名扩展名。有了这些信息,您可以简单地提示用户以这种方式提供文件名的后缀:
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sSuffix As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sSuffix = InputBox("Enter suffix for filename") sFileName = sBase & sSuffix & sExt Workbooks.Open Filename:=sFileName End Sub
显然,您可以根据需要更改基础和扩展名。本示例假定您要导入CSV文件,该文件应该可以在Excel中打开就可以了。
如果您只是将一组文件放在一个文件夹中,并且想要打开所有文件,则代码将变得运行起来更快一些,因为您无需获取用户输入。
Sub OpenImportFiles() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = Dir(sBase & "*" & sExt) If sFileName = "" Then MsgBox "No Files Found" Else Do While sFileName > "" Workbooks.Open Filename:=sFileName sFileName = Dir Loop End If End Sub
这种方法将打开文件夹中的所有CSV文件。要打开其他类型的文件,只需更改sExt变量中存储的内容即可。要记住的一件事是,由于文件夹中的所有CSV文件都已打开,这意味着它可能会打开前几周的导入文件。 (这可能不是您想要的。)
到目前为止,本文中介绍的所有内容均假设“导入”文件时,您要做的只是打开文件以便可以使用它。事实并非如此;您可能希望宏以某种方式处理导入文件并对其进行处理。该功能可能已经在您的旧宏中,因此您所需要做的就是更改标识导入文件的方式。在这种情况下,可以根据本技巧中已经提供的代码改编您使用的代码。
从文本文件中获取数据并将其填充到工作簿中的另一种方法是使用OpenText方法,如以下示例代码所示::
Sub OpenImportFile() Dim sFileName As String Dim sBase As String Dim sExt As String sBase = "c:\MyDirectory\First12Chars" sExt = ".csv" sFileName = sBase & "*" & ".txt" Workbooks.OpenText Filename:=sFileName, Origin:= _ xlMSDOS, StartRow:=1, DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:= False, Space:=False, _ Other:=False, FieldInfo:=Array(1, 1), _ TrailingMinusNumbers:=True End Sub
完全探讨OpenText方法的功能超出了本技巧的范围,但是结果是,应在工作簿中打开所有以12个基数开头的定界文本文件。
您可以通过更改参数来修改方法的工作方式。您需要特别注意用于指定应使用哪个分隔符的参数。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本提示(13472)适用于Microsoft Excel 2007、2010、2013和2016。