Ira recibe un archivo delimitado por texto semanal que importa a Excel mediante una macro. El nombre del archivo era siempre el mismo cada semana, por lo que Ira pudo insertarlo en la macro; esto hizo que la importación fuera muy fácil. Recientemente, el nuevo sistema del proveedor comenzó a cambiar el nombre del archivo cada semana, pero los primeros 12 caracteres siempre son los mismos. Ira se pregunta cómo puede codificar la macro para importar este archivo de texto sin necesidad de modificar el nombre del archivo cada semana.

Hay algunas formas de abordar este problema, y ​​todas ellas pueden significar una recodificación extensa de su macro. El método que elija dependerá de cómo quiera hacer su trabajo cada semana. Por ejemplo, digamos que conoce el directorio en el que se almacena el archivo entrante, cuáles son los 12 caracteres base para el nombre del archivo y la extensión del nombre del archivo. Con esa información, simplemente puede pedirle al usuario que proporcione el sufijo para el nombre del archivo, de esta manera:

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

Obviamente, puede cambiar la base y la extensión como desee. Este ejemplo asume que está importando un archivo CSV, que debería abrirse en Excel sin problemas.

Si simplemente está colocando un grupo de archivos en una carpeta y desea abrirlos todos, entonces el código se vuelve un poco más rápido de ejecutar porque no necesita obtener información del usuario.

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

Este enfoque abre todos los archivos CSV en la carpeta; para abrir un tipo diferente de archivo, simplemente cambie lo que está almacenado en la variable sExt. Una cosa para recordar es que dado que se abren todos los archivos CSV en la carpeta, eso significa que puede abrir archivos de importación de semanas anteriores. (Esto puede ser lo que quieres o no).

Todo lo presentado en este consejo hasta ahora asume que cuando «importa» un archivo, todo lo que desea hacer es abrir el archivo para poder trabajar con él. Puede que ese no sea el caso; es posible que desee que su macro procese el archivo de importación de alguna manera y haga algo con él. Es posible que esa funcionalidad ya esté en su macro anterior, por lo que todo lo que necesita hacer es cambiar la forma en que se identifica el archivo de importación. Si este es el caso, el código que utiliza puede adaptarse del código que ya se presenta en este consejo.

Otra forma de tomar los datos de un archivo de texto y guardarlos en un libro de trabajo es usar el método OpenText, como se muestra en este código de ejemplo .:

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

Una exploración completa de lo que hace el método OpenText está más allá del alcance de esta sugerencia, pero el resultado es que todos los archivos de texto delimitados que comienzan con los 12 caracteres base deben abrirse en sus libros de trabajo.

Puede modificar el funcionamiento del método cambiando los parámetros. Deberá prestar especial atención a los parámetros utilizados para especificar qué carácter delimitador se debe utilizar.

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (13472) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.