sábado, 31 de octubre de 2020

39 - RowSource o cómo actualizar desplegables desde otro formulario.

 Ya hemos visto en video N° 9 cómo utilizar macros o procesos desde diferentes ámbitos o llamadas.

Ahora veremos cómo actualizar un control desplegable que tenemos en nuestro userform abierto cuando la lista se actualiza desde otro formulario. Sin necesidad de cerrarlo y volverlo a abrir.

En el video 39 dejo 3 ejemplos: 

Ej 1- solicitando el nuevo elemento de la lista desde un InputBox.
Nuestro desplegable tendrá asignado el rango a mostrar, desde la propiedad RowSource (no desde el código).

Una vez ingresado el texto en el InputBox se procede a volcarlo a la lista en modo mayúscula.


Private Sub CommandButton1_Click()             'nueva caja

'solicita nuevo nombre (en mayúsculas)

caja = UCase(InputBox("Ingresar nuevo Tipo."))

'si el InputBox queda vacío

If caja = "" Then

    ComboBox2.SetFocus

Else

'agrega a la hoja Listas       'verificar q no se duplique (*)

    With Sheets("Listas")

        .Range("E" & .Range("E" & Rows.Count).End(xlUp).Row + 1) = caja

    End With

                                       

'actualizar el control         'ordenar previamente (**)

    ComboBox2.RowSource = "=cajas"

    ComboBox2.Text = caja

    'opcional: pasarle el foco a algún otro control

    ComboBox4.SetFocus

End If

End Sub


NOTA: las macros para evitar duplicados y ordenar la lista se encuentran en el libro de descarga, en formularios del modelo N° 2.

Ej 2: solicitando el nuevo nombre desde otro Userform con un control TextBox:
En este caso dejamos vacía la propiedad RowSource del control desplegable. Se lo alimentará con el método AddIem desde el evento Initialize del formulario, recorriendo la columna de datos que se encuentra en una hoja (Listas).

Private Sub UserForm_Initialize()

x = Sheets("Listas").Range("A" & Rows.Count).End(xlUp).Row

If x > 2 Then

    For i = 3 To x

        ComboBox1.AddItem Sheets("Listas").Range("A" & i)

    Next i

End If

End Sub


Private Sub CommandButton3_Click()       'nueva marca

'llamar al segundo formulario

UF_ProdMarcas.Show

'al regresar ya se habrá dejado en el control Combobox el texto ingresado

If ComboBox1 <> "" Then

    'guardarlo provisoriamente en una variable

    dato = ComboBox1.Text

    'ordenar la lista

    Call ordenaLISTAS

    'vaciar el combo para actualizarlo nuevamente con la lista actualizada

    ComboBox1.Clear

    For i = 3 To Sheets("Listas").Range("A" & Rows.Count).End(xlUp).Row

        ComboBox1.AddItem Sheets("Listas").Range("A" & i)

    Next i

    'volver a mostrar el dato guardado

    ComboBox1 = dato

End If

End Sub


En el segundo formulario, el botón GUARDAR tendrá el siguiente código:

Private Sub CommandButton2_Click()       

UF_Prod.ComboBox1 = TextBox1     'lo muestra en el control

Unload UF_ProdMarcas 

End Sub 


NOTA: el código completo, con el control para evitar duplicados y macro de ordenamiento se encuentra en el libro de descarga.

Ej 3: llamando a un segundo formulario común a otros procesos.
En este tercer ejemplo, el desplegable se alimenta con la propiedad RowSource declarada en el evento Initialize del formulario principal.

Como en el segundo formulario es posible actualizar la lista con más de un elemento, al cerrarlo se deja vacío el desplegable para realizar la selección.

Private Sub UserForm_Initialize()

filx = Sheets("Listas").Range("C1").CurrentRegion.Rows.Count

ComboBox2.RowSource = "=Listas!C3:C" & filx

End Sub

 

Private Sub CommandButton4_Click()

'se selecciona la primer opción del 2do formulario, dándole el foco al control de texto

UF_VerificaListas.OptionButton1.Value = True

UF_VerificaListas.TextBox1.SetFocus

'se llama al 2do formulario

UF_VerificaListas.Show

'al regresar se actualiza el control combobox con el nuevo rango

ComboBox2.RowSource = "=Listas!C3:C" & Sheets("Listas").Range("C1").CurrentRegion.Rows.Count

             End Sub 

NOTA: el botón de guardado del segundo formulario debe realizar el control de duplicados. Es opcional ordenar la lista desde ese formulario o al regresar al formulario principal (códigos que se encuentran en formulario del modelo N° 2)

Descarga libro completo desde aquí.

Ver Video N° 39 desde aquí.

No hay comentarios.:

Publicar un comentario