Error 1004 en método 'Range' de objeto '_Global'

Tengo la siguiente macro

Sub ActualizaVersión()
'
LibroDatos = ActiveWorkbook.Name
HojaY = "PARÁMETROS"
DesProtegeHojaY
Worksheets("PARÁMETROS").Select
Range("LibroDatos").Select
Worksheets("PARÁMETROS").Range(LibroDatos).Value = LibroDatos

  • El nombre del libro activo lo paso a la variable Pública: LibroDatos.
  • En ese mismo libro tengo una hoja protegida que se llama "PARÁMETROS" y en ella tengo un rango que se llama "LibroDatos". Lo hago así porque no tengo suficientes conocimientos ni experiencia en Visual Basic y no sé de qué otro modo conservar mis variables a lo largo de la sesión de cada usuario.
  • Desprotejo la hoja PARÁMETROS mediante una macro para poder almacenar en ella el nombre del LibroDatos.
  • Selecciono la hoja PARÁMETROS
  • Pero al tratar de seleccionar el rango LibroDatos de la hoja PARÁMETROS, me aparece este error. Llevo varios días tratando de resolverlo pero no he podido. Estoy seguro de que me puedes ayudar fácilmente y te lo agradezco de antemano.

1 Respuesta

Respuesta
1

H o l a:

Olvidemos un momento la macro.

Para ayudarte, ¿necesito qué me expliques con detalle qué quieres hacer?

¿Si tienes varios libros abiertos?

¿Para qué quieres almacenar el nombre del libro?

etc, etc.

Y por último qué quieres lograr con la macro.

Platícame, qué te gustaría que hiciera la macro, en cuál libro, en cuál hoja, en cuál fila, en cuál columna.

No me menciones nombres de rangos, porque no sé de cuál celda a cuál celda van, mejor dime el rango de celdas.

Todo el detalle que quieras. Si puedes poner imágenes en tu explicación, procura que se vean los nombres del libro, de la hoja y las filas y la columnas de excel.

Dante, gracias por tu respuesta y te agradezco infinitamente tu gran disposición a ayudarme. 

Trataré de responder tus preguntas en orden. Espero explicarme bien.

Estoy a punto de liberar mi primer sistema con macros en Excel pero tengo muchas dudas por mi desconocimiento y falta de experiencia en este lenguaje.

Se trata de un sistema de inventarios donde se deben registrar todos los movimientos de almacén. Estos son: dos tipos de entradas y dos tipos de salidas de productos a clientes y distribuidores en cada zona.

Cada movimiento de productos de almacén genera un registro en una base de datos que servirá como base para la facturación mensual.

Se deben mantener actualizados, a ritmo de operación, cuatro archivos históricos. Cada archivo histórico contiene todos los movimiento de un sólo tipo de los cuatro tipos posibles de movimientos de almacén. 

Estamos iniciando la etapa de pruebas captura de movimientos en tiempo real y se esperan muchos probables cambios y ajustes al sistema mientras se lleva a cabo la captura de movimientos por parte del cliente.

Por el momento instalé el sistema en la oficina del cliente con un solo libro principal. Con este se abre el sistema y desde ahí se hace todas las operaciones. En este libro se encuentra la base de datos, los parámetros de control del sistema, formatos de captura de movimientos de almacén, catálogos de productos, además de inventarios actualizados de cada almacén propio y de distribuidores pero también tengo ahí toda la codificación de las macros. En otros 4 libros aparte tengo los archivos históricos. Cabe mencionar que el cliente puede generar un respaldo del libro principal en cualquier momento.

En un momento dado podría tener desde dos hasta seis libros abiertos.

Mientras el cliente hace sus primeras capturas, yo estoy intentando pasar la gran mayoría de las macros a otro Libro de Macros para poder realizar libremente los cambios y pruebas de escritorio que requiera en mi oficina.

Espero que esta separación de las macros también me ayude para poder actualizar fácil y rápidamente la codificación de las macros únicamente en ese libro sin afectar los datos que ya haya capturado el cliente durante estos días, además, no estoy seguro pero me parece que también me conviene por cuestiones de seguridad...

Por desconocimiento no he encontrado la manera de dejar todas las macros en un solo libro por separado, así que en este momento también tengo en el Libro de Datos unas cuantas macros que sólo sirven para entrar y salir del sistema, salvar el libro de datos y salir de Excel. Desde ese Libro de Datos quiero tener el control para abrir y cerrar el Libro de Macros que contiene la gran mayoría de las macros.

Desde que estoy intentando separar la gran mayoría de las macros y manejarlas en un libro aparte, he estado teniendo problemas para controlar la ejecución de algunas macros, creo que por problemas de direccionamiento...

Quiero almacenar el nombre del libro para mantener el control sobre los libros que pueden estar abiertos en cada momento.

Para efectos de control de versiones del sistema, en este momento de las pruebas estoy probando la actualización automática del número de versión. En el nuevo Libro de macros tengo una macro que, cada vez que se salva el Libro de Macros, automáticamente me deja, en la celda "AA1" de la "Hoja1" de ese mismo libro, lo que para mí sería el "Número de Versión". Este Número de Versión lo conformo con el año (4 dígitos), el mes (2 dígitos), el día (2 dígitos), la hora (2 dígitos) y el minuto (2 dígitos).

Cada vez que se abre el Libro de Datos primeramente solicita y verifica la contraseña para uso del sistema.

Después copia en la celda "A1" de la hoja "Menú Principal" del Libro de Datos la versión del sistema que se encuentre en la celda "AA1" de la Hoja1 del Libro de Macros. Así puedo saber qué versión del sistema está corriendo el cliente mientras yo en mi oficina sigo generando nuevas versiones, realizando cambios, pruebas o atendiendo nuevas peticiones del cliente... Esto es lo que me gustaría que hiciera correctamente esta macro que me está fallando... :(

No sé si me expliqué. Si me faltó cualquier cosa, por favor dime. Mil gracias por tu inestimable apoyo, Dante. Saludos!

H o l a:

Si entendí bien, lo que necesitas es poner en el "libro de datos", en la hoja "Menu principal" en la celda "A1", lo que tengas en el "libro de macros" en la "hoja1", celda "AA1".

Si es correcto lo anterior, puede ser así:

Sub ActualizaVersion2()
'Por.Dante Amor
    Sheets("Menu Principal").[A1] = Workbooks("libro de macros.xlsm").Sheets("Hoja1").[AA1]
End Sub

La macro la tienes que ejecutar estando en el libro "libro de datos".

Si ejecutas la macro estando en otro libro, entonces tiene que ser así:

Sub ActualizaVersion2()
'Por.Dante Amor
    workbooks("libro de macros").Sheets("Menu Principal").[A1] = Workbooks("libro de macros.xlsm").Sheets("Hoja1").[AA1]
End Sub


Los dos libros deberán estar abiertos cundo ejecutes la macro.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas