Si se deja un Textbox en blanco

Tengo este código en un formulario de excel:
Private Sub TextBox1_Change()
largo_entrada = Len(Me.TextBox1)
Select Case largo_entrada
Case 2
Me.TextBox1.Value = Me.TextBox1.Value & "/"
Case 5
Me.TextBox1.Value = Me.TextBox1.Value & "/2008"
TextBox2.SetFocus
End Select
End Sub
Pero quiero que si no escribo nada en este Textbox1 que me aparezca la palabra "Anulada" además en la fecha que solo tenga que escribir el día y que el mes y año lo obtenga automáticamente de la fecha del sistema, eso si se pudiera y si no pues que si me equivoco a la hora de ingresar el formato de fecha que me envíe un mensaje "Fecha mal ingresada" Ej: 02/99/2008 y que se quede en el TextBox1 para poder corregir el error.
Espero me entiendas que es lo que deseo hacer y de antemano agradezco tu pronta ayuda Att. Enrique Castro

2 Respuestas

Respuesta
1
<span style="font-family: 'Times New Roman'; font-size: 16px;">
<div style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: #ffffff; background-position: initial initial; margin: 8px;">Hola,
Según lo que puedo apreciar puedes validar el caso para la palabra "Anulada" con un "Case 0" en tu Select Case y utilizar para validar una Fecha Correcta preguntando si la Fecha introducida es Valida así:
If IsDate(Me.TextBox1.Text) = False then
MsgBox "La Fecha instrucida es Invalida"
Me.TextBox1.Text
Else
'Continua la Ejecucion del Codigo
End If
Espero Te funcione
Saludos
Leone
</div>
</span>
Me falto finalizar parte del código, disculpa
If IsDate(Me.TextBox1.Text) = False then
MsgBox "La Fecha introducida es Inválida", vbExclamation, "Fecha Inválida"
Me.TextBox1.Text = ""
Me.TextBox1.SetFocus
Else
'Continua la Ejecucion del Codigo
End If
Muchas gracias por tu ayuda y pronta colaboración, el código que me enviaste me sirvió aunque no lo tome literal pero me ayudo mucho, bien ahora me he topado con un problemilla que si eres tan amable de ayudarme ya que en el código yo lo cambie por Me.TextBox4.SetFocus ahora el problema es que he intentado de mil maneras pero el cursor siempre se va al TextBox3 en vez del TextBox4 y no se porqué, tengo un código que al dejarlo en blanco me anota "Anulada" en el TextBox1, y del TextBox2 al TextBox4, me anote "0.00" pero en realidad lo que yo quiero es que al dejarlo en blanco haga lo anterior pero que se valla al CommandButton1 que tengo, pero como no se como hacerlo, pues opte para que se fuera al TextBox4, pero repito no se porque siempre se queda en el TextBox3, si pudieras ayudarme te lo agradecería, además te envío todo el código que tengo para ver si tu podrías encontrar donde esta mi error:
Private Sub CommandButton1_Click()
Rem inserta un renglon
Fila = 9
Col = 2
While Cells(Fila, Col) <> Empty
Fila = Fila + 1
Wend
Cells(Fila, 2) = TextBox1
Cells(Fila, 4) = Val(TextBox2)
Cells(Fila, 6) = Val(TextBox3)
Cells(Fila, 8) = Val(TextBox4)
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox4 = Empty
TextBox1.SetFocus
End Sub
Private Sub TextBox1_Change()
largo_entrada = Len(Me.TextBox1)
Select Case largo_entrada
Case 2
Me.TextBox1.Value = Me.TextBox1.Value & "/"
Case 5
Me.TextBox1.Value = Me.TextBox1.Value & "/" & Year(Date)
TextBox2.SetFocus
End Select
End Sub
Private Sub TextBox2_Change()
Range("D8").Select
ActiveCell.FormulaR1C1 = TextBox2
End Sub
Private Sub TextBox3_Change()
Range("F8").Select
ActiveCell.FormulaR1C1 = TextBox3
End Sub
Private Sub TextBox4_Change()
Range("H8").Select
ActiveCell.FormulaR1C1 = TextBox4
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
UserForm1.Hide
End If
End Sub
Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
UserForm1.Hide
End If
End Sub
Private Sub TextBox3_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
UserForm1.Hide
End If
End Sub
Private Sub TextBox4_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
UserForm1.Hide
End If
End Sub
Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
UserForm1.Hide
End If
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Text = "" Then
TextBox1 = "Anulada"
TextBox2 = "0.00"
TextBox3 = "0.00"
TextBox4 = "0.00"
Me.TextBox4.SetFocus
End If
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox2.Text) Then
TextBox2.Text = Format(TextBox2.Text, "#,##0.00")
Else
TextBox2.Text = "0.00"
End If
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox3.Text) Then
TextBox3.Text = Format(TextBox3.Text, "#,##0.00")
Else
TextBox3.Text = "0.00"
End If
End Sub
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox4.Text) Then
TextBox4.Text = Format(TextBox4.Text, "#,##0.00")
Else
TextBox4.Text = "0.00"
End If
End Sub
Te envío el código Modificado, espero te funcione como me funciono a mi. Lo que hice fue validar la palabra Anulada en el evento keyup que tienes del textbox2
Te valide un poco más el formato para la fecha del Textbox1
Sustituye el código de los siguientes eventos de estos objetos:
Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 27 Then
UserForm1.Hide
End If
If TextBox1.Value = "Anulada" Then
CommandButton1.SetFocus
End If
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Text = "" Then
TextBox1 = "Anulada"
TextBox2 = "0.00"
TextBox3 = "0.00"
TextBox4 = "0.00"
End If
End Sub
Private Sub TextBox1_Change()
If Me.TextBox1.Value <> "Anulada" Then
largo_entrada = Len(Me.TextBox1)
Select Case largo_entrada
Case 1
If Me.TextBox1.Value > 3 Then Me.TextBox1.Value = "0" & Me.TextBox1.Value & "/"
Case 2
If Right(Me.TextBox1.Value, 1) <> "/" Then Me.TextBox1.Value = Me.TextBox1.Value & "/"
Case 3
If Right(Me.TextBox1.Value, 1) > 1 And Right(Me.TextBox1.Value, 1) <> "/" Then
Me.TextBox1.Value = Format(Me.TextBox1.Value & "/" & Year(Date), "DD/MM/YYYY")
If IsDate(Me.TextBox1.Value) = True Then
TextBox2.SetFocus
Else
MsgBox "La Fecha Introducida es Inválida, por favor intente de Nuevo", vbExclamation, "Fecha Inválida"
TextBox1.SetFocus
SendKeys "{home}+{end}"
End If
End If
Case 4
If Right(Me.TextBox1.Value, 1) = "/" Then
Me.TextBox1.Value = Format(Me.TextBox1.Value & Year(Date), "DD/MM/YYYY")
If IsDate(Me.TextBox1.Value) = True Then
TextBox2.SetFocus
Else
MsgBox "La Fecha Introducida es Inválida, por favor intente de Nuevo", vbExclamation, "Fecha Inválida"
TextBox1.SetFocus
SendKeys "{home}+{end}"
End If
ElseIf Right(Me.TextBox1.Value, 1) > 1 And Right(Me.TextBox1.Value, 1) <> "/" Then
Me.TextBox1.Value = Format(Me.TextBox1.Value & "/" & Year(Date), "DD/MM/YYYY")
If IsDate(Me.TextBox1.Value) = True Then
TextBox2.SetFocus
Else
MsgBox "La Fecha Introducida es Inválida, por favor intente de Nuevo", vbExclamation, "Fecha Inválida"
TextBox1.SetFocus
SendKeys "{home}+{end}"
End If
End If
Case 5
If Right(Me.TextBox1.Value, 1) <> "/" Then
Me.TextBox1.Value = Format(Me.TextBox1.Value & "/" & Year(Date), "DD/MM/YYYY")
Else
Me.TextBox1.Value = Format(Me.TextBox1.Value & Year(Date), "DD/MM/YYYY")
End If
If IsDate(Me.TextBox1.Value) = True Then
TextBox2.SetFocus
Else
MsgBox "La Fecha Introducida es Inválida, por favor intente de Nuevo", vbExclamation, "Fecha Inválida"
TextBox1.SetFocus
SendKeys "{home}+{end}"
End If
End Select
End If
End Sub
Muchas gracias por tu ayuda ya que es juestamente lo que quería que hiciera el código, te agradecería que me pudieras ayudar con otras dudas que tenga más adelante ya que hace apenas un mes que inicie a trabajar en VB, bueno no esta de más agradecerte por tu pronta respuesta y colaboración con esta pregunta que formule, Att. Enrique Castro
Respuesta
1
Hay muchas opciones para controlar el ingreso de fechas pero voy a optar por tu idea de ingresar solamente el día.
Entonces esto será para el textbox que recibirá esa información:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 < 1 Or TextBox1 > 31 Then Cancel = True
End Sub
Esto hará que no puedas avanzar si el ingreso no corresponda a un día de mes.
Luego al momento de pasarlo o allí mismo armás la fecha:
miFecha = val(textbox1) & "/" & Month(date) & "/" & Year(date)
Range("B2") = CDate(miFecha) 'ejemplo que mueve la fecha a la celda B2
Quizás prefieras la rutina que sigue, que contempla que puedas dejar el control vacío:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 = "" Then   'si dejas el control vacío colocará Anulado en la celda
ActiveCell = "Anulada"
ElseIf TextBox1 < 1 Or TextBox1 > 31 Then  'sinó debes ingresar día
Cancel = True
Else    'si está correcto lo transforma en fecha
miFecha = Val(TextBox1) & "/" & Month(Date) & "/" & Year(Date)
ActiveCell = CDate(miFecha)
End If
End Sub
Pruébalo y comentame si te resultó

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas