reemplazar para macro especiales caracteres buscar vba ms-access unicode ms-access-2013 dir

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.