Multiplicar con vba valores determinados dentro de un combobox

Tengo una duda de si se puede hacer un multiplicación con vba solo cuando aparezcan unos valores determinados.

Me explico:

En el combobox1 tengo una selección ( montar cabezal) en el combobox2 tengo seleccionado (0.75)y en el combobox3 tengo seleccionado (48). La idea es que la formula actuara solo cuando apareciera esa selección en el combobox1. " montar cabezal = 48*0.75*0.25"-(0.25 es una constante) . Este resultado se mandaría a una columna de un listbox

2 respuestas

Respuesta
1

El Excel no es lo mío, de hecho no tengo ni idea, pero puedes hacerlo perfectamente. Lo que no dices es si quieres que te ponga 0,25*0,75*40 o directamente el resultado de esa operación. Vamos a suponer lo primero. En el evento Después de actualizar del combobox3 puedes crear una macro, creo que en Excel es así y poner

Private Sub Combobox3_AfterUpdate()

if combobox1="Montar Cabezal" then

listaX.additem"48*0,75*0,25"

end if

End Sub

Siendo ListaX el nombre del cuadro de lista.

Respuesta
1

Te recomiendo poner la operación en un botón.

Si los valores están en el combobox, entonces podemos validar que realmente hay seleccionado un dato de cada combo.

Prueba lo siguiente:

Private Sub CommandButton1_Click()
  If ComboBox1.Value = "montar cabezal" Then
    If ComboBox2.ListIndex > -1 Then
      If ComboBox3.ListIndex > -1 Then
        ListBox1.AddItem CDbl(Replace(ComboBox2.Value, ",", ".")) * CDbl(ComboBox3.Value) * 0.25
      Else
        MsgBox "Selecciona valor en el combobox3"
      End If
    Else
      MsgBox "Selecciona valor en el combobox2"
    End If
  Else
    MsgBox "Selecciona valor en el combobox1"
  End If
End Sub

Si no quieres los msgbox, entonces puedes simplificarlo así:

Private Sub CommandButton1_Click()
  If ComboBox1.Value = "montar cabezal" And ComboBox2.ListIndex > -1 And ComboBox3.ListIndex > -1 Then
    ListBox1.AddItem CDbl(Replace(ComboBox2.Value, ",", ".")) * CDbl(ComboBox3.Value) * 0.25
  End If
End Sub

¡Gracias! Funciona a la perfección.

Pero ahora me crea un conflicto con el resto del código.

1- Hay otras selecciones en el combo que no tienen que usar esa sentencia y el código es incompatible

Private Sub CommandButton1_Click()
Dim ctotal As Integer
  Hoja3.Cells(1, 14) = ComboBox2 & " " & ComboBox3 & "-" & ComboBox4 & "-" & ComboBox5
  ctotal = Hoja3.Cells(1, 15) * TextBox2
 If ComboBox3.Value = "MONTAR DISTRIBUIDOR" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
    ListBox1.AddItem CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
  End If
 If ComboBox3.Value = "MONTAR TAPA DISTRIBUIDOR" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
    ListBox1.AddItem CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
  End If
  With ListBox1
    .ColumnCount = 2
    .ColumnWidths = "200pt;20pt"
    .AddItem Hoja3.Cells(1, 14)
    .List(.ListCount - 1, 1) = ctotal
  End With
End Sub

2- Me salen en lineas diferentes dentro del listbox.

¿En cuál línea tienes el error?

Prueba así:

ListBox1.AddItem CDbl(ComboBox4.Value) * CDbl(ComboBox5.Value) * 0.25

como te puedo compartir el archivo


                    

La multiplicación tiene que ver con superador de miles.

Prueba con números enteros.

Haz una prueba 2 * 5 * 3

Para que veas el funcionamiento, después cambias uno de esos valores por algo como esto:

2 * 2.5 * 3

Revisa el resultado, si no te respeta el punto decimal, entonces cambias a:

2 * 2,5 * 3

Y si no te funciona, entonces sustituyes la coma por punto, o el punto por coma.

Son pruebas que debes realizar, como te digo depende de tu separador decimal.

hola dante

Lo de los decimales esta solucionado.

Pero el resultado  me sale en la columna 0 en vez de en la  1

Pero el resultado me sale en la columna 0 en vez de en la 1

¿A cuál columna te refieres?

Puedes poner aquí tu código.

Private Sub CommandButton1_Click()
Dim ctotal As Integer
  Hoja3.Cells(1, 14) = ComboBox2 & " " & ComboBox3 & "-" & ComboBox4 & "-" & ComboBox5
  'ctotal = Hoja3.Cells(1, 15) * TextBox2
 If ComboBox3.Value = "MONTAR DISTRIBUIDOR" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
    ListBox1.AddItem CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
  End If
 If ComboBox3.Value = "MONTAR TAPA DISTRIBUIDOR" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
    ListBox1.AddItem CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
  End If
  With ListBox1
    .ColumnCount = 2
    .ColumnWidths = "200pt;20pt"
    .AddItem Hoja3.Cells(1, 14)
    .List(.ListCount - 1, 1) = ctotal
  End With
End Sub

el resultado de la multiplicación tiene que salir en la columna 1 del listbox1

¿Y qué vas a poner en la columna 0?

Prueba esto:

Private Sub CommandButton1_Click()
  Dim ctotal As Integer
  With ListBox1
    Hoja3.Cells(1, 14) = ComboBox2 & " " & ComboBox3 & "-" & ComboBox4 & "-" & ComboBox5
    'ctotal = Hoja3.Cells(1, 15) * TextBox2
    If ComboBox3.Value = "MONTAR DISTRIBUIDOR" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
      .AddItem ""
      .List(.ListCount - 1, 1) = CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
    End If
    If ComboBox3.Value = "MONTAR TAPA DISTRIBUIDOR" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
      .AddItem ""
      .List(.ListCount - 1, 1) = CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
    End If
    .ColumnCount = 2
    .ColumnWidths = "200pt;20pt"
    .AddItem Hoja3.Cells(1, 14)
    .List(.ListCount - 1, 1) = ctotal
  End With
End Sub

En la columna 0 tenia puesto la concatenación del resto de datos del formulario.

En el código inicial lo mandaba a una celda de la hoja 3 para que me devolviera un resultado mediante buscarv.

La ultima pregunta sobre este tema.

Al igual que  en el combo3 le dimos un nombre concreto para que realizara la operación,

se podría poner en los combos4 y 5 para que también multiplicaran si coincidieran?

 If ComboBox3.Value = "ABRIR BRIDA" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
      .AddItem ComboBox2 & " " & ComboBox3 & "-" & ComboBox4 & "-" & ComboBox5
      .List(.ListCount - 1, 1) = (ComboBox4.Value"1") & (ComboBox5.Value"150" * 0.25
    End If

No te entiendo a qué te refieres con combos4 y 5.

Si tienes algo como esto para el combo3

    If ComboBox3.Value = "MONTAR TAPA DISTRIBUIDOR" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
      .AddItem ""
      .List(.ListCount - 1, 1) = CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
    End If

Y lo quieres para el combo4

    If ComboBox4.Value = "tus datos" And ComboBox4.ListIndex > -1 And ComboBox5.ListIndex > -1 Then
      .AddItem ""
      .List(.ListCount - 1, 1) = CDbl(Replace(ComboBox4.Value, ",", ".")) * CDbl(ComboBox5.Value) * 0.25
    End If

Solamente realiza las pruebas, no te preocupes  por realizar pruebas, de esa manera es como se aprende.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas