2009-02-16 29 views
5

¿Cómo se abre un archivo CSV delimitado por punto y coma con VBA en Excel 2000?Apertura de archivo CSV delimitado por punto y coma

datos de la muestra Código

An ID;TEST20090222 
A Name;Firstname Surname 
A Date;11.05.2000 

Country:;SomeCountryName 
Currency;EUR 
CostA; 
CostB; 
CostC; 
Part1;10;20;30 
Part2;;;; 
Part3;34;56;87 

En Excel 11.8231.8221 SP3 con VBA 06/05/1025, puedo abrir un archivo delimitado por punto y coma con el siguiente código VBA:

Workbooks.OpenText filename:=myFilename, _ 
    DataType:=xlDelimited, Semicolon:=True, Local:=True 

Sin embargo, cuando el mismo código se ejecuta en Excel 9.0.8961 SP1 con VBA 06/05/1025, me sale el siguiente error:

Compile error: Named argument not found

Es decir --que think-- porque Excel 2000 no se conoce el nombre argumento "Local".

Por lo tanto, eliminé la parte "Local: = True". Pero el problema es que una línea completa del archivo CSV se escribe en una celda en lugar de dividirse en partes separadas por punto y coma.

He buscado en Internet una solución, pero no encontré nada útil y conciso.

¿Alguna idea?

[Actualización 17.02.2009]

Probé la sugerencia de user lc con la grabadora de macros. Sin embargo, los resultados fueron confusos.

Cuando abro el archivo CSV con el menú Archivo-> Abrir ... y luego selecciono el archivo CSV, los datos separados por punto y coma se analizan correctamente. Y el código grabado es tan simple como:

Workbooks.Open filename:= _ 
       "D:\testdata\Example 01 CSV\input.csv" 

Pero cuando se utiliza ese código VBA en mi macro, cada línea termina en una celda de nuevo.

De acuerdo con la sugerencia de user barrowc, también cambió el Windows "Configuración regional y de idioma" ajustes de "Alemán (Suiza)" a "Inglés (Estados Unidos)". Incluso después de reiniciar Excel, nada cambió, el mismo problema.

Me pregunto por qué está trabajando en user Remou 's sistema. ¿Qué configuraciones regionales y de idioma tienes?

+0

¿Podría publicar algunas líneas del archivo CSV para que podamos echarle un vistazo? –

+0

Agregue su información a la pregunta, por favor, no aquí en los comentarios. – isherwood

+0

@isherwood: Listo. – Lernkurve

Respuesta

3

[Actualización 22.02.2009]

Mientras tanto, he resuelto el problema escribiendo una función de importación mí en lugar de utilizar Workbooks.OpenText.

Acabo de abrir el archivo CSV como un archivo de texto, leer línea por línea, dividir cada línea en los elementos separados por punto y coma y escribir cada elemento en una celda.

Sub ImportCSVFile(filepath As String) 
    Dim line As String 
    Dim arrayOfElements 
    Dim linenumber As Integer 
    Dim elementnumber As Integer 
    Dim element As Variant 

    linenumber = 0 
    elementnumber = 0 

    Open filepath For Input As #1 ' Open file for input 
     Do While Not EOF(1) ' Loop until end of file 
      linenumber = linenumber + 1 
      Line Input #1, line 
      arrayOfElements = Split(line, ";") 

      elementnumber = 0 
      For Each element In arrayOfElements 
       elementnumber = elementnumber + 1 
       Cells(linenumber, elementnumber).Value = element 
      Next 
     Loop 
    Close #1 ' Close file. 
End Sub 

consiguió la inspiración de Shasur: http://vbadud.blogspot.com/2007/06/vba-read-text-files-with-leading.html

Todavía no sé por qué Workbooks.OpenText no funciona en mi sistema a pesar de que parece que funciona en el sistema user Remou 's. Supongo que podría tener algo que ver con el idioma del sistema operativo (inglés) y la configuración regional y de idioma (alemán, Suiza), pero no estoy seguro.

De todos modos, la solución funciona para mí. ¡Gracias a todos por sus sugerencias y ayuda!

+1

Usted me salvó el día. Ahora, mi macro funciona tanto en Dinamarca como en China. –

2

No estoy seguro, pero puede intentar grabar una macro para hacer lo mismo y verificar el código VBA que produce. Puede obtener una pista sobre lo que falta.

2

me parece que esto funciona para mí en Excel 2000:

Workbooks.OpenText filename:=myFilename, _ 
    DataType:=xlDelimited, Semicolon:=True 
2

Aquí está la OpenText método de Excel 2000:

OpenText Method

Loads and parses a text file as a new workbook with a single sheet that contains the parsed text-file data.

Syntax

expression.OpenText(Filename, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, DecimalSeparator, ThousandsSeparator)

source

y aquí está la versión de Excel 2003:

OpenText Method [Excel 2003 VBA Language Reference]

Loads and parses a text file as a new workbook with a single sheet that contains the parsed text-file data.

expression.OpenText(FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

source

así que Local fue de hecho un nuevo parámetro para Excel 2003 y no funcionará en Excel 2000

No hay idea de la causa del comportamiento erróneo. El parámetro Local se define como:

Local Optional Variant. Specify True if regional settings of the machine should be used for separators, numbers and data formatting.

Es posible que desee volver a verificar la configuración regional en el PC Excel 2000 y comprobar para ver si hay algo que puede hacer que los datos sean interpretados erróneamente. Además, trate de especificar explícitamente los parámetros DecimalSeparator y ThousandsSeparator en el método Excel 2000 y ver si eso ayuda

2

Una solución más: simplemente cambie el nombre de los archivos .csv a .txt y utilice el método de OpenText.

1

Prefiero:

Workbooks.Open fileName:=myFilename, UpdateLinks:=False, Local:=True 
0

menudo la coma esté marcada por la verdadera como un separador, donde por lo general es el separador decimal. Agregar DecimalSeparator: = "," y Bob es tu tío

0

Re ¿Alguna idea?

Si desea corregir un archivo para otras personas que utilizan Excel añadir esto en la primera línea del archivo sin las comillas seguido por un salto de línea: "sep =;”

Una manera fácil de abrir manualmente archivos de estúpidos es para cambiar el nombre de la extensión a .txt o .htm y luego a Excel use Archivo - Abrir.

De VBA Recomiendo buscar el método en MSDN y especificar manualmente cada parámetro, mi experiencia fue que esto eliminó la mayoría de los problemas regionales.

Cuestiones relacionadas