Case de forma reducida en access mediante macros

Hola y gracias de antemano. Estoy desarrollando un excel, y tengo un problemilla con un case. Esta es la programación que tengo.
Private Sub Guardar_Click()
Dim Msg As String
Dim Resp As String
Msg = "¿Seguro que desea cargar los datos?"
Resp = MsgBox(Msg, vbQuestion + vbYesNo, "CONFIRMACION")
If Resp = vbYes Then
    Select Case ComboBox1.ListIndex
        Case 0
            Select Case ComboBox2.ListIndex
                Case 0
                Sheets("Datos").Range("D4") = Sheets("Datos").Range("D4") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
                Case 1
                Sheets("Datos").Range("D5") = Sheets("Datos").Range("D5") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
                Case 2
                Sheets("Datos").Range("D6") = Sheets("Datos").Range("D6") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
            End Select
        Case 1
            Select Case ComboBox2.ListIndex
                Case 0
                Sheets("Datos").Range("D18") = Sheets("Datos").Range("D18") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
                Case 1
                Sheets("Datos").Range("D19") = Sheets("Datos").Range("D19") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
                Case 2
                Sheets("Datos").Range("D20") = Sheets("Datos").Range("D20") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
            End Select
        Case 2
            Select Case ComboBox2.ListIndex
                Case 0
                Sheets("Datos").Range("D32") = Sheets("Datos").Range("D32") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
                Case 1
                Sheets("Datos").Range("D33") = Sheets("Datos").Range("D33") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
                Case 2
                Sheets("Datos").Range("D34") = Sheets("Datos").Range("D34") + EntradaMaterial.TextBox3.Value
                TextBox3 = Empty
                MsgBox ("La operacion se ha realizado correctamente")
            End Select
    End Select
Else
TextBox3 = Empty
End If
End Sub
Lo que ue quiero es que en este caso solo he puesto 3 case, peor tengo muchos más y querría abreviarlo. Como ves las celdas de la hoja también se incrementan una unidad.
¿Cómo puedo hacerlo?
Gracias.

1 respuesta

Respuesta
1
Lo primero indicar que la pregunta es de Excel... y la has puesto en Access.
Lo segundo es indicarte como lo haría yo (por lo poco que he visto)
Veo que, en función del ListIndex del ComboBox1 se empieza en una u otra fila:
0 --> 4
1 --> 18
2 --> 32
Luego veo que, dentro de cada posible valor, evalúas el ComboBox2. Si su ListIndex es 0, empiezas en la fila de, llemémosla, origen (4, 18 o 32). Si el valor es 1, en la siguiente a la de origen, y si es 2, dos filas más allá.
Ademas siempre haces la misma operación: sumar el valor de un textbox a lo que diga la celda.
Bien, todo eso ya nos aporta un patrón que nos permite intentar acortar el código.
Hasta aquí es pura lógica. Ahora se trata de pasarlo a código (y en Excel reconozco que voy un poco justo)
Me parece que en Excel, al igual que en Access, puedes crear una dirección utilizando posiciones de fila+columna. Creo que con Cells...
Private Sub Guardar_Click()
If MsgBox("¿Seguro que desea cargar los datos?", vbQuestion + vbYesNo, "CONFIRMACION") = vbNo Then
  TextBox3 = Empty
  Exit Sub
End If
Dim x As Integer
x = Choose(ComboBox1.ListIndex + 1, 4, 18, 32) + ComboBox2.ListIndex
Cells(x, 4) = Cells(x, 4) + EntradaMaterial.TextBox3.Value
TextBox3 = Empty
MsgBox("La operación se ha realizado correctamente")
End Sub
Escrito del tirón....

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas