Forums Últimos mensajes - Powered by IBM
 

llenar obligatoriamente celdas

22/06/2006 - 17:14 por MARCO6325 | Informe spam
buenas, me imagino que es sencillo,pero no le atino con los comentarios
anteriores,
quiero que en la hoja no se pueda hacer nada , es decir, ejecutar una
macro, guardar,etc. si no se llenan antes todos los datos,(las celdas
que deben contener datos son: c8:c30, e8:e30, b33:e40, c44, e44, f2 y
f3), y que ademas de un mensaje que "debe llenar todos los datos" y lo
lleve a la celda que debe llenar, estuve probando este código, pero
colocandole rangos pero no lo acepta, ayuda please

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c1]) Is Nothing Then Exit Sub
If IsEmpty([c1]) Then MsgBox "DEBE INTRODUCIR DATOS !!!":
[c1].Select
End Sub
 

Leer las respuestas

#1 Héctor Miguel
23/06/2006 - 05:04 | Informe spam
hola, Marco !

... pero no le atino con los comentarios anteriores
quiero que en la hoja no se pueda hacer nada, es decir, ejecutar una macro, guardar, etc. si no se llenan antes todos los datos
(las celdas que deben contener datos son: c8:c30, e8:e30, b33:e40, c44, e44, f2 y f3)
y que ademas de un mensaje que "debe llenar todos los datos" y lo lleve a la celda que debe llenar
estuve probando este codigo, pero colocandole rangos pero no lo acepta, ayuda please



lo que solicitas ['tal-cual']... pudiera tener otro tipo de 'visicitudes' e imponderables... [que mejor los dejo a tu criterio]
te paso unos ejemplos [de entre varias alternativas mas] y ya comentaras +/- que mas te gustaria que se hiciera :))
si cualquier duda [o informacion adicional]... comentas ?
saluds,
hector.

1) copia/pega las siguientes lineas en un modulo de codigo 'normal'...
Public Const Mi_rango As String = _
"c8:c30,e8:e30,b33:e40,c44,e44,f2:f3"
Public Faltan_celdas As Boolean

2) copia las siguientes lineas en el modulo de codigo de 'esa' hoja...
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Faltan_celdas = _
Application.CountA(Range(Mi_rango)) _
<> Range(Mi_rango).Count
If Faltan_celdas Then Range(Mi_rango) _
.SpecialCells(xlCellTypeBlanks).Cells(1).Select
End Sub

notas:
a) las ultimas dos lineas del codigo anterior 'te mandan' a la primer celda 'vacia' de 'Mi_rango' [PERO]...
b) si [ademas] quisieras un cuadro de mensaje... pudiera resultarle [hasta] inconveniente la navegacion al usuario :-((
[puedes eliminar las dos ultimas lineas si ves que en realidad son un 'estorbo' para la agilidad en captura de datos]
c) podria presentarse 'falla' [p.e.] si se borran celdas en 'Mi_rango' y NO se hace un cambio de seleccion <= OJO
-> a menos que se vaya agregando codigo 'similar' a la asignacion del valor [true/false] de la variable 'Faltan_celdas'

3) para 'evitar' que se trate de guardar el libro si existen celdas sin rellenar...
== en el modulo de codigo del libro [ThisWorkbook]
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveAsUI Then _
If Faltan_celdas Then _
MsgBox "No se ha terminado de rellenar el rango:" & vbCr & _
Range(Mi_rango).Address(0, 0), vbCritical, _
"Datos incompletos": _
Cancel = True
End Sub

-> puedes adaptar 'algo similar' a lo anterior en el evento '_beforeclose' [tambien] en el modulo del libro ;)

4) para que NO se ejecuten las macros... [siempre y cuando se trate de macros QUE TU CONTROLAS]...
agrega como primera instruccion -> A CADA UNA DE TUS MACROS... la siguiente instruccion:
-> If Faltan_celdas Then Exit Sub

__ el codigo expuesto __
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c1]) Is Nothing Then Exit Sub
If IsEmpty([c1]) Then MsgBox "DEBE INTRODUCIR DATOS !!!":
[c1].Select
End Sub

Preguntas similares