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.
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