Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Chequear celda vacia

1,357 views
Skip to first unread message

AgerGaston

unread,
Oct 31, 2007, 1:53:01 PM10/31/07
to
Hola a todos.
En forma diaria envio a varios usuarios una misma planilla, los cuales como
devolucion la deben completar con diferentes datos, pero una celda es
obligatoria, la C1.

La pregunta es: como puedo hacer para que cuando el usuario cierre el excel,
la macro chequee que la celda C1, no este vacia?. Que aparezca un msgbox
dando aviso sobre la situacion.

Algo similar a lo que hace la funcion "validacion" (datos -> validacion...),
la celda debe tener un valor numerico, pero me gustaria saber si se puede
validar otros formatos (fecha, texto, etc).

Espero que se entienda.

Gracias y saludos


David

unread,
Oct 31, 2007, 3:06:03 PM10/31/07
to
Supongamos que la hoja donde está la celda a validar se llama "Hoja1". Desde
el Editor de VisualBasic, haz doble clic en "ThisWorkbook", y escribe o pega
lo siguiente:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Hoja1").Range("C1").Value = Empty Then
Cancel = True
MsgBox "No se puede cerrar el archivo. Ingrese un dato en C1"
End If
End Sub

Para la segunda pregunta, puedes validar el contenido de la celda. Mírate
en la ayuda las siguientes funciones, y comentas cuál es la más adecuada a tu
caso:

ESBLANCO(C1)
ESLOGICO(C1)
ESNOTEXTO(C1)
ESNUMERO(C1)
ESTEXTO(C1)
TIPO(C1)

Luego, en algun lugar de tu libro, podrías introducir la formula que se
adapte a tu caso, y tomar decisiones en base al resultado de la misma.

Comentas si tienes más dudas.

Saludos.

- - - - - -


"AgerGaston" escribió:

AgerGaston

unread,
Nov 1, 2007, 2:37:03 PM11/1/07
to
Hola David.
Funciona perfectamente lo que me enviaste, eso es lo que me hacia falta.

Pero ahora te la complico un poco. Cuando yo envie este Excel la macro me va
a validar que la celda C1, no este vacia.¡

Pregunta: ¿Como hago para que la celda C1 este vacia y no me interrumpa con
el msgbox??

Con respecto a la segunda parte deberia usar, por ahora, ESNUMERO(C1), como
la adapto a la macro anterior ??

Digo por ahora, porque estoy pensando en usar esta macro en otro tipo de
planillas, pero lo dejo para mas adelante.

Gracias por responder.

"David" escribió:

AgerGaston

unread,
Nov 2, 2007, 10:06:00 AM11/2/07
to
Me dan una mano ?

Gracias

David

unread,
Nov 2, 2007, 1:52:03 PM11/2/07
to
Disculpa la tardanza... El 1 de noviembre es día de asueto en mi localidad,
oportunidad que aprovecho para desaparecer (literalmente) de este mundo...

Volviendo al tema. Podrías modificar un tanto el código a lo siguiente:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheets("Hoja1").Range("C1").Value = Empty Then
Cancel = True

Sheets("Hoja1").Activate
Range("C1").Select
End If
End Sub

Esto hará que al intentar cerrar el libro, Excel te ubique en la celda en la
que se espera tener algún dato, sin generar mensajes.

Para la segunda pregunta, si necesitas utilizar EsNumero(), podrías hacer
algo como lo siguiente:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Not Application.WorksheetFunction.IsNumber(Range("C1").Value) Then
Cancel = True
Sheets("Hoja1").Activate
Range("C1").Select
End If
End Sub

Observa que no es lo mismo aplicar la función desde la hoja, que desde VBA...

Cualquier cosa adiiconal, la comentas sin pena.

Saludos.

- - - - - -


"AgerGaston" escribió:

> Me dan una mano ?
>
> Gracias
>

AgerGaston

unread,
Nov 2, 2007, 2:32:02 PM11/2/07
to
Hola David, espero que hayas descansado.

Hasta aqui todo ok.

La nueva pregunta es: Cuando yo la envie, no quiero que me chequee la celda
C1, ya que esta validacion, no es para mi, es para el resto de los usuarios.

Espero que se entienda.

Gracias.

David

unread,
Nov 2, 2007, 4:06:05 PM11/2/07
to
Primero, chequea en "Herramientas" - "Opciones" - separador "General". La
opción "Nombre de usuario" debe tener tu nombre, lo que podrías utilizar para
poder cerrar el archivo en tu equipo sin que te obligue a ingresar un dato en
esa celda. Copia este nombre, y modifica el código para algo similar a lo
siguiente:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Application.Username <> "David García" then

If Not Application.WorksheetFunction.IsNumber(Range("C1").Value) Then
Cancel = True
Sheets("Hoja1").Activate
Range("C1").Select
End If

End If
End Sub

Luego, podrías verificar que funcione bien tratando de abrirlo y cerrarlo en
otro equipo.

- - - - - -

AnSanVal

unread,
Nov 3, 2007, 7:32:32 AM11/3/07
to
Otra opción:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [C3].Value = "" Then
ActiveSheet.ScrollArea = "$C$3"
Else
ActiveSheet.ScrollArea = ""
End If
End Sub

La condición (If...) podrias cambiarla a la que más te convenga.

--
Saludos desde Tenerife (Islas Canarias).
************************************************
"David" <sdgm04Q...@hotmail.com> escribió en el mensaje
news:74E961D7-8A47-47D7...@microsoft.com...

AnSanVal

unread,
Nov 3, 2007, 7:39:42 AM11/3/07
to
Mi aporte anterior presupone que no hay mala intención (se podria escribir
en esa celda, luego las siguientes y por último borrar esa celda). Para
evitar ese comportamiento, puedes combinar con lo aportado por David (u
otras opciones).

Saludos desde Tenerife (Islas Canarias).
************************************************

"AnSanVal" <ansanval...@YESTOteleline.es> escribió en el mensaje
news:OQGoZzgH...@TK2MSFTNGP04.phx.gbl...

0 new messages