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
¿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
¿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 ExportarConstanciaElseIf cmbPlantilla.Text = "Medicinas / Estudios" Then
Call ExportarPlantillaMedicinasElseIf cmbPlantilla.Text = "Correo Egreso" Then
Call ExportarPlantillaCorreoElseIf cmbPlantilla.Text = "Anticipo de Prestaciones" Then
Call ExportarPlantillaAnticiposElseIf cmbPlantilla.Text = "Evaluacion Medica" Then
Call ExportarPlantillaEvaMedicaElseIf cmbPlantilla.Text = "Reporte 14-52" Then
Call ExportarPlantilla1452ElseIf cmbPlantilla.Text = "Reporte 14-100" Then
Call ExportarPlantilla14100End If
End Sub
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...
- Compartir respuesta