Jose BN Posted October 6, 2021 Share Posted October 6, 2021 Hola! amigos del foro quisiera solicitarles el apoyo con lo siguiente, estoy intentando crear un código que revise al abrir un libro verifiqué si el nombre del libro es el asignado lo valide, en caso que el nombre no corresponda no permita habilitar los formularios que se encuentran en cada una de las hojas, los cuales se activan mediante un botón. Inicialmente he creado el evento open para validar el nombre del libro, pero aún no logro como definir que si este nombre es diferente no permita habilitar los formularios con el clic del botón. Agradezco la colaboración que me puedan brindar. Private Sub Workbook_Open() Dim nombre As String Dim archivo As String archivo = "C:\carpeta\libro1.xlsm" nombre = ActiveWorkbook.FullName If nombre = archivo Then MsgBox "Hola Se ha revisado el nombre del libro" Else MsgBox "No tendra acceso a los formularios" End If End Sub Libro2.xlsm Link to comment Share on other sites More sharing options...
Enigma25 Posted October 6, 2021 Share Posted October 6, 2021 El siguiente codigo valida si el nombre coincide con tu variable y si no coincide, inhabilta los botones(controles) de cada una de tus hojas. P. D. Debes tener el mismo nombre del boton(CommandButton1) en cada una de tus hojas para que funcione. Private Sub Workbook_Open() Dim I As Integer Dim nombre As String Dim archivo As String archivo = "C:\carpeta\libro1.xlsm" nombre = ActiveWorkbook.FullName If nombre = archivo Then For I = 1 To Sheets.Count Sheets(I).CommandButton1.Enabled = True Next I MsgBox "Hola Se ha revisado el nombre del libro" Else For I = 1 To Sheets.Count Sheets(I).CommandButton1.Enabled = False Next I MsgBox "No tendra acceso a los formularios" End If End Sub Link to comment Share on other sites More sharing options...
Jose BN Posted October 6, 2021 Author Share Posted October 6, 2021 @Enigma25 gracias por el aporte, a manera de consulta, si quisiera crear una excepción sobre una hoja sería posible? Por ejemplo que la hoja 4 si habilite el botón(CommandButton1). Link to comment Share on other sites More sharing options...
Enigma25 Posted October 6, 2021 Share Posted October 6, 2021 Fuera de la condición, justo debajo de End If incluye la siguiente linea: Hoja4.CommandButton1.Enabled = True Link to comment Share on other sites More sharing options...
Jose BN Posted October 6, 2021 Author Share Posted October 6, 2021 @Enigma25 Muchas gracias! tema solucionado. Saludos JB Link to comment Share on other sites More sharing options...
Jose BN Posted October 6, 2021 Author Share Posted October 6, 2021 @Enigma25 he surgido un problema que pasé por alto, el código que me aportaste funciona bastante bien el detalle es que si las hojas se encuentran nombradas o se cambia su nombre salta el error: Sheets(I).CommandButton1.Enabled = True Como puedo definir los diferentes nombres de las hojas (BD, RV, Datos,Informe, Extras) por poner ejemplos. Por ultimo sería posible si el botón(CommandButton1), cambia su nombre: CommandButton5, CommandButton6, se pueda incluir? Quedo atento a tus comentarios. Link to comment Share on other sites More sharing options...
Jose BN Posted October 6, 2021 Author Share Posted October 6, 2021 @Enigma25 lo he resuelto de la siguiente manera: If nombre = archivo Then For I = 1 To Worksheets.Count Worksheets("BD").CommandButton1.Enabled = True Worksheets("BD").CommandButton2.Enabled = True Worksheets("RV").CommandButton1.Enabled = True Worksheets("Datos").CommandButton1.Enabled = True Next I Link to comment Share on other sites More sharing options...
Enigma25 Posted October 6, 2021 Share Posted October 6, 2021 Precisamente te sugerí el Bucle For Next para que recorras cada una de las hojas sin usar WorkSheets("Nombre_Hoja") con su respectivo nombre el cual si tendrás problemas cuando cambies el nombre de la hoja (Pestaña) y lo verás en el futuro. Si estás haciendo referencia a cada hoja con su respectivo nombre, ya no necesitarías el bucle For Next. Por otro lado, he corrido el código sugerido y he cambiado el nombre por cada prueba y no me arroja el error que comentas. Intenta cambiando el bucle For Next por lo siguiente: For I = 1 To Sheets.Count Worksheets(I).CommandButton1.Enabled = True Next I y/o For I = 1 To Sheets.Count Worksheets(I).CommandButton1.Enabled = False Next I Link to comment Share on other sites More sharing options...
Jose BN Posted October 6, 2021 Author Share Posted October 6, 2021 @Enigma25 Muchas gracias! Link to comment Share on other sites More sharing options...
Héctor Miguel Posted October 6, 2021 Share Posted October 6, 2021 hola, a ambos ! Hace 17 horas, Jose BN dijo: lo he resuelto de la siguiente manera: algunas sugerencias (necesitas ser menos ambiguo con las instrucciones a vba): 1) las comparaciones textuales son sensibles a las (may/min)usculas o fuerzas la comparacion con funciones if lcase(<variable1>) = "texto en minusculas" if ucase(<variable>) = "TEXTO EN MAYUSCULAS" o pones al inicio del modulo: option compare text 2) referencias a objetos (como las hojas) tiene varias alternativas - nombre en las etiquetas (entre comillas) no importa si lo indicas en (may/min)usculas, no hay dos hojas con el mismo nombre - el "codename" (lo que ves en el explorador de proyectos) como Hoja1, Hoja2, etc. - el indice (posicion) de las hojas en el libro ( worksheets(1), worksheets(2), etc. ) 3) hojas en bucles ? arrays: for each hoja in worksheets(array("hoja1, "hoja2", "hoja3", ...) indices: for n = 1 to worksheets.count worksheets(n). ... ... ... codenames: (referirlos tambien en una matriz/array) Worksheets refiere solo a hojas de calculo Sheets refiere a todo tipo de hojas en el libro (graficos y otros tipos) 4) objetos incrustados que pudieran tener nombres diferentes ? - cuantos commandbuttons hay en cada hoja ? - si es un solo commandbutton (sin importar el nombre) puedes usar esto en el evento '_open' del libro Private Sub Workbook_Open() Dim OnOff As Boolean, hoja As Worksheet OnOff = LCase(ThisWorkbook.FullName) = "c:\carpeta\libro1.xlsm" For Each hoja In Worksheets: hoja.OLEObjects(1).Enabled = OnOff: Next Worksheets(4).OLEObjects(1).Enabled = True End Sub Link to comment Share on other sites More sharing options...
Jose BN Posted October 7, 2021 Author Share Posted October 7, 2021 Hace 6 horas, Héctor Miguel dijo: 4) objetos incrustados que pudieran tener nombres diferentes ? - cuantos commandbuttons hay en cada hoja ? - si es un solo commandbutton (sin importar el nombre) puedes usar esto en el evento '_open' del libro Hola! @Héctor Miguelgracias por tus acertados comentarios, tomaré nota, en respuesta al ultimo punto te comento que los objetos incrustados pueden tener nombres diferentes, pueden haber de 1 a 3 en cada hoja. Aprovechando que "salto la liebre" con tu solución se podría adaptar a estos escenarios o bien ya lo expuesto es funcional. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.