Misterios sin resolver de vba?

Tengo otra consulta para mi amigo Dante

Buscando encontré este archivo de lectura de documentos xml electrónicos, quise realizar una copia para hacer pruebas pero la macro da errores.

https://drive.google.com/file/d/1vyaKfL6-s20E4QvpRabCc-d0ftzEkUgy/view?usp=sharing

En el anterior enlace esta el directorio con los xml de prueba y los dos archivos el original y la copia.

Me podrías ayudar a resolver esta incógnita o misterio de vba ya que he revisado las todo y no he visto nada diferente.

1 Respuesta

Respuesta
2

Pues no es un misterio, jaja. No todas las macros que están en la red funcionan. O tal vez funciona para algo específico o en determinada versión.

En cuanto a leer documentos xml hay varias macros, pero el principal problema, creo yo, es que no hay un estándar de columnas o títulos para leer los documentos xml, por lo que deberás adecuar la macro para leer el tipo de documento que tú tienes.

O la otra opción es buscar en la red otra alternativa de código como html para leer documentos xml.

Suerte!

Primero quiero ir por pasos,  para lograr importar los xml míos. Por eso quise replicar el archivo original para hacer testeo sin modificar el original.  En esa acción he realizado todo, desde exportar los módulos hasta copiar el código en uno nuevo, revise las referencias de las bibliotecas, pero atasque en el porque el archivo original si ejecuta bien y el de testeo se para.

Una parte del código me daba interrupción en esta línea:

ruta = LCase(CreateObject([explorador]).BrowseForFolder(0, "selecciona la carpeta a procesar", 0, "").items.Item.Path)
'lo cambie por esta y funciono:
ruta = LCase(CreateObject("shell.application").BrowseForFolder(0, "selecciona la carpeta a procesar", 0, "").Items.Item.Path)

Luego volvió a parar en esta línea de código:

With CreateObject([openFile])

no he encontrado mucho con respecto a lo de escribir parte de la sintaxis el uso cocherte [ ].

Recibí la siguiente respuesta de un experto en otro foro, pero igual no me quedo muy claro el tema:

Los corchetes en VBA se utilizan para lo que la especificación del lenguaje llama "identificadores externos"; así es como puede invocar explícitamente Range el miembro predeterminado de un objeto, que es un miembro oculto llamado _Default, ya que los identificadores de VBA no pueden comenzar con un guión bajo, hacerlo MsgBox SomeRange._Defaultsería ilegal. Así que lo hacemos en su MsgBox SomeRange.[_Default]lugar y ahora el código se puede compilar y ejecutar. Lo mismo con el SomeCollection.[_NewEnum]miembro oculto, al crear clases de colección personalizadas.

Cuando el identificador entre corchetes no contiene ningún carácter ilegal en un identificador, entonces son puramente redundantes.

Varios hosts de VBA también implementan algún tipo de Evaluatemecanismo; cuando está alojado en Excel, puede hacer esto MsgBox [A1]y obtendrá el valor de la celda A1 de la hoja de trabajo activa; en este contexto, [A1]es una expresión que VBA toma y pasa a la aplicación host (aquí Excel), que la evalúa y devuelve un resultado a VBA, en este caso una Rangereferencia de objeto.

Entonces, lo que CreateObject([explorador])realmente hace, es realmente esto:

CreateObject(ActiveSheet.Range("explorador").Value)

Excepto que Excel no entiende a qué exploradorse refiere (¿se supone que la hoja define un exploradorrango con nombre? No puedo imaginar por qué querrías hacer eso), y regresa con lo que se mostraría como un #NAME?error en un hoja de trabajo, envuelta en un Variant/Errorvalor:

CreateObject(CVErr(XlErrName)) 'type mismatch error every time!

¡Pierde los corchetes, perderás el dolor de cabeza con ellos!

Suponiendo que exploradory openfileson Stringvariables que contienen un ProgID válido / registrado, CreateObject(explorador)deberían funcionar según lo previsto.

Considere usar cadenas literales o constantes declaradas con CreateObject: tener una capa de indirección aquí oculta exactamente qué tipo de objeto COM se está creando. With CreateObject("Scripting.FileSystemObject")solo puede fallar si Scripting.FileSystemObjectno está en el registro.

No sé para qué es esto:

With CreateObject([openFile])

Pero supongo que es para abrir el archivo xml

Sin ver el total de la macro, no puedo más que suponer. Una vez abierto el archivo, supongo procede a pasar los datos a las celdas.

https://drive.google.com/file/d/1vyaKfL6-s20E4QvpRabCc-d0ftzEkUgy/view?usp=sharing 

Para mejor comprensión de lo que digo, hay esta una carpeta con los dos archivos y una carpeta 07 donde están los archivos xml de prueba.

Perdona, pero por cuestiones de seguridad, no voy a descargar el archivo.

Si el archivo original funciona, supongo deberías seguir trabajando en ese archivo. Supongo que algo le falta a tu archivo test.

Te los comparto individualmente haber si puedes darle un vistazo, es que llevo semanas viendo donde están las diferencias

https://drive.google.com/file/d/1i84F5IrLVzLXy9KqF57ildEUYfstyp8_/view?usp=sharing

https://drive.google.com/file/d/1_bNXl6txNyCzr13jS3FXTZUWx7mujUu_/view?usp=sharing

Perdona que insista, pero no voy a descargar archivos. Si no te funciona esa macro, supongo deberás buscar otra alternativa.

Aquí hay compendio de las preguntas que he respondido con macros para importar archivos xml

https://www.todoexpertos.com/preguntas/8h4kv7alrhx8kusc/macro-excel-para-importar-archivos-xml 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas