Ejecutar código dependiendo valor Combobox

Tengo en un form de visual 6.0 un combobox el cual tiene 4 items (planilla1, planilla2 planilla3 y planilla4) tengo un botón en el cual quiero agregar que al darle click al botón en el cual quiero que ejecute un código dependiendo de la planilla seleccionada en el bombo ejemplo di es la planilla 1 ejecute el código plani1, planilla dos y ejecute plani2 y así sucesivamente.

1 Respuesta

Respuesta
1

¿Te estas refiriendo a la aplication VISUAL BASIC o a la misma dentro de excel?

Porque creo que fuera de excel el programa visual trabaja con códigos diferentes...

De igual forma te dejo el de excel xD je je

Puedes crear los 4 codigos en un modulo y llamarlos desde un IF o directamente ponerlos dentro del IF

Private Sub CodigoBoton_Click()
If ComboBox1.Value = "Planilla1" Then
MsgBox "Has seleccionado la Planilla1", vbInformation, "Mensaje de Combobox"
ElseIf ComboBox1.Value = "Planilla2" Then
MsgBox "Has seleccionado la Planilla2", vbInformation, "Mensaje de Combobox"
ElseIf ComboBox1.Value = "Planilla3" Then
MsgBox "Has seleccionado la Planilla3", vbInformation, "Mensaje de Combobox"
ElseIf ComboBox1.Value = "Planilla4" Then
MsgBox "Has seleccionado la Planilla4", vbInformation, "Mensaje de Combobox"
End If
End Sub

Si colocas este  codigo en un boton, al dar click te saldra un mensaje dependiendo que valor hayas seleccionado en el combobox...

Private Sub ComboBox1_Change()
If ComboBox1.Value = "Planilla1" Then
MsgBox "Has seleccionado la Planilla1", vbInformation, "Mensaje de Combobox"
ElseIf ComboBox1.Value = "Planilla2" Then
MsgBox "Has seleccionado la Planilla2", vbInformation, "Mensaje de Combobox"
ElseIf ComboBox1.Value = "Planilla3" Then
MsgBox "Has seleccionado la Planilla3", vbInformation, "Mensaje de Combobox"
ElseIf ComboBox1.Value = "Planilla4" Then
MsgBox "Has seleccionado la Planilla4", vbInformation, "Mensaje de Combobox"
End If
End Sub

o puedes colocarlo en el combobox y se ejecutara al cambiar el valor..

Espero te haya sido útil compañero, saludos y no olvides valorar la respuesta si te fue útil. =)

Recuerda cambiar los mensajes por las macros u crear los codigos en un modulo y cambiar los mensajes por los nombres de cada macro...

Estoy usando visual basic 6.0 y tenia algo así pero no corre:

Private Sub cmdExportar_Click()


If cmbPlantilla = "Constancia de Trabajo" Then
Call ExportarConstancia
If cmbPlantilla = "Medicinas / Estudios" Then
Call ExportarPlantillaMedicinas
If cmbPlantilla = "Correo Egreso" Then
Call ExportarPlantillaCorreo
If cmbPlantilla = "Anticipo de Prestaciones" Then
Call ExportarPlantillaAnticipos
If cmbPlantilla = "Evaluacion Medica" Then
Call ExportarPlantillaEvaMedica
If cmbPlantilla = "Reporte 14-52" Then
Call ExportarPlantilla1452
If cmbPlantilla = "Reporte 14-100" Then
Call ExportarPlantilla14100
End If
End If
End If
End If
End If
End If
End If


End Sub

Prueba así

Private Sub cmdExportar_Click()
If cmbPlantilla = "Constancia de Trabajo" Then
Call ExportarConstancia
ElseIf cmbPlantilla = "Medicinas / Estudios" Then
Call ExportarPlantillaMedicinas
ElseIf cmbPlantilla = "Correo Egreso" Then
Call ExportarPlantillaCorreo
ElseIf cmbPlantilla = "Anticipo de Prestaciones" Then
Call ExportarPlantillaAnticipos
ElseIf cmbPlantilla = "Evaluacion Medica" Then
Call ExportarPlantillaEvaMedica
ElseIf cmbPlantilla = "Reporte 14-52" Then
Call ExportarPlantilla1452
ElseIf cmbPlantilla = "Reporte 14-100" Then
Call ExportarPlantilla14100
End If
End Sub

nada no ejecuta ninguno de los códigos, no se si dependerá de la lista que carga el combo?

¿Y colocando el ".value" probaste?

Private Sub cmdExportar_Change()
If cmbPlantilla.Value = "Constancia de Trabajo" Then
Call ExportarConstancia
ElseIf cmbPlantilla.Value = "Medicinas / Estudios" Then
Call ExportarPlantillaMedicinas
ElseIf cmbPlantilla.Value = "Correo Egreso" Then
Call ExportarPlantillaCorreo
ElseIf cmbPlantilla.Value = "Anticipo de Prestaciones" Then
Call ExportarPlantillaAnticipos
ElseIf cmbPlantilla.Value = "Evaluacion Medica" Then
Call ExportarPlantillaEvaMedica
ElseIf cmbPlantilla.Value = "Reporte 14-52" Then
Call ExportarPlantilla1452
ElseIf cmbPlantilla.Value = "Reporte 14-100" Then
Call ExportarPlantilla14100
End If
End Sub

Por eso te decia que el visual fuera de excel tiene algunas cosas diferentes y yo conozco excel pero igual buscamos la vuelta y de paso aprendemos los 2 xD jeje

En este te agregue el ".Value" y te cambie el modo a "Change" ya que estaba en click... prueba si este te funciona...

¿Lo qué no te pregunte es en donde estas colocando el código?

¿En un botón o dentro del combobox?

Si lo estas colocando en un botón el modo seria "cmdExportar_Click" pero si lo estas colocando dentro del Combobox el modo seria "cmdExportar_Change"

Estaba mirando un video de visual basic y como en el aplicativo fuera de excel no hace falta poner el "END IF" =O ¿Sera?

Pues intenta de esta forma entonces je je yo te tiro opciones tu tomalas si te parece bien intentar...

Private Sub cmdExportar_Click()
If cmbPlantilla.Value = "Constancia de Trabajo" Then Call ExportarConstancia
If cmbPlantilla.Value = "Medicinas / Estudios" Then Call ExportarPlantillaMedicinas
If cmbPlantilla.Value = "Correo Egreso" Then Call ExportarPlantillaCorreo
If cmbPlantilla.Value = "Anticipo de Prestaciones" Then Call ExportarPlantillaAnticipos
If cmbPlantilla.Value = "Evaluacion Medica" Then Call ExportarPlantillaEvaMedica
If cmbPlantilla.Value = "Reporte 14-52" Then Call ExportarPlantilla1452
If cmbPlantilla.Value = "Reporte 14-100" Then Call ExportarPlantilla14100
End Sub

lo coloque en el combo con .change() 

revise con .value y .text

y nada lo mismo en el botón con .click()

Private Sub cmdExportar_Click()
If cmbPlantilla.Text = "Constancia de Trabajo" Then
Call ExportarConstancia

ElseIf cmbPlantilla.Text = "Medicinas / Estudios" Then
Call ExportarPlantillaMedicinas

ElseIf cmbPlantilla.Text = "Correo Egreso" Then
Call ExportarPlantillaCorreo

ElseIf cmbPlantilla.Text = "Anticipo de Prestaciones" Then
Call ExportarPlantillaAnticipos

ElseIf cmbPlantilla.Text = "Evaluacion Medica" Then
Call ExportarPlantillaEvaMedica

ElseIf cmbPlantilla.Text = "Reporte 14-52" Then
Call ExportarPlantilla1452

ElseIf cmbPlantilla.Text = "Reporte 14-100" Then
Call ExportarPlantilla14100

End If
End Sub

Que extraño... si quieres pásame el archivo y lo bicho.. quizás encuentre el error...

es un programa en visual v6.0 conectado a una base de datos en red, difícil pasarlo

Seguro te entiendo... estaba pensando.. revisa el nombre del combobox y el botón que sean los mismos, si en la macro pusiste "cmdExportar" y el botón se llama "cmbexportar" ya lo toma como que es otro botón... los nombres de los objetos tienen que ser tal cual en la macro... chequea esta macro en comparación con tu botón y el combobox y dentro de cada macro para cada botón haz lo mismo... chequea que estén dirijidos al mismo botones y mismo combo con el mismo nombre, escritos tal cual en la macro...

Ya todo eso esta verificado, estoy pensando que pueda ser o estar afectando de donde se llene el combo

Private Sub Form_Load()
Configurar_Grilla
AbreBD
CargaGrid "TODOS"
MTipo = "NOMBRE"
lblNOW.Caption = Format(Date, "dd") & " dias del mes de " & Format(Date, "mmmm") & " del " & Format(Date, "YYYY")
Label1.Caption = FormatDateTime(Date, vbLongDate) & " a las " & Format(Now, "hh-mm-ss")
ssql = "Select CIA, FICHA, NC, CEDULA, NOMBRESYAPELLIDOS, INGRESO, EGRESO, GERENCIA, DEPARTAMENTO, CARGO, SUELDO, ESCALA, BONO, COMPAÑÍA, RIF, PATRONAL, APELLIDOS, NOMBRES, ABONOS, ANTICIPOS, MEDICO, FARMACIA,DIRECCIÓN From Empleados"
Call llenagridX(Me.Grid1, ssql)
ResizeGrid Me.Grid1, DATA
llenacombo Me.cmbPlantilla, 66, 1 End Sub

La ultima línea es : "llenacombo Me.cmbPlantilla, 66, 1"
  Es la que llena el combo no se si esto este afectando algo, ya que el combo se llena desde una base de datos en access

Estaba mirando y el problema como te decía aveces esta en las mayúsculas... para evitar errores de escritura pega esto dentro de tu formulario

With cmbPlantilla
.AddItem "Constancia de Trabajo"
.AddItem "Medicinas / Estudios"
. AddItem "Correo Egreso"
. AddItem "Anticipo de Prestaciones"
. AddItem "Evaluacion Medica"
. AddItem "Reporte 14-52"
. AddItem "Reporte 14-100"
End With

Eso hiria en el formulario initialize o activate... si aun no tienes creado ninguno de esos metodos crealo y ponlo adentro para que te quede asi

Private Sub UserForm_Initialize()
With cmbPlantilla
.AddItem "Constancia de Trabajo"
.AddItem "Medicinas / Estudios"
. AddItem "Correo Egreso"
. AddItem "Anticipo de Prestaciones"
. AddItem "Evaluacion Medica"
. AddItem "Reporte 14-52"
. AddItem "Reporte 14-100"
End With
End sub

Luego de esto si pega tu codigo asi

Private Sub cmdExportar_Click()
If cmbPlantilla.Value = "Constancia de Trabajo" Then Call ExportarConstancia
If cmbPlantilla.Value = "Medicinas / Estudios" Then Call ExportarPlantillaMedicinas
If cmbPlantilla.Value = "Correo Egreso" Then Call ExportarPlantillaCorreo
If cmbPlantilla.Value = "Anticipo de Prestaciones" Then Call ExportarPlantillaAnticipos
If cmbPlantilla.Value = "Evaluacion Medica" Then Call ExportarPlantillaEvaMedica
If cmbPlantilla.Value = "Reporte 14-52" Then Call ExportarPlantilla1452
If cmbPlantilla.Value = "Reporte 14-100" Then Call ExportarPlantilla14100
End Sub

Y de esta forma te tendria que funcionar 100% , obviamente tu boton se tiene que llamar"cmdExportar" y el combobox "cmbPlantilla"

Posiblemente tengas algún lio ahí.. porque sino te llena el combo tal cual la macro el mismo no lo reconocerá... ¿y si usas ese pequeño código que te pase para que se llene el combo al iniciar el form? Creo que en tu caso no seria userform_initialize sino form_initialize eso tu lo veras pero el with con el additem te tiene que funcionar cosa que apenas arranque el form se llene la lista para evitar lio con datos..

el detalle de cargar el combo como indicas estaría en que cuando me meto en los parámetros este se llena de los datos del access si yo le digo plantillas el llena el combo con plantillas que es cuando las necesito exportar, pero si le digo en parámetros listados el combo se llena con otro listado diferente que este no se exporta

Otra opción seria no hacer referencia al nombre sino al numero de elemento

Private Sub cmbButton_Click()
If cmbPlantilla.ListIndex = 0 Then Call ExportarConstancia
If cmbPlantilla.ListIndex = 1 Then Call ExportarPlantillaMedicinas
If cmbPlantilla.ListIndex = 2 Then Call ExportarPlantillaCorreo
If cmbPlantilla.ListIndex = 3 Then Call ExportarPlantillaAnticipos
If cmbPlantilla.ListIndex = 4 Then Call ExportarPlantillaEvaMedica
If cmbPlantilla.ListIndex = 5 Then Call ExportarPlantilla1452
If cmbPlantilla.ListIndex = 6 Then Call ExportarPlantilla14100
End Sub

pero tendrias que cargar siempre los elementos en el mismo orden...

Perdón compañero le cambie le nombre porque cree otro botón y no le puse le nombre de tu código je je

Private Sub cmdExportar_Click()
If cmbPlantilla.ListIndex = 0 Then Call ExportarConstancia
If cmbPlantilla.ListIndex = 1 Then Call ExportarPlantillaMedicinas
If cmbPlantilla.ListIndex = 2 Then Call ExportarPlantillaCorreo
If cmbPlantilla.ListIndex = 3 Then Call ExportarPlantillaAnticipos
If cmbPlantilla.ListIndex = 4 Then Call ExportarPlantillaEvaMedica
If cmbPlantilla.ListIndex = 5 Then Call ExportarPlantilla1452
If cmbPlantilla.ListIndex = 6 Then Call ExportarPlantilla14100
End sub

Recuerda que si el codigo te fue de utilizad me gustaria que me lo hagas saber con una valoracion o un agradecimiento =) no hay mejor satisfaccion para alguien de la comunidad que saber que pudo resolver un problema jeje saludos =)

El detalle estaba en que el visual lee solo en mayúsculas y hacia interferencia el código quedo así:

Private Sub cmdExportar_Click()
If lblCriterio.Caption = "" Then
MsgBox "Debe seleccionar un registro para exportar"
Exit Sub
End If
If Me.cmbPlantilla.Text = "" Then
MsgBox "Debe seleccionar un Documento para exportar"
Exit Sub
End If

If UCase(Me.cmbPlantilla.Text) = UCase("Constancia de Trabajo") Then
Call exportarconstancia

ElseIf UCase(Me.cmbPlantilla.Text) = UCase("Medicinas / Estudios") Then
Call exportarplantillamedicinas

ElseIf UCase(Me.cmbPlantilla.Text) = UCase("Correo Egreso") Then
Call exportarplantillacorreo

ElseIf UCase(Me.cmbPlantilla.Text) = UCase("Anticipo de Prestaciones") Then
Call exportarplantillaanticipos

ElseIf UCase(Me.cmbPlantilla.Text) = UCase("Evaluacion Medica") Then
Call exportarplantillaevamedica

ElseIf UCase(Me.cmbPlantilla.Text) = UCase("Reporte 14-52") Then
Call exportarplantilla1452

ElseIf UCase(Me.cmbPlantilla.Text) = UCase("Reporte 14-100") Then
Call exportarplantilla14100

End If
iniciagrid
End Sub

Excelente me alegro que hayas solucionado, en realidad no es que solo lea mayúsculas... yo no me di cuenta de eso, pasaste todo a mayúsculas con lo que hiciste que los datos coincidan... también pudiste haber pasado todo a minisculas "LCASE" y también te iba a funcionar pero ta lo que importa es que lo solucionaste =)

Saludos compañero quedo al tanto si precisas ayuda con algún otro tema..

Recuerda valorar las respuestas y cerrar la pregunta...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas