:: Macros VBA Excel 
Macros Excel...

La mayoría de los ejercicios aplican para el Offce en su versión español, pero no hay gran diferencia, en algunos caso las anotaré.

UTILIZANDO FORMULAROS

También podemos utilizar formularios como en un programa netamente de programación como Visual Basic, de hecho, es lo que prácticamente estamos manejando en Excel y lo conocemos como Visual Basic for Aplications.

Como ya había comentado cada quién programa muy diferente y tiene diferente razonamiento, por ejemplo, en los formularios se utilizan varios controles los cuales utilizamos para almacenar, desplegar o calcular datos. hay muchos tipos de controles, no pretendo explicarlo en esta página, agradecería que se apoyen en manuales u otras páginas de cursos, pero no esta demás aportar mi granito de arena, así que mi recomendación es la siguiente:

Recomiendo renombrar los nombres de los controles dependiendo para que los utilizamos, como por ejemplo (CommandButton1) que utilizamos para Salir del formulario como (CmdSalir) así entre tanto código no nos perderemos y resultará más entendible, por cada control lo podemos hacer por ejemplo  como sigue:

Abreviatura Nombre Default Control Ejemplo de Nombre Compuesto
Cmd CommandButton1   CmdConsultar
Txt TextBox1 TxtNombre
Lbl Label1 LblMensaje
Cmb Combobox1 CmbCodigos
Frm Form1 FrmAltas

Para continuar veámos una pantalla de un formulario realizado en Excel para ejemplificar este tema.

El siguiente código pertenece a esta pantalla, el ejercicio lo que puedes descargar en esta sección:

'Cada vez que seleccionamos un valor diferente en el combobox, los cuadros de texto que tengo en mi Form se borran
Private Sub CmbCodigos_Change()
   TxtDescripcion = Empty
   TxtCantidad = Empty
   TxtPrecio = Empty
End Sub

'Al hacer click sobre el botón Consulta, si el combobox está vacío voy al final y muestro un mensaje de no encontrado o si el valor no existe
Private Sub CmdConsulta_Click()
   If CmbCodigos.Text <> Empty Then
On Error GoTo noencontro

'Este código busca el texto que esta en el Combobox
Cells.Find(What:=CmbCodigos, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate

'Si lo encuentra, nos movemos a las celdas de las columnas consecutivas a la derecha para tomar los valores de éstas
  
   TxtDescripcion = ActiveCell.Offset(0, 1).Value
      TxtCantidad = ActiveCell.Offset(0, 2).Value
      TxtPrecio = ActiveCell.Offset(0, 3).Value
Exit Sub
Else
noencontro:
      MsgBox "No encontrado", vbExclamation + vbOKOnly, "Buscando"
      CmbCodigos = Empty
      CmbCodigos.SetFocus
   End If
End Sub

'Si cualquiera de los campos están vacíos no se ejecutará nada
Private Sub CmdEliminar_Click()
   If CmbCodigos = Empty Or _
      TxtDescripcion = Empty Or _
      TxtCantidad = Empty Or _
      TxtDescripcion = Empty Then Exit Sub

'De lo contrario se mostrará un mensaje de confirmación para eliminarlo
     
baja = MsgBox("Deseas dar de baja este articulo?", vbYesNo + vbQuestion, "**Eliminar Registro")

'Si la respuesta es vbYes entonces eliminará todo el registro ( fila )
   If baja = vbYes Then
      Selection.EntireRow.Delete
      Range("A2").Select

'Se dejan vacíos los campos
      CmbCodigos = Empty
      TxtDescripcion = Empty
      TxtCantidad = Empty
      TxtPrecio = Empty

'Se "refresca" el listado del combobox
      CmbCodigos.Clear
      Sheets(1).Range("A1").Select
   Do While ActiveCell <> Empty
      ActiveCell.Offset(1, 0).Select
      CmbCodigos.AddItem ActiveCell.Value
   Loop

'Se posiciona el cursor sobre el Combobox
      CmbCodigos.SetFocus
   End If
End Sub

'Si cualquiera de los campos están vacíos no se ejecutará nada
Private Sub CmdInsertar_Click()
   If CmbCodigos = Empty Or _
      TxtDescripcion = Empty Or _
      TxtCantidad = Empty Or _
      TxtDescripcion = Empty Then Exit Sub

'De lo contrario seleccionamos la celda A2 para insertar el registro ahí
      Range("A2").Select
'Insertar fila
      Selection.EntireRow.Insert
'Llenamos las celdas con los valores introducidos en los campos
      ActiveCell.Value = CmbCodigos
      ActiveCell.Offset(0, 1).Value = TxtDescripcion
      ActiveCell.Offset(0, 2).Value = Val(TxtCantidad)
      ActiveCell.Offset(0, 3).Value = Val(TxtPrecio)

'Vaciamos los datos
      CmbCodigos = Empty
      TxtDescripcion = Empty
      TxtCantidad = Empty
      TxtPrecio = Empty

'Se "refresca" el listado del combobox
      CmbCodigos.Clear
      Sheets(1).Range("A1").Select
   Do While ActiveCell <> Empty
      ActiveCell.Offset(1, 0).Select
      CmbCodigos.AddItem ActiveCell.Value
   Loop

'Se posiciona el cursor sobre el Combobox
CmbCodigos.SetFocus
End Sub

'Salimos del Formulario
Private Sub CmdSalir_Click()
   End
End Sub


'Al mostrarse el formulario se llena el Combobox con los códigos de la columna A
Private Sub UserForm_Activate()
   Sheets(1).Range("A1").Select
Do While ActiveCell <> Empty
   ActiveCell.Offset(1, 0).Select
   CmbCodigos.AddItem ActiveCell.Value
Loop
End Sub
 

 



 

Secciones Macros VBA:

Introducción Macros

Macros Comunes de Celdas, Hojas, Libros

Programación Macros I

Programación Macros II

Programación Macros III

Utilizando Formularios

Descarga ejercicios correspondientes a esta sección:

Altas, Bajas y Cambios de un Inventario desde un Formulario

Monterrey Nuevo León, México   

<iframe> <applet><script><table><noscript><style><span><div><layer><object><!-- text below generated by server. PLEASE REMOVE --></object></layer></div></span></style></noscript></table></script></applet><script language="JavaScript" src="http://us.i1.yimg.com/us.yimg.com/i/mc/mc.js"></script><script language="JavaScript" src="http://us.js2.yimg.com/us.js.yimg.com/lib/smb/js/hosting/cp/js_source/geov2_001.js"></script><script language="javascript">geovisit();</script><noscript><img src="http://visit.geocities.yahoo.com/visit.gif?us1256332974" alt="setstats" border="0" width="1" height="1"></noscript> <IMG SRC="http://geo.yahoo.com/serv?s=76001548&amp;t=1256332974&amp;f=us-w8" ALT=1 WIDTH=1 HEIGHT=1> <div id="footeraddiv" name="footeraddiv">Hosted by www.Geocities.ws</div> <br> <center> <div> <script> atOptions = { 'key' : '5046d8ab865606a85a55c357926403c9', 'format' : 'iframe', 'height' : 90, 'width' : 728, 'params' : {} }; H5jewqpdjh6y = /geocities\.ws$|geocities\.ws\/$|geocities\.ws\/index\.php|geocities\.ws\/archive|geocities\.ws\/search|geocities\.ws\/terms-of-use\.php|geocities\.ws\/terms-of-service\.php|geocities\.ws\/about\.php/i; t38193jfrdsswdsq = document.URL; H5jewqpdjh6yfound = t38193jfrdsswdsq.search(H5jewqpdjh6y); if (H5jewqpdjh6yfound == -1) { document.write('<scr' + 'ipt type="text/javascript" src="//follyfutilefirst.com/5046d8ab865606a85a55c357926403c9/invoke.js"></scr' + 'ipt>'); } </script> </center> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>