En este apartado podras poner todas tus preguntas sobre como hacer una macro, te aseguro una respuesta y es posible que la macro.Este es un ejemplo de un dialogo que esta hecho en Visual Basic para Aplicaciones es a lo que coloquialmente le llaman macro, pero creo que se puede llamar sub rutinas o algo asÃ.
Es un formulario controlado por una serie de sub rutinas que dan acceso a capturar datos en dos hojas de excel, esos datos se formatean por otras sub rutinas y dan como resultado los reportes los cuales se generan en otra hoja sin formulas solo datos y por lo tanto son más faciles de su transportación y los datos son más seguros ya que el formulario está al pendiente si el campo capturado ya existe o no como dato, es decir no nos guarda Armando y ARMANDO, sino uno de los dos el que se haya guardado primero (en otro caso se pudioera limirar a solo mayuculas o solo minuculas)eso mismo pasarÃa con los folios, se maneja un cosecutivo. Si es el caso en que tengas una pregunta sobre las macros deja tu comentario, para esto es necesario estar registrado.
Capitulo 1: Crear un formulario
Estando en Excel con un libro nuevo llamado Libro1, abrimos VB para aplicaciones, tecleando Alt+F11, una ves ahà tendremos algo similar a:

Damos clic secundario en VBAProyect(Libro1) y seleccionamos Insertar y despues UserForm, ya que esta el UserForm, pondremos un ComboBox y su etiqueta, llamado ComboBox1 queda algo como esto:

Ahora en el Libro1, Hoja1, A1 pondremos una lista que sea uno, dos, tres con encabezado lista nos queda algo asÃ:

Ahora procedemos a llenar el ComboBox con esa lista utilizando el siguiente código que colocaremos UserForm1

Private Sub UserForm_Initialize(); Es donde empiesa la sub rutina, que en este caso pertenece al Objeto “UserForm” y al procedimiento “Initialize”, este se ejecuta a la hora de iniciar el UserForm.
Set DB_Datos = Sheets(“Hoja1″).Cells(2, 1).Resize(Sheets(“Hoja1″).Cells(1, 1).CurrentRegion.Rows.Count – 1, 1; es la lÃnea donde se toma como base de datos un rango, de un rango dado
Cells(2,1) de un rango dado A2 se toma un nuevo rango con Resize eliminamos la primera fila que son los encabezados, con
CurrentRegion.Rows.Count-1 nos da como resultado el total de lineas incluyendo el ancabezado
Las funciones:
Cells, el formato Cells puede itilizarse solo para hacer referencia a todas las celdas de la hoja activa y con el par ordenado (fila, columna) para una sola celda
Ejemplo: para hacer referencia a la celda:
A2 pondremos Cells(2,1)
A3 pondremos Cells(3,1)
C5 pondremos Cells(5,3)
Resize, con ésta función elejimos un rango nuevo de uno dado, con un par ordenado (0,0) que representa las filas y las columnas del nuevo rango
En el código, la utilizamos, como rango inicial tenemos A2 y tendremos ahora para:
Filas: Sheets(“Hoja1″).Cells(1, 1).CurrentRegion.Rows.Count la cantidad de filas en el rango actual a partir de la celda A1 de la Hoja1, a dicha cantidad le restamos uno (-1) que es el encabezado.
Columnas:1
iSerie = 1; Iguala a 1 la variable que utilizaremos en el Ãndice del ComboBox
ComboBox1.Clear; Limpiamos el combo box para que no tenga los valores anteriores
For Each DatoA In DB_Datos; Para cada dato en DB_Datos
ComboBox1.AddItem DatoA, ListIndex = iSerie; Agregar el valor de DatoA con el Ãndice que sea igual a iSerie
iSerie = iSerie + 1; Aumentamos el valor en uno más para el Ãndice
Next; Nos retorna si hay más valores en DatoA
End Sub; Finaliza el sub
Una vez que tienes el código y lo ejecutas con F5 tendras el dialogo con los valores de la columna de datos, si tienes alguna contingencia comentala y la resolvemos.
Les aviso que gradualmente iré usando menos gráficos, pero esto sin caracter limitativo, si te es más cencillo, te mando el archivo completo con todo y gráficos.
Ya tenemos nuestros datos en el CombBox:
En nuestro UserForm agregamos un cuadro de texto TextBox con el nombre de TextBox1 en el cual vamos a mostrar los valores de la columna B de nuestra Hoja1 donde yo le capturé como encabezado Tex y los datos son amarillo, naranja y verde en B2, B3 y B4 respectivamente.
Ahora regresamos a nuestro UserForm, le damos doble clic al ComboBox1 y nos enviará l código del mismo, por default nos pone en el procedimiento Change lo cual nos sirve, ese procedimiento nos queda:
Private Sub ComboBox1_Change()
Set DB_Hoja1 = Sheets(“Hoja1″).Cells(1, 1).Resize(Sheets(“Hoja1″).Cells(1, 1). _
CurrentRegion.Rows.Count, 1)
Lin = Application.Match(ComboBox1, DB_Hoja1, 0)
TextBox1 = Cells(Lin, 2)
End Sub
















