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。