Como usar una condición que valide una fecha con el nombre del mes de esa misma fecha

Yo de nuevo

En esta oportunidad amigo necesito que me ayudes con una validación en un formulario, la situación es esta en mi formulario al inicio del mismo tengo dos ComboBox en los que ingreso los nombre de meses del año, toda la información de este formulario se copia en una hoja llamada BASE DE DATOS y una de las condiciones para que esta se ejecute es que los dos ComboBox deben contener la misma información es decir el mismo mes en cada uno ej. Combobox1=enero y Combobox2=enero, esto se ejecuta muy bien si esta condición se cumple luego pasa a otra condición en la que en un TextBox se ingresa un numero de referencia de un doc. Y si este no existe en la base de datos la información se copia (dicho sea de paso esta instrucción me la proporcionaste hace un buen tiempo y me ha ayudado mucho), todo esto funciona muy bien y no hay ningún problema, ahora el problema lo tengo en que en el formulario también tengo un TextBox en el que ingreso una fecha (25/01/2015) y necesito que esta fecha se valide de alguna manera con los datos ingresados en los ComboBox es decir que si los datos de los ComboBox ambos tienen enero por ejemplo y la fecha del TextBox es 13/02/2015 no me permita copiar los datos a la hoja Base de Datos y me muestre un mensaje en donde me diga que fecha no coincide con los meses, ya que de esta hoja (Base de Datos) genero reportes mensuales y los filtro ya sea por nombre de mes o por fecha especifica y si el formulario me permite ingresar meses enero y fecha de febrero no podría determinar cual es el dato correcto si el mes o la fecha.

Le he dado mil vueltas a mi cabeza con lo poco que se en este tema y no tengo idea de como escribir la instrucción ni donde colocarla espero que me puedas ayudar, te dejo el código que tengo en el CommandButton1 que es que utilizo como instrucción primaria del formulario de antemano mil gracias por tu ayuda

Private Sub CommandButton1_Click()

'Identifica la ultima fila en la hoja Base de Datos
uf = ActiveWorkbook.Sheets("Base de Datos").Range("A" & Rows.Count).End(xlUp).Row

'Declara la variable error en caso de deposito repetido
DepErr = 0

'Determina si los meses coinciden
If Mes_Proceso <> Mes_Registro Then
MsgBox "Los Meses No Coinciden !!!, Por Favor Verifique los Datos Ingresado.", vbInformation + vbOKOnly
Mes_Proceso = Empty
Mes_Registro = Empty
Mes_Proceso.SetFocus
Else

'busca el numero de deposito si ya existe
depo = No_Referencia
Set R = Sheets("Base de Datos").Range("H4:H" & uf)
Set b = R.Find(depo)
If Not b Is Nothing Then
ncell = b.Address
Do: Set b = R.FindNext(b)
If depo = b Then DepErr = 1
Loop While Not b Is Nothing And b.Address <> ncell
End If

'Si Deposito ya existe
If DepErr = 1 Then
MsgBox "Deposito ya Existe !!!, Este Deposito Ya Fue Registrado, Por Favor Verifique El Numero Ingresado", vbInformation + vbOKOnly
No_Referencia = Empty
No_Referencia.SetFocus
Else

'Si Deposito no Existe muestra y desprotege la hoja Base de Datos que es donde se copiaran los datos del formulario
Sheets("Base de Datos").Visible = True
Sheets("Base de Datos").Unprotect "Betankool"

'Inserta una fila donde se copiaran los datos del formulario
Sheets("Base de Datos").Cells(4, 1).EntireRow.Insert

'Copia las fórmulas a la fila insertada en el rango especifico
Sheets("Base de Datos").Select
Range("K5:U5").Select
Selection.Copy
Range("K4").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("K4").Select

'Copia los datos del formulario a la base de datos
Sheets("Base de Datos").Cells(4, 1) = Mes_Proceso
Sheets("Base de Datos").Cells(4, 2) = Mes_Registro
If Fecha_Depo <> "" Then Sheets("Base de Datos").Cells(4, 3) = CDate(Fecha_Depo) '(*)
Sheets("Base de Datos").Cells(4, 4) = Tipo_Servicio
Sheets("Base de Datos").Cells(4, 5) = Cta_Banco
If Vl_Depo <> "" Then Sheets("Base de Datos").Cells(4, 6) = CDbl(Vl_Depo) '**
Sheets("Base de Datos").Cells(4, 7) = Gestor_Cobro
Sheets("Base de Datos").Cells(4, 8) = No_Referencia
If Vl_Corte <> "" Then Sheets("Base de Datos").Cells(4, 9) = CDbl(Vl_Corte)

'Ordenar la tabla por fecha
Sheets("Base de Datos").Range("Tabla1[[Mes Ingreso]:[Valor del Corte]]").Select
ActiveWorkbook.Worksheets("Base de Datos").ListObjects("Tabla1").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Base de Datos").ListObjects("Tabla1").Sort. _
SortFields.Add Key:=Range("Tabla1[Fecha del Depo.]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Base de Datos").ListObjects("Tabla1").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("Base de Datos").Range("Tabla1[Mes Ingreso]").Select

'Limpiar Formulario
corte = 0: depo = 0
Mes_Proceso = Empty
Mes_Registro = Empty
Tipo_Servicio = Empty
Cta_Banco = Empty
Gestor_Cobro = Empty
Fecha_Depo = Empty
Vl_Depo = Empty
No_Referencia = Empty
Vl_Corte = Empty
Lb_Diferencia.Caption = ""

'Ubica el cursor en el primer dato a ingresar
Mes_Proceso.SetFocus

'Actualiza y salva el Libro
ActiveWorkbook.RefreshAll
ActiveWorkbook.Save

End If
End If

'selecciona la página principal actualiza, salva, protege y oculta la hoja base de datos
Sheets("Principal").Select
ActiveWorkbook.RefreshAll
ActiveWorkbook.Save
Sheets("Base de Datos").Protect "Betankool"
Sheets("Base de Datos").Visible = False
End Sub

P.D.

En el caso que la fecha del TextBox no coincida con los ComboBox que se limpie el TextBox y el curso se ubique en el TextBox de la fecha para corregir la misma

1 respuesta

Respuesta
1

Este es el código que agregué a la macro:

        meses = Array("", "ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", _
                      "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE")
        For m = LBound(meses) To UBound(meses)
            If UCase(Mes_Proceso) = meses(m) Then
                num_mes = m
            End If
        Next
        '
        mes_depo = Month(CDate(Fecha_Depo))
        If mes_depo <> num_mes Then
            MsgBox "fecha del TextBox no coincide con los ComboBox", vbInformation
            Fecha_Depo.SetFocus
            Exit Sub
        End If

Te anexo la macro completa:

Private Sub CommandButton1_Click()
    If Mes_Proceso <> Mes_Registro Then
        MsgBox "Los Meses No Coinciden !!!, Por Favor Verifique los Datos Ingresado.", vbInformation + vbOKOnly
        Mes_Proceso = Empty
        Mes_Registro = Empty
        Mes_Proceso.SetFocus
    Else
        meses = Array("", "ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", _
                      "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE")
        For m = LBound(meses) To UBound(meses)
            If UCase(Mes_Proceso) = meses(m) Then
                num_mes = m
            End If
        Next
        '
        mes_depo = Month(CDate(Fecha_Depo))
        If mes_depo <> num_mes Then
            MsgBox "fecha del TextBox no coincide con los ComboBox", vbInformation
            Fecha_Depo.SetFocus
            Exit Sub
        End If
        '
        'continúa tu código
        '
        'busca el numero de deposito si ya existe
        depo = No_Referencia
        Set R = Sheets("Base de Datos").Range("H4:H" & uf)
        Set b = R.Find(depo)
        If Not b Is Nothing Then
            ncell = b.Address
            Do: Set b = R.FindNext(b)
                If depo = b Then DepErr = 1
            Loop While Not b Is Nothing And b.Address <> ncell
        End If
        'Si Deposito ya existe
        If DepErr = 1 Then
            MsgBox "Deposito ya Existe !!!, Este Deposito Ya Fue Registrado, Por Favor Verifique El Numero Ingresado", vbInformation + vbOKOnly
            No_Referencia = Empty
            No_Referencia.SetFocus
        Else
            'Si Deposito no Existe muestra y desprotege la hoja Base de Datos que es donde se copiaran los datos del formulario
            Sheets("Base de Datos").Visible = True
            Sheets("Base de Datos").Unprotect "Betankool"
            'Inserta una fila donde se copiaran los datos del formulario
            Sheets("Base de Datos").Cells(4, 1).EntireRow.Insert
            'Copia las fórmulas a la fila insertada en el rango especifico
            Sheets("Base de Datos").Select
            Range("K5:U5").Select
            Selection.Copy
            Range("K4").Select
            Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Range("K4").Select
            'Copia los datos del formulario a la base de datos
            Sheets("Base de Datos").Cells(4, 1) = Mes_Proceso
            Sheets("Base de Datos").Cells(4, 2) = Mes_Registro
            If Fecha_Depo <> "" Then Sheets("Base de Datos").Cells(4, 3) = CDate(Fecha_Depo) '(*)
            Sheets("Base de Datos").Cells(4, 4) = Tipo_Servicio
            Sheets("Base de Datos").Cells(4, 5) = Cta_Banco
            If Vl_Depo <> "" Then Sheets("Base de Datos").Cells(4, 6) = CDbl(Vl_Depo) '**
            Sheets("Base de Datos").Cells(4, 7) = Gestor_Cobro
            Sheets("Base de Datos").Cells(4, 8) = No_Referencia
            If Vl_Corte <> "" Then Sheets("Base de Datos").Cells(4, 9) = CDbl(Vl_Corte)
            'Ordenar la tabla por fecha
            Sheets("Base de Datos").Range("Tabla1[[Mes Ingreso]:[Valor del Corte]]").Select
            ActiveWorkbook.Worksheets("Base de Datos").ListObjects("Tabla1").Sort. _
            SortFields.Clear
            ActiveWorkbook.Worksheets("Base de Datos").ListObjects("Tabla1").Sort. _
            SortFields.Add Key:=Range("Tabla1[Fecha del Depo.]"), SortOn:= _
            xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("Base de Datos").ListObjects("Tabla1").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
            End With
            Sheets("Base de Datos").Range("Tabla1[Mes Ingreso]").Select
            'Limpiar Formulario
            corte = 0: depo = 0
            Mes_Proceso = Empty
            Mes_Registro = Empty
            Tipo_Servicio = Empty
            Cta_Banco = Empty
            Gestor_Cobro = Empty
            Fecha_Depo = Empty
            Vl_Depo = Empty
            No_Referencia = Empty
            Vl_Corte = Empty
            Lb_Diferencia.Caption = ""
            'Ubica el cursor en el primer dato a ingresar
            Mes_Proceso.SetFocus
            'Actualiza y salva el Libro
            ActiveWorkbook.RefreshAll
            ActiveWorkbook.Save
        End If
    End If
    'selecciona la página principal actualiza, salva, protege y oculta la hoja base de datos
    Sheets("Principal").Select
    ActiveWorkbook.RefreshAll
    ActiveWorkbook.Save
    Sheets("Base de Datos").Protect "Betankool"
    Sheets("Base de Datos").Visible = False
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas