Almac/Insertar datos formulario OptionButton y List

Necesito ingresar / almacenar datos en una de excel mediante un formulario, los parámetros de lo quiero hacer son los siguientes:
Estoy haciendo un "Maestro de artículos" el cual contiene
1. Nombre Artículo (TextBox) 2. IVA "GRAVADO/EXENTO" (Frame y OptionButtons) 3. Unidad (Lista desplegable que contenga por ejemplo = UNID / KG / LTR etc
He leído por horas como poder hacer esto lo más que lo logré fue desarrollar un formulario con el cuadro de texto que lo grabara en una hoja de excel hacia abajo con el siguiente código:
Private Sub CommandButton1_Click()
'Nos situamos al principio
Range("C11").Select
'Bajamos hasta encontrar la fila vacía
Do While Not IsEmpty(ActiveCell)
    'Bajamos una fila
    ActiveCell.Offset(1, 0).Select
Loop
'grabamos los datos en la primera fila vacía
'primero el nombre del producto
ActiveCell = TextBox1
'limpiamos los textbox
TextBox1 = ""
Range("d11").Select
'Bajamos hasta encontrar la fila vacía
Do While Not IsEmpty(ActiveCell)
    'Bajamos una fila
    ActiveCell.Offset(1, 0).Select
Loop
'grabamos los datos en la primera fila vacía
ActiveCell = OptionButton1
'limpiamos los textbox
OptionButton1 = ""
Este funciona perfectamente, solo que con el caso 2 y 3 he estado un poco confundido y desorientado ya que mi nivel es bajo en vba.
En el caso número 2 hice una pruba y resultó pero el resultado en la hoja de excel es "Verdadero o Falso" me imagino que debe de haber una forma que al seleccionar un OptionButton y se grabe el registro quedé grabado como "Gravado o Exento" según lo halla seleccionado el usuario.
En el caso número 3 definitivamente no hallo la forma de crear una lista desplegable dentro del mismo formulario para que a la hora de que se seleccione un item de la lista y se grabe el registro aparezca en la hoja de excel.
Agradecería mucho de su colaboración en este tema, ya que tengo ganas de aprender y sacar esta tarea la cual es de mucha utilidad para mi negocio.

1 Respuesta

Respuesta
1
Vamos por partes a ver como te puede ayudar.
- Lo primero es una cuestión de estilo y no afecta en nada al funcionamiento del código. A me mi gusta saber donde estoy sobre todo si tengo que depurar cuando tengo muchos datos. Prefiero por ello tener dos variables inix e iniy de la siguiente forma:
Dim inix, iniy as Integer
' Columna C11
inix = 11
iniy = 3 
De esta forma, que insisto es solo cosa de estilo y no tienes por qué seguirla, si cambio la hoja y quiero empezar en otra parte cambiando los valores me vale y no tengo que bucear en el código a ver donde tenía indicada la celda inicial.
En esta línea, las referencias serian con ActiveSheet.Cells(x,y).value = mivalor . Se pueden declarar para ello las variables enteras x e y y luego ir incrementándolas desde x=inix hasta donde sea.
Bueno hasta aquí nada nuevo para ti.
- Lo que sí te aconsejo es una vez que estas en la primera celda vacía de la columna C, te muevas con el Offset (0,1) a la derecha para las siguientes columnas. Te evitas los bucles y que si por error te falta un dato se te queden en fila diferente.
- Aunque los valores por defecto de una celda sean value o para un textbox text, te aconsejo que los escribas. En mi opinión queda más claro, sobre todo cuando vayas a hacer cosas más complejas (ej: cells(x, y+1). value  = TextBox1.Text
- Puedes hacer dos cosas para grabar el valor. Usar un If con los valores que quieres o la propia etiqueta del OptionButton1. Sería algo como.
if OptionButton1 then
    ActiveCell.Value = OptionButton1.Caption
else
    ActiveCell.Value = OptionButton2.Caption
end if
Cuidado porque si tienes más de dos valores esto no te servirá.
- Para la lista, lo primero que tienes que hacer es cargarla. Puedes hacerlo dinámicamente o al inicio de tu programa, al llamar al formulario... Supongo que en algún momento mostraras tu formulario desde un botón en la hoja Excel o ejecutando una macro. En tal caso dentro del procedimiento enel que llamas al formulario puedes Inicializarlo. Seria algo como:
...
call IniMiForm () 
UserForm1.show
...
Y en el IniMiForm que estaría definido dentro del código del formulario tendrías
Private Sub IniMiForm ()
ListBox1. Additem("item1")
ListBox1. Additem("item2")
ListBox1. Additem("item3")
...
End Sub 
Y despues en el código del botón añades la elección
ActiveCell.Value = ListBox1.List(ListBox1.ListIndex)
Cuidado también aquí porque si no seleccionas nada te dará error. O bien incluyes un valor seleccionado por defecto o lo compruebas antes de copiarlo en la celda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas