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.