Personalizar icono en botón OPTION de Access

Dentro de la WEB me encontré con una aplicación sencilla pero muy practica en donde desde un formulario se colocan varios botones OPTION y pueden abrir cualquier formulario de acuerdo a su nombre asignado, junto a otros submenús. Desconozco de quien pudo diseñarlo no aparece en los registros, pero fue muy ingenioso.

Lo que yo hice es asignarle un icono para un detalle más visual, pero al cambiar a los submenús, cambia los nombres de los formularios a abrir, pero no el icono.

Lo que hace la aplicación es que cuando se activa los botones tienen los nombres que uno asigna y al presionarlo para ver los submenús con los mismos botones pero asignados a los formularios que uno quiere abrir, este mantiene el mismo icono que yo le asigne en un principio,

¿Habrá una posibilidad de poder asignarle un icono a cada formulario registrado en la tabla de donde obtiene los registros para funcionar?

El Formulario se llama Switchboard y depende la Tabla asignada con el nombre Switchboard Items

Este es el comando ingresado en el Formulario;

Option Explicit
Option Compare Database

Private Sub Form_Open(Cancel As Integer)

   ' Minimizar la ventana de la base de datos e inicializar el formulario.

On Error GoTo Form_Open_Err

' Minimizar la ventana de la base de datos.
'DoCmd.SelectObject acForm, "Switchboard", True
'DoCmd.Minimize

' Vaya a la página del panel de control que está marcada como predeterminada.
Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Default' "
Me.FilterOn = True

Form_Open_Exit:
Exit Sub

Form_Open_Err:
MsgBox Err.Description
Resume Form_Open_Exit
End Sub

Private Sub Form_Current()
' Actualiza el título y completa la lista de opciones.

Me.Caption = Nz(Me![ItemText], "")
FillOptions
End Sub

Private Sub FillOptions()
' Complete las opciones para esta página de la centralita.

' El número de botones en el formulario.
Const conNumButtons = 8
Dim con As Object
Dim rs As Object
Dim stSql As String
Dim intOption As Integer
' Establezca el foco en el primer botón del formulario,
' y luego ocultar todos los botones del formulario
' Pero el primero. No puedes ocultar el campo con el foco.
Me![Option1].SetFocus
For intOption = 2 To conNumButtons
Me("Option" & intOption).Visible = False
Me("OptionLabel" & intOption).Visible = False
Next intOption
' Abra la tabla de elementos del panel de control y busque
' El primer elemento de esta página de centralita.
Set con = Application.CurrentProject.Connection
stSql = "SELECT * FROM [Switchboard Items]"
stSql = stSql & " WHERE [ItemNumber] > 0 AND [SwitchboardID]=" & Me![SwitchboardID]
stSql = stSql & " ORDER BY [ItemNumber];"
Set rs = CreateObject("ADODB.Recordset")
rs.Open stSql, con, 1 ' 1 = adOpenKeyset
' Si no hay opciones para esta página del panel de control,
' mostrar un mensaje. De lo contrario, rellene la página con los elementos.
If (rs.EOF) Then
Me![OptionLabel1].Caption = "No hay artículos para esta página de centralita"
Else
While (Not (rs.EOF))
Me("Option" & rs![ItemNumber]).Visible = True
Me("OptionLabel" & rs![ItemNumber]).Visible = True
Me("OptionLabel" & rs![ItemNumber]).Caption = rs![ItemText]
rs.MoveNext
Wend
End If

' Cerrar el conjunto de registros y la base de datos.
rs.Close
Set rs = Nothing
Set con = Nothing

End Sub

Private Function HandleButtonClick(intBtn As Integer)
' Esta función se llama cuando se hace clic en un botón.
' intBtn indica qué botón se hizo clic.

' Constantes para los comandos que se pueden ejecutar.
Const conCmdGotoSwitchboard = 1
Const conCmdOpenFormAdd = 2
Const conCmdOpenFormBrowse = 3
Const conCmdOpenReport = 4
Const conCmdCustomizeSwitchboard = 5
Const conCmdExitApplication = 6
Const conCmdRunMacro = 7
Const conCmdRunCode = 8
Const conCmdOpenPage = 9
Const conCmdOpenFormHoja = 99

' Un error que es un caso especial.

Const conErrDoCmdCancelled = 2501
Dim con As Object
Dim rs As Object
Dim stSql As String

'En caso de error, vaya a HandleButtonClick_Err

' Busque el artículo en la tabla de elementos del panel de control
' que corresponde al botón en el que se hizo clic.
Set con = Application.CurrentProject.Connection
Set rs = CreateObject("ADODB.Recordset")
stSql = "SELECT * FROM [Switchboard Items] "
stSql = stSql & "WHERE [SwitchboardID]=" & Me![SwitchboardID] & " AND [ItemNumber]=" & intBtn
rs.Open stSql, con, 1 ' 1 = adOpenKeyset
' Si ningún elemento coincide, informe el error y salga de la función.
If (rs.EOF) Then
MsgBox "Se produjo un error al leer la tabla de elementos del panel de control."
rs.Close
Set rs = Nothing
Set con = Nothing
Exit Function
End If
Select Case rs![Command]
' Ir a otra centralita.
Case conCmdGotoSwitchboard
Me.Filter = "[ItemNumber] = 0 AND [SwitchboardID]=" & rs![Argument]
' Abrir un formulario en modo Agregar.
Case conCmdOpenFormAdd
DoCmd.OpenForm rs![Argument], , , , acAdd

' Abrir un formulario.
Case conCmdOpenFormBrowse
DoCmd.OpenForm rs![Argument]
' Abrir un formulario en formato hoja.
Case conCmdOpenFormHoja
DoCmd.OpenForm rs![Argument], acFormDS

' Abrir un informe.
Case conCmdOpenReport
DoCmd.OpenReport rs![Argument], acPreview

' Personalizar la centralita.
Case conCmdCustomizeSwitchboard
' Manejar el caso en el que el Administrador de la Centralita
' No está instalado (e.g. Instalación mínima).
On Error Resume Next
Application.Run "ACWZMAIN.sbm_Entry"
If (Err <> 0) Then MsgBox "Comando no disponible."
On Error GoTo 0
' Actualizar el formulario.
Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Default' "
Me.Caption = Nz(Me![ItemText], "")
FillOptions

' Salir de la aplicación.
Case conCmdExitApplication
'CloseCurrentDatabase
DoCmd. Quit acQuitSaveAll
' Ejecutar una macro.
Case conCmdRunMacro
DoCmd.RunMacro rs![Argument]

' Ejecutar código.
Case conCmdRunCode
Application.Run rs![Argument]

' Abrir una página de acceso a datos
Case conCmdOpenPage
DoCmd.OpenDataAccessPage rs![Argument]

' Cualquier otro comando no es reconocido.
Case Else
MsgBox "Opción desconocida."
End Select

' Cerrar el conjunto de registros y la base de datos.
rs.Close
HandleButtonClick_Exit:
On Error Resume Next
Set rs = Nothing
Set con = Nothing
Exit Function

HandleButtonClick_Err:
' Si la acción fue cancelada por el usuario por
' Por alguna razón, no se muestra un mensaje de error.
' En su lugar, continúe en la siguiente línea.
If (Err = conErrDoCmdCancelled) Then
Resume Next
Else
MsgBox "Hubo un error al ejecutar el comando..", vbCritical
Resume HandleButtonClick_Exit
End If
End Function

Seria muy interesante si se puede aplicar este detalle al formulario activo

1 Respuesta

Respuesta

I. Hola Héctor, sólo soy lector de la comunidad pero al tener interés en este ámbito quise buscar información, aunque no logré poder formarme una opinión concreta ni vi enlaces del todo válidos, en caso de que continúe sin recibir respuestas me gustaría trasladar su consulta a varios expertos del ámbito por si pudiesen responderle. Con todo deseaba trasladarle lo que vi por si pudiese serle de alguna utilidad.

Disculpe por todas las molestias, ánimo.


https://www-accessforums-net.translate.goog/showthread.php?t=84923&_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-access--programmers-co-uk.translate.goog/forums/threads/display-icon-depending-on-fields-value.296528/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://stackoverflow-com.translate.goog/questions/74278878/changing-icon-on-microsoft-access-database?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-fmsinc-com.translate.goog/microsoftaccess/attachment-field/index.html?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-accessforums-net.translate.goog/showthread.php?t=84923&_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-mrexcel-com.translate.goog/board/threads/auto-click-refresh-all-icon-when-table-values-change.1091627/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www-access--programmers-co-uk.translate.goog/forums/threads/add-a-field-in-query-to-a-form.322141/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.youtube.com/watch?v=levLK23zcdE 

https://www.youtube.com/watch?v=2sfgtmGyfjs 

https://www.youtube.com/watch?v=kFwCZHPeJj8 

https://stackoverflow-com.translate.goog/questions/27507295/insert-new-record-into-a-table-from-a-form-using-data-from-multiple-tables?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es&_x_tr_pto=sc 

https://www.youtube.com/watch?v=levLK23zcdE 

https://www.youtube.com/watch?v=levLK23zcdE 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas