¿Cómo aplicar múltiples condiciones en una macro que se ejecute de manera correcta en todos los casos posibles?
Recurro a ustedes con su ampliada experiencia para que me iluminen acerca de unas condicionantes que no logro emplear de manera correcta, en mi ejemplo tengo 4 columnas, (B, E, F, O) con datos para ingresar a partir de la fila 9 en adelante, y las condiciones que requiero aplicar son las siguientes: 1.- con un Dato de entrada en la columna B, las celda en E y F no pueden permanecer vacías al mismo tiempo al momento de ejecutar la macro, (debe haber un dato en E o en F), 2.- con un Dato de entrada en la columna B, las celda en E y F no pueden tener datos en ambas celdas al mismo tiempo al momento de ejecutar la macro, (debe haber solamente un dato en E o solamente un dato en F), 3.- Con un dato en la celda F este no me debe superar el registro en la celda O al momento de ejecutar. En mi macro las condicionantes se ejecutan de manera correcta siempre y cuando hayan datos solo en la celda 9, el problema está cuando capturo datos en más celdas, allí por más que he tratado modificando el código no se me cumplen las condiciones como debe ser, si modifico para que la macro corra como es debido con múltiples datos, entonces ocurre que no se ejecuta bien cuando solo hay datos en la celda 9 y no logro hacerlo funcionar para que haga lo que quiero cuando hayan datos solo en la celda 9 y también cuando hayan datos en las celdas 10,11,12 y así sucesivamente.
Sub VALIDACIONES() Dim lr As Long, fila As Variant, CE As Long, CF As Long, novacias As Variant, sobregiro As Integer, CB As Long CB = Range("B" & Rows.Count).End(3).Row CE = Range("E" & Rows.Count).End(3).Row CF = Range("F" & Rows.Count).End(3).Row If CE > CB Then MsgBox "Debe introducir un valor en la celda B" ElseIf CF > CB Then MsgBox "Debe introducir un valor en la celda B" Else novacias = Evaluate("=SMALL(IF((E8:E" & CB & "="""")*(F8:F" & CB & "=""""),ROW(E8:E" & CB & ")),1)") If IsError(novacias) = False Then MsgBox "Error: celdas en blanco" Range("E" & novacias & "").Select Else lr = CF fila = Evaluate("=SMALL(IF((E9:E" & lr & "<>"""")*(F9:F" & CE & "<>""""),ROW(E9:E" & lr & ")),1)") If IsError(fila) = False Then MsgBox "Error: celdas con datos en dos columnas" Range("F" & fila & "").Select Exit Sub Else lr = CB sobregiro = Evaluate("=SMALL(IF(F9:F" & lr & ">O9:O" & lr & ",ROW(F9:F" & lr & ")),1)") If sobregiro <> 0 Then MsgBox "Error: Sobregiro" Range("F" & sobregiro & "").Select Exit Sub Else MsgBox "PRUEBA CON EXITO" End If End If End If End If End Sub