Jerarquía en selección de datos automática por VBA

Tengo un formulario de VBA para cargar los valores de un análisis (Cuadro bonificaciones y rebajas). Según los valores que yo cargue, el formulario categorizará al rubro (ph - me - TD - entre otros) en 4 categorías (G1 - G2 - G3 - F/E). (Cuadro de Grados)
Lo que yo necesito es que al final del cuadro donde dice grado (cuadro de resultados), ahí seleccione de forma automática el grado general del análisis (Ahora lo hago de forma manual con un combobox).

La forma de determinar el grado del análisis es según la categorías que haya presente en la muestra. Si hay F/E, toda la muestra es F/E. 
Si no hay ningún F/E pero si hay G3, entonces toda la muestra es G3

Si no hay ningún F/E ni G3, entonces la muestra es G2

Si no hay ninguno de los anteriores, entonces la muestra es G1.
No importa que todos los rubros sean G1 y uno solo F/E. Mientras haya un F/E (o G2 o G3) la muestra tomara el más bajo.

El orden es 1º G1 - 2º G2 - 3º G3 - 4º F/E

Aca les paso una captura del programa

En este caso, la muestra es F/E porque hay rubros de calidad que tienen dicho valor. Si no hubiera F/E, la muestra seria G2 (porque no hay presencia de G3)
Los valores de D/E y R no le presten atención.

La pregunta es, ¿cómo logro que me busque el valor más bajo según la categoría de calidad que les pase y lo seleccione automáticamente en el cuadro de resultados?

1 respuesta

Respuesta
2

Te anexo el código:

Private Sub TextBox1_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox2_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox3_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox4_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox5_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox6_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox7_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox8_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox9_Change()
    Call Resultado_Grado
End Sub
Private Sub TextBox10_Change()
    Call Resultado_Grado
End Sub
'
Sub Resultado_Grado()
    boxes = Array("textbox1", "textbox2", "textbox3", "textbox4", "textbox5", _
                  "textbox6", "textbox7", "textbox8", "textbox9", "textbox10")
    wmax = 1
    For i = LBound(boxes) To UBound(boxes)
        Select Case Controls(boxes(i)).Value
            Case "F/E": wmax = 4
            Case "G3": If 3 > wmax Then wmax = 3
            Case "G2": If 2 > wmax Then wmax = 2
        End Select
    Next
    Select Case wmax
        Case 1: ComboBox1.Value = "G1"
        Case 2: ComboBox1.Value = "G2"
        Case 3: ComboBox1.Value = "G3"
        Case 4: ComboBox1.Value = "F/E"
    End Select
End Sub

Cambia en el código los nombres de los textbox1 al textbox10 por los nombres de tus textbox.

También cambia el nombre combobox1 por el nombre de tu combobox.


El código es para que funcione en automático cada vez que capturas un dato en los textbox.

Si no lo quieres de esa forma y quieres incluir el código en tu botón "Calcular", entonces quedaría así:

Private Sub CommandButton1_Click()
'botón calcular
    Call Resultado_Grado
End Sub
'
Sub Resultado_Grado()
    boxes = Array("textbox1", "textbox2", "textbox3", "textbox4", "textbox5", _
                  "textbox6", "textbox7", "textbox8", "textbox9", "textbox10")
    wmax = 1
    For i = LBound(boxes) To UBound(boxes)
        Select Case Controls(boxes(i)).Value
            Case "F/E": wmax = 4
            Case "G3": If 3 > wmax Then wmax = 3
            Case "G2": If 2 > wmax Then wmax = 2
        End Select
    Next
    Select Case wmax
        Case 1: ComboBox1.Value = "G1"
        Case 2: ComboBox1.Value = "G2"
        Case 3: ComboBox1.Value = "G3"
        Case 4: ComboBox1.Value = "F/E"
    End Select
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas