vba - para - excel reemplazar caracteres especiales
Trabajar con nombres de archivos Unicode en VBA(usando Dir, FileSystemObject, etc.) (1)
Estoy iterando a través de archivos en una carpeta (lo que significa que no sé los nombres en la carpeta), y tengo un archivo con un carácter polaco ł
.
La función Dir
convierte esto a un l
que significa que el nombre de archivo no se puede encontrar en una fecha posterior. He declarado la var a la que estoy asignando el valor dir como una cadena.
También probé FSO y getfolder, que también tiene el mismo problema.
También me di cuenta de que el diálogo de archivo (establecido en el modo de selección de carpeta) también convierte el personaje de arriba.
¿Es esto un error, o es algo que se puede solucionar?
Parece que está siendo engañado por el hecho de que, si bien el propio VBA admite caracteres Unicode, el entorno de desarrollo de VBA no lo hace. El editor de VBA todavía usa las codificaciones de caracteres antiguas de la "página de códigos" en función de la configuración regional en Windows.
Ciertamente FileSystemObject
et. Alabama. de hecho son compatibles con los caracteres Unicode en los nombres de los archivos, como se ilustra en el siguiente ejemplo. Con una carpeta que contiene tres archivos de texto sin formato
Nombre de archivo: 1_English.txt
Contenido: London is a city in England.
Nombre de archivo: 2_French.txt
Contenido: Paris is a city in France.
Nombre de archivo: 3_Połish.txt
Contenido: Warsaw is a city in Poland.
El siguiente código VBA ...
Option Compare Database
Option Explicit
Sub scanFiles()
Dim fso As New FileSystemObject, fldr As Folder, f As File
Set fldr = fso.GetFolder("C:/__tmp/so33685990/files")
For Each f In fldr.Files
Debug.Print f.Path
Next
Set f = Nothing
Set fldr = Nothing
Set fso = Nothing
End Sub
... produce el siguiente resultado en la ventana Inmediato ...
C:/__tmp/so33685990/files/1_English.txt
C:/__tmp/so33685990/files/2_French.txt
C:/__tmp/so33685990/files/3_Polish.txt
Tenga en cuenta que la instrucción Debug.Print
convierte el carácter ł
en l
porque el entorno de desarrollo de VBA no puede mostrar ł
utilizando mi configuración regional de Windows (inglés de EE. UU.).
Sin embargo, el siguiente código abre los tres archivos con éxito ...
Option Compare Database
Option Explicit
Sub scanFiles()
Dim fso As New FileSystemObject, fldr As Folder, f As File, ts As TextStream
Set fldr = fso.GetFolder("C:/__tmp/so33685990/files")
For Each f In fldr.Files
Set ts = fso.OpenTextFile(f.Path)
Debug.Print ts.ReadAll
ts.Close
Set ts = Nothing
Next
Set f = Nothing
Set fldr = Nothing
Set fso = Nothing
End Sub
... mostrando
London is a city in England.
Paris is a city in France.
Warsaw is a city in Poland.