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
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ó:
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ó:
Gracias
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
>
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.
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.
- - - - - -
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...
Saludos desde Tenerife (Islas Canarias).
************************************************
"AnSanVal" <ansanval...@YESTOteleline.es> escribió en el mensaje
news:OQGoZzgH...@TK2MSFTNGP04.phx.gbl...