Lo prometido es deuda dicen por ahí, así que acabare por mostrarles como quedo mi libro de desayunos usando arraigos como valores.
Si no has visto la entrada anterior puedes revisarla aquí.
Al final el libro quedo algo así (con un gran sol iniciador de macros para sentirme mañanero jejeje).
Use una UserForm simple para calcular el desayuno. Esta misma afecta a las celdas de porciones y puedes ver su código completo abajo.
Para la caja contador de numeros
Private Sub Cfrutas_Change() On Error Resume Next i = 1 For i = 1 To rng If Cells(i + 2, 2).Value = frutas.Value Then Cells(i + 2, 5).Value = Cfrutas.Value Next i End Sub
Para el controlador de numeros
Private Sub ctrln_Change() On Error Resume Next Cfrutas.Value = ctrln.Value Dim suma As Integer suma = Application.WorksheetFunction.Sum(Range("F3:F1000000")) If suma < 500 * 0.9 Then Resultado.Value = "Echale mas" If suma >= 500 * 0.9 And suma <= 5000 * 1.1 Then Resultado.Value = "Perfecto!" If suma > 500 * 1.1 Then Resultado.Value = "Ya te pasaste!" End Sub
Para el cuadro de lista de frutas
Private Sub frutas_Click() ctrln.Value = 0 End Sub
Para iniciar la UserForm
Private Sub UserForm_initialize() Range("E3:E1000000").ClearContents frutas.Value = "" Me.frutas.List = MiDesayuno2() With UserForm1 .StartUpPosition = 0 .Left = 100 .Top = 200 End With End Sub
Podemos apreciar que estamos declarando algunas variables que no están declaradas dentro del código, esto se debe a que en un inicio esas variables fueron declaradas en un módulo aparte como públicas, por lo cual pueden ser usadas dentro de cualquier ámbito de VBA. Ese modulo es el que controla toda la aparición de la macro y puedes verlo aquí abajo.
Public MiDesayuno2() As Variant Public rng, i, seleccion As Integer Sub arraigo_desayuno_2() Worksheets(1).Activate rng = WorksheetFunction.CountA(Range("B3:B1000000")) ReDim MiDesayuno2(rng) As Variant For i = 1 To rng MiDesayuno2(i) = Cells(i + 2, 2).Value Next i MiDesayuno2(0) = "Escoger una fruta" UserForm1.Show End Sub
Al ser variables Public, son reconocidas por todo el ámbito, por lo cual primero se ejecutará nuestro arraigo y luego la UserForm. Adicional, vemos que existe la línea
MiDesayuno2(0) = "Escoger una fruta"
Esto es gracias a que los arraigos muestran un valor 0 por default, con el cual podemos jugar para distintos casos.
¡Ahora solo tendré que escoger la fruta y saber que tan bien estoy desayunando! La técnica podría resultar una payasada (¿Mi desayuno? ¿en serio?) pero es efectiva y útil para muchas situaciones, por lo que te invito a descargar el libro y hacer tus propias modificaciones.
Gracias por compartir esto y cualquier duda nos leemos abajo.