Falla en Macro que captura nombre de Libro

Que tal a todos, tengo una macro que captura información de un formato a una base de datos, como el formato (que esta en Excel) puede cambiar de nombre es necesario que la macro se ejecute sin importar esto, así genere el siguiente código pero no conseguí el resultado esperado, espero que puedan ayudarme.
Sub Captura()
    MiRuta = ActiveWorkbook.Path
    MiNombre = ActiveWorkbook.Name
    Application.DisplayAlerts = False
Abrir_Base   'esta es una subrurina que abre la base de datos
    Windows("Base Pedido Interno.xlsx").Activate
    Sheets("Cliente").Select
    ActiveCell.FormulaR1C1 = "=MiNombre!Cliente"
' Aqui se presenta el error pues en la celda activa que la formula pero no aparece el valor correspondiente, y genera error #NOMBRE? A menos que se despliegue y ubique nuvamente el archivo base es decir lo almacenado en la variable MiNombre e incluso tomando toda la ruta se genera el mismo error.
    ActiveCell.Offset(0, 1) = "=MiNombre!NIT"
    ActiveCell.Offset(0, 2) = "=MiNombre!Contacto_Cliente"
    ActiveCell.Offset(0, 3) = "=MiNombre!Fecha_Pedido"

1 respuesta

Respuesta
1
Las fórmulas R1C1 son fórmulas que hacen referencia a R(Row=Fila) y a C(Column=Columna) no haría falta que pusieses en la macro fórmula sino value
ActiveCell.Value=MiNombre
Lo siguiente que pones NIT, Contacto_Cliente Fecha_Pedido no sé a que te refieres si son valores de alguna celda o es lo que quieres que figure como valor de la celda.
Aclarame esto y continuamos para generar el valor de la celda.
>Un saludo
>Julio
Hola, gracias por tu respuesta, referente a lo que me dices te aclaro un poco
Mi nombre = al nombre del libro activo o sobre el cual se ejecuta la macro
Cliente, NIT, Contacto_Cliente, Fecha_Pedido = a los nombres de los campos de dicho libro activo que seran copiados a otro libro que posee una estructura de base de datos
Esto es que aunque el archivo cambie de nombre la macro igual captura los datos de los campos y los llevara a la base de datos, a través de la ruta MiNombreCampo.
Otra forma que se me ocurría para capturar los datos es almacenando el valor de los campos en variables, lo complejo es que son 57 campos, aunque estos no cambian, siempre se mantienen en el mismo rango por eso use nombres para algunos
Espero que esto aclare más el problema, y de nuevo gracias
Pues de todas formas el código que te he enviado esta correcto, yo en tu lugar (sin dudarlo) me pondría a crear las 57 variables, harás el trabajo una vez y ya te sirve, mira para tardar menos haces esto crea una vez el código con una variable numerada, "variable1" lo copias y lo pegas 57 veces, ahora en la misma ventana de VBA pulsas en Edición Reemplazar pones en la ventana de búsqueda variable1 y en la ventana de reemplazo variable2 pulsas en siguiente, cambias el numero solo por el 3 y siguiente así te cambia todo el código más rapido sin tener que buscar tu los lugares donde están las variables marcar borrar y corregir. Además vas viendo como lo hace y depuras correctamente.
Si no sabes como concatenar las dos variables me lo dices.
>Un saludo
>Julio
Hola, pues la verdad ya ensaye el código y tampoco funciona por que la macro se ejecuta copiando una ruta y no el valor contenido en la celda. También use las variable pero nuevamente alamacena la ruta en la variable y no el valor.
Quisiera saber si existe una forma de capturar el valor contenido en la celda para que se este valor el que se coloque en otro libro en una celda especifica.
Para pasar exactamente el texto que hay en una celda en vez utilizar .Value utiliza .Text
Pruébalo y me cuentas.
>Un saludo
>Julio
Tampoco me funciona me genera el error 424 "Se requiere objeto".
No se que pueda ser, ¿hay alguna manera de capturar el valor de la misma forma que lo hace la instrucción COPIAR pero que no haga tan pesada la macro?
El fallo es que estas utilizando variables que no has declarado tienes que declarar todas las variables antes Dim Mi nombre As String etc etc declara las variables y me cuentas o si no ponme un correo te pido el archivo y veo que puedo hacer con él.
>Un saludo
>Julio
El problema no es la declaración de de variable pues ninguna es una variable tipo objeto, lo que ocurría es que al ser "MiNombre" una variable no podía colocarla dentro de la expresión de la manera en que lo hacia
ActiveCell.FormulaR1C1 = "='["MiNombre"]Pedido Interno'!Cliente"
La forma correcta es la siguiente
ActiveCell.FormulaR1C1 = "='[" & MiNombre & "]Pedido Interno'!Cliente"
Claro que me di cuenta que solo para este caso debe hacerse así (hasta ahora que yo sepa) es correcta, pero para otras expresiones es posible así:
Windows(MiNombre).Activate
Gracias por tu interés y tus aportes, creo que ya supere este impase, lo que me queda es seguir trabajando para optimizar el código que aun es muy pesado y lento
Vale de acuerdo, entonces puntúa la consulta y finalizalá, si no quieres nada más, de todas formas en ningún momento te he dicho nada de como usar las variables en la sintaxis, te he dicho que debes de declararlas para que VBA conozca que tipo de dato tiene que llevar en la variable. Como sigo sin conocer este código tan pesado, no puedo ayudarte en nada más, que tengas suerte con tu optimización.
>Un saludo
>Julio
A pesar que pareciera que no fueran de utilidad tus consejos, la realidad es que me orientaron muchísimo para explorar y aprender sobre posibilidades de errores y opciones (que a mi se me habían agotado por cierto), de hecho lo de la declaración de variables me sirvió para otro caso que tenia, pero como no era parte de la pregunta preferí no enredar la cosa.
Si me gustaría que le echaras una ojeada al código para ver que opinas, pero no se como enviarte los archivos, me cuentas por favor.
Como reza el refrán se aprende más de las derrotas que de las victorias
Muchas gracias Julio
Ponme tu correo y te mandaré uno pidiéndote el Libro de Excel.
>Un saludo
>Julio
Este es mi correo [email protected], en contacto
Saludos
Ya te he enviado el correo pidiéndote el archivo.
>Un saludo
>Julio
Listo esta noche te envío el archivo, tengo una pregunta sabes como activar las macros desde el evento Workbooks.Open, es decir que al abrirse el libro se activen las macros del libro sin necesidad de seleccionar las opciones de seguridad.
Nada de eso, no es posible, al abrirse el Libro es necesario por imperativo legal del señor Microsoft admitir las macros, no es posible que se activen sin aceptarlo, porque sino a estas alturas no existiría ningún sistema operativo funcionando, nos hubieran borrado el disco duro los virus de macro.
Solo hay una forma para obligar a admitir las macros y es que al abrir el libro si no se aceptan que se abra una hoja unicamente que muestre el aviso de que si no se aceptan las macros no se podrá trabajar en el Libro.
>Un saludo
>Julio

Añade tu respuesta

Haz clic para o