Cambiar de color el botón de comando

En un botón de comando tengo este código que me crea una carpeta:

Dim MiFso As Object
Dim Ruta As String

Ruta = CurrentProject.Path & "\Archivos\" & Me.id

Set MiFso = CreateObject("Scripting.FileSystemObject")

DoCmd.SetWarnings False

On Error GoTo nocrear

MiFso.CreateFolder Ruta

MsgBox "Carpeta creada con éxito"

nocrear:

DoCmd.SetWarnings True

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Application.FollowHyperlink Application.CurrentProject.Path & "\Archivos\" & Me.id
End Sub

No necesito crear carpetas en todos los registros, así que me gustaría que el botón de comando cambiase de color al crear la carpeta, para saber en que registros existe carpeta y en cuales no.

¿Seria posible conseguirlo con algún código de BV?

2 Respuestas

Respuesta
1

Sí, es posible cambiar el color del botón de comando en Access VBA después de crear la carpeta. Para lograrlo, puede utilizar la propiedad .BackColor del botón de comando.

Private Sub btnCrearCarpeta_Click()
    Dim MiFso As Object
    Dim Ruta As String
    Ruta = CurrentProject.Path & "\Archivos\" & Me.id
    Set MiFso = CreateObject("Scripting.FileSystemObject")
    DoCmd.SetWarnings False
    On Error GoTo nocrear
    ' Verifica si la carpeta ya existe
    If Not MiFso.FolderExists(Ruta) Then
        MiFso.CreateFolder Ruta
        MsgBox "Carpeta creada con éxito", vbInformation, "Éxito"
        Me.btnCrearCarpeta.BackColor = RGB(0, 200, 0) ' Cambia el color del botón a verde
    Else
        MsgBox "La carpeta ya existe", vbExclamation, "Aviso"
        Me.btnCrearCarpeta.BackColor = RGB(255, 165, 0) ' Cambia el color del botón a naranja si ya existe
    End If
nocrear:
    DoCmd.SetWarnings True
    Set MiFso = Nothing
    ' Guarda el registro actual
    DoCmd. RunCommand acCmdSaveRecord
    ' Abre la carpeta
    Application. FollowHyperlink Ruta
End Sub

Persistencia del color:

Si quiere que el color se mantenga al navegar entre registros, tendría que validar en el evento OnCurrent del formulario si la carpeta existe y cambiar el color del botón en consecuencia.

Agregue este código en el evento OnCurrent del formulario:

Private Sub Form_Current()
    Dim MiFso As Object
    Dim Ruta As String
    Ruta = CurrentProject.Path & "\Archivos\" & Me.id
    Set MiFso = CreateObject("Scripting.FileSystemObject")
    If MiFso.FolderExists(Ruta) Then
        Me.btnCrearCarpeta.BackColor = RGB(0, 200, 0) ' Verde si la carpeta existe
    Else
        Me.btnCrearCarpeta.BackColor = RGB(255, 255, 255) ' Blanco si no existe
    End If
    Set MiFso = Nothing
End Sub

Así, al moverse entre registros, el botón mostrará el color correcto.

Respuesta
1

Si el nombre de la carpeta es conocido (se ha de crear) se puede verificar su existencia con la función DIR que se puede utilizar tanto para objetos carpeta como para archivos.

Cambiar el color al botón es una opción estética, deshabilitarlo es una opción más fiable

Buenas tardes, gracias por tu respuesta. 

La carpeta se crea al hacer clic en el botón de comando. Cuando se crea la carpeta se le asigna mediante el código BV el numero del registro correspondiente, como nombre de la carpeta. En dicha carpeta guardo documentos en Word o PDF relacionados con el registro correspondiente.

No todos los registros, necesitan tener la carpeta creada, pero en los registros que si se crea la carpeta, es necesario abrirla de vez en cuando para consultar los documentos que hay en ella. 

Por lo tanto, si se deshabilita el botón de comando no podre después abrir la carpeta. 

La idea es, que cuando vaya navegando por los registros o bien haga una búsqueda de un registro concreto, al tener el botón de comando de otro color, sabré si ese registro ya tiene carpeta creada.

Por ejemplo, color blanco, no creada y color verde creada. 

Saludos 

La función DIR devuelve una cadena vacía si la búsqueda no devuelve resultados, por lo que se puede utilizar como condición.

Se puede utilizar en el evento 'al cambiar de registro' o la opción alternativa de 'formato condicional', este admite diferentes manipulaciones estéticas y funciona también en los formularios continuos (normalmente las validaciones solo funcionan para el registro activo).

La función DIR devuelve una cadena vacía si no localiza el objeto buscado, lo que la hace útil como condicional.

La validación se puede hacer en el evento ‘al cambiar de registro (y manipular la estética del botón) o la alternativa de utilizarla en el ‘formato condicional’ que tiene la ventaja sobre el método anterior de que se puede aplicar en los formularios continuos.

Buenas tardes Andrés. 

La verdad es que no se mucho de programación y por lo tanto no tengo ni idea de como sería el código de VB para poner en el evento "al cambiar de registro". Imagino que también ese código de VB tendrá que tener relación con el código que puse en mi pregunta inicial. 

Perdona mi ignorancia y muchas gracias por tu ayuda. 

Para un botón de comando de nombre 'Comando20' (se desconoce el real) el alternar el color de fondo entre rojo y blanco en el evento 'al cambiar de registro' (current) seria algo como esto:

Private Sub Form_Current()
Dim Ruta As String
Ruta = CurrentProject.Path & "\Archivos\" & Me.Id
If Dir(Ruta, vbDirectory) <> "" Then Me.Comando20.BackColor = RGB(255, 0, 0) Else Me.Comando20.BackColor = RGB(255, 255, 255)
End Sub

He utilizado como referencia el código publicado, para aplicar el color al crear la carpeta, solo se necesita añadir al código actual esta línea (tras crear la carpeta):

Me.Comando20.BackColor = RGB(255, 0, 0)

Lo que le cambiaria el color de fondo a rojo.

Al botón se le puede modificar cualquier propiedad

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas