Comunicación Formulario y Macro

Hola buenas tardes. Tengo un problema y me preguntaba si usteddes me pueden ayudar. Estoy programando una macro en la que llamo a un formulario donde se encuentra un listbox en el que el usuario selecciona uno o varios. El caso que no se como hacer que la macro lea estos valores.
Llamo al formulario así:
Load UserForm1
    UserForm1.Show
¿Pero y después?
Gracias.

1 respuesta

Respuesta
Este es un ejemplo de ingreso de información con un Formulario, la idea es que veas como se hace para que puedas desarrollar el tuyo. Este código se pone dentro del Userform.
Private Sub UserForm_Initialize()
'cargamos el combobox
ComboBox1.AddItem Worksheets("hoja2").Range("a1")
ComboBox1.AddItem Worksheets("hoja2").Range("a2")
Worksheets("hoja1").Activate
Range("a3").Select
If ActiveCell = Empty Then
TextBox5 = 1
Else
Range("a2").End(xlDown).Select
TextBox5 = ActiveCell.Value + 1
End If
End Sub
Private Sub CommandButton1_Click()
'activamos la hoja 1 donde se encuentran los datos
Worksheets("hoja1").Activate
'desprotegemos la hoja1 para que se ingresen los nuevos datos
Worksheets("hoja1").Unprotect
Dim fila As String
'verificamos que todos los campos esten llenos
If TextBox1 = Empty Or TextBox2 = Empty Or TextBox3 = Empty Or TextBox4 = Empty Or TextBox5 = Empty Or ComboBox1 = Empty Then
MsgBox prompt:="No deje ningun campo vacio", Buttons:=vbOKOnly, Title:="Campo vacio"
GoTo seguir
End If
'verificamos que el campo de edad sea numerico
If Not IsNumeric(TextBox4) Then
MsgBox prompt:="Ingrese una edad numerica", Buttons:=vbOKOnly, Title:="Edad"
TextBox4 = Empty
GoTo seguir
End If
'verificamos que se ingrese una edad razonable
If TextBox4.Value <= 0 Or TextBox4.Value >= 120 Then
MsgBox prompt:="Ingrese una edad adecuada", Buttons:=vbOKOnly, Title:="Edad"
TextBox4 = Empty
GoTo seguir
End If
Range("a3").Select
If ActiveCell <> Empty Then
GoTo ingresar
End If
fila = ActiveCell.Row
ActiveCell = Val(TextBox5)
Range("b" + fila) = TextBox1
Range("c" + fila) = TextBox2
Range("d" + fila) = TextBox3
Range("e" + fila) = ComboBox1
Range("f" + fila) = Val(Round(TextBox4, 0))
Unload UserForm1
Worksheets("hoja1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Worksheets("hoja2").Activate
Exit Sub
ingresar:
Range("a2").End(xlDown).Offset(1, 0).Select
fila = ActiveCell.Row
ActiveCell = Val(TextBox5)
Range("b" + fila) = TextBox1
Range("c" + fila) = TextBox2
Range("d" + fila) = TextBox3
Range("e" + fila) = ComboBox1
Range("f" + fila) = Val(Round(TextBox4, 0))
Unload UserForm1
Worksheets("hoja1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Worksheets("hoja2").Activate
Exit Sub
seguir:
TextBox1.SetFocus
End Sub
Private Sub CommandButton2_Click()
Unload UserForm1
Worksheets("hoja2").Activate
End Sub
Antes que eso debes crear un modulo y poner el siguiente código, que sera el que cargara el formulario:
Sub cargar()
    UserForm1.Show
End Sub
Ójala te sirva este ejemplo. Comentame como te va
Hola pcollarte, gracias por contestar pero no es lo que estoy buscando. Me voy a explicar con más detalle:
Estoy creando una macro que realice ciertas acciones con los datos de una hoja de calculo, pero antes necesito que el usuario seleccione entre varias opciones antes de comenzar, y esto lo hago mediante un formulario. Este es el código, por ahora, de la macro:
Sub Macro1()
' Mostramos al usuario un formulario donde pueda elegir los productos que quiere rellenar datos
    ' Rellenamos los datos del ComboBox
    UserForm1.ComboBox1.AddItem "Pack SIM MUNDO"
    UserForm1.ComboBox1.AddItem "Pack SIM HABLO"
    UserForm1.ComboBox1.AddItem "Pack SIM For Free"
    UserForm1.ComboBox1.AddItem "PACK Sim Escribo"
    UserForm1.ComboBox1.AddItem "Pack Sim 12? (Más mensajes)"
    UserForm1.ComboBox1.AddItem "Pack tiempo de Magia ACB"
    UserForm1.ComboBox1.AddItem "Pack Fusion"
    UserForm1.ComboBox1.AddItem "Tarjeta Internacional"
    UserForm1.ComboBox1.AddItem "WP portabilidad prepago"
    Load UserForm1
    UserForm1.Show
    Dim arrayProductos() As String
    arrayProductos(0) = UserForm1.ListBox1.List(0)
End Sub
Ahora esto no tiene sentido, no funciona, pero refleja mi idea. Primero cargar el formulario UserForm1 y luego leer la opción elegida del ComboBox1. Como se puede elegir más de uno, lo quiero meter en un Array, pero este no es el problema. El problema es que ni siquiera se como sacar los datos del formulario.
Gracias.
Primero mil disculpas por la demora en la respuesta, pero he estado con muy poco tiempo, solo quería saber si pudiste solucionar tu problemática.
Te reitero mis disculpas
Hola pcollarte, no te preocupes. Sigo con el tema abierto. He creado una solución temporal esperando encontrar la solución. Lo que he hecho es copiar los valores en una posición de la hoja, y desde allí leerlos y pasarlos al array:
Range("U1").Select
    Dim i As Integer
    For i = 0 To ListBox1.ListCount - 1
        ActiveCell.FormulaR1C1 = ListBox1.List(i)
        ActiveCell.Offset(1, 0).Select
    Next i
    Unload Me
La solución bonita y eficiente no la encuentro. ¿Nadie sabe nada sobre este problema?
Ok
Te reitero mis disculpas, pero he estado con muy poco tiempo y no me he podido meter en los temas
Cualquier consulta estoy para poder ayudarte
Ojala que hayas solucionado tu problema y te pido si puedes cerrar la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas