Ultima duda (creo ;) ) sobre macro para obligar a rellenar celdas

Tengo una ultima duda. Veras, en la hoja 1 de mi excel tengo un formulario y debajo del formulario los botones que ejecutan las macros: GRABAR DATOS, VISUALIZAR INFORME, GENERAR INFORME y ENVIAR INFORME POR MAIL.

En el boton de Grabar datos, se activa una macro que lo que hace es actualizar las tablas dinamicas ocultas segun los datos que se introduzcan en el formulario

En el mismo boton de GRABAR DATOS o creando uno nuevo que se llame por ejemplo finalizar (prefiero que sea en el mismo boton grabar datos) me gustaría que solo se ejecutara la macro de actualizar las tablas dinamicas si se han rellenado todos los datos del formulario, es decir que no haya celdas vacias, y que en el caso de que las haya y se intente ejecutar el boton, de un mensaje diciendo que no se ha completado el formulario.

La macro que tengo asignada a ese boton para ejecutar la macro de las dinamicas es:

Sub ActualizarTD()
Sheets("hoja2"). Activate
ActiveSheet. Unprotect "contraseña"
ActiveSheet. PivotTables("promediomaxmin"). PivotCache. Refresh
ActiveSheet. Protect "contraseña"
End Sub

¿Por otro lado es posible aplicar que ninguno de los botones de las macros se active si no estan rellenas las celdas?

Las celdas de la hoja 1 que necesito que esten rellenas son: desde la B4 a la B8 incluidas ambas y las B14, B15, B16, B18, B19, B20, B22, B23, B24 y B25

¿Existe una macro para hacer todo esto?

1 respuesta

Respuesta
2

H o l a:

Te anexo la macro actualizada, para verificar si las celdas están llenas.

Sub ActualizarTD()
    'Act.Por.Dante Amor
    Set celdas = Range("B4:B8, B14, B15, B16, B18, B19, B20, B22, B23, B24, B25")
    For Each celda In celdas
        If celda = "" Then
            MsgBox "No se ha completado el formulario. Falta la celda: " & _
                    celda.Address(False, False), vbExclamation, "AVISO"
                    celda.Select
            Exit Sub
        End If
    Next
    'Fin. Por. Dante Amor
    '
    Sheets("hoja2"). Activate
    ActiveSheet. Unprotect "contraseña"
    ActiveSheet. PivotTables("promediomaxmin"). PivotCache. Refresh
    ActiveSheet. Protect "contraseña"
End Sub

Para activar y desactivar los botones, necesito saber el tipo de botón que tienes, si es ControlActiveX, si es un control de formulario o si es una forma; el nombre de cada botón y la macro que tienen asignadas.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Hola!

son 4 botones de control de formulario el nombre de cada uno y su macro es:

Grabar Datos

Sub ActualizarTD()
Sheets("hoja2").Activate
ActiveSheet.Unprotect "contraseña"
ActiveSheet.PivotTables("promediomaxmin").PivotCache.Refresh
ActiveSheet.Protect "contraseña"
End Sub

Pero esta la sustituire por la que me acabas de pasar tu para la verificación de las celdas llenas

Vista previa del informe

Sub irainforme()
'
' irainforme Macro
'

'
Sheets("INFORME").Select
End Sub

Generar Informe

Sub GenerarInforme() 'Generar Pdf de la hoja Informe
Set h1 = Sheets("Hoja1")
Set h2 = Sheets("INFORME")
ruta = ThisWorkbook.Path & "\"
nombre = "informe " & h1.[B4] & " " & h1.[B5] & ".pdf"
'
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Guardar archivo como"
.AllowMultiSelect = False
.InitialFileName = ruta & nombre
.FilterIndex = 25
If .Show Then
march = .SelectedItems(1)
h2.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=march, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
End If
End With
End Sub

Enviar informe por mail

ub EnviarInforme()

Set h1 = Sheets("Hoja1")
Set h2 = Sheets("INFORME")
ruta = ThisWorkbook.Path & "\"
nombre = "informe " & h1.[B4] & " " & h1.[B5] & ".pdf"
'
With Application.FileDialog(msoFileDialogSaveAs)
.Title = "Guardar archivo como"
.AllowMultiSelect = False
.InitialFileName = ruta & nombre
.FilterIndex = 25
If .Show Then
march = .SelectedItems(1)
h2.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=march, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
'
Dim objMail As Object
Set objMail = CreateObject("Outlook.Application").CreateItem(olMailItem)
With objMail
.To = h1.Range("B8").Value
.Subject = "Informe"
.Body = "Estimado Antonio, adjunto te mando…"
.Attachments.Add march
.Display
End With
Set objMail = Nothing
End If
End With
End Sub

muchas gracias!

Cuando ejecuto la macro de grabar datos lo hace y se va automáticamente a la página "Informe". ¿Puedo evitar que haga eso y se quede en la hoja 1 que es donde esta el formulario y los botones?

Gracias

H o l a:

Con mucho gusto te ayudo con todas tus peticiones.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas