Vamos a programar #108 - Excel y algunas macros.
Hola de nuevo a todos. El día de hoy vamos a continuar con mas programación.
En tiempos recientes he tenido que trabajar con hojas de cálculo, mas concretamente con Excel de Microsoft, las tareas son sencillas, simplemente llevar la cuenta de algunos elementos. Para llevar a cabo la cuenta, uno por uno se pasan por un escáner de códigos de barras y la tarea es simple: si no hay ningún elemento se anota el código que se leyó y se anota un uno en la celda de la siguiente columna.
Para hacerlo decidí agregar un formulario con una caja de texto, un botón y una marca de comprobación algo cómo la imagen siguiente:
Para que todo esto me funcione, necesito que el programa, simplemente lea el contenido de la caja, compruebe la longitud; en este caso que el contenido tenga una longitud de al menos ocho caracteres (que es lo que ocupo), pero cómo no todos los elementos necesariamente son iguales, simplemente usamos la casilla para saltarnos esa condición si es necesario.
Ya llegados a este punto, vamos a suponer que si estás leyendo esto, ya estás familiarizado con la macros y cómo usarlas. Para poder usar el código, debemos de agregar los siguientes controles:
- Texbox
- (Name) "TextBox1"
- CommandButton
- (Name) "cmdbtnAdd"
- CheckBox
- chkCheckSize
- Label
- lblInfo.
Ahora con los controles, veamos el código que hace funcionar las cosas:
Option Explicit
Private Sub Count()
Application.ScreenUpdating = False
Dim TextoABuscar As String
Dim Rango As Range
TextoABuscar = TextBox1.Text
If TextoABuscar = vbNullString Then
lblInfo.Caption = "Info: Cadena vacia"
Exit Sub
End If
If Len(TextoABuscar) < 9 And chkCheckSize.Value = True Then
lblInfo.Caption = "Info: Cadena muy corta"
Exit Sub
End If
Dim lastrow As Long
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
Set Rango = Range("A2:A" & lastrow).Find(TextoABuscar, LookIn:=xlValues, lookat:=xlWhole)
If Rango Is Nothing Then
Range("A" & lastrow + 1).Value = TextoABuscar
Range("A" & lastrow + 1).Offset(0, 1).Value = 1
lblInfo.Caption = "Info: Agregado en A" & lastrow + 1
Else
Rango.Offset(0, 1).Value = Rango.Offset(0, 1).Value + 1
lblInfo.Caption = "Info: Agregado"
End If
Application.ScreenUpdating = True
TextBox1.SetFocus
End Sub
Private Sub cmdbtnAdd_Click()
Count
ActiveWorkbook.Save
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
Count
TextBox1.Text = ""
End If
End Sub
Primero creamos la función "Count()" en este procedimiento, primero revisamos si la cadena de texto está vacía, si es el caso, cambiamos el texto de "lblInfo" indicando que la cadena de texto está vacía y salimos del procedimiento, si no es el caso comprobamos la casilla de verificación este o no marcada, al mismo tiempo revisamos la longitud de la cadena de texto, si la comprobación de la casilla es verdadera y la longitud es menor que nueve, se cambia el texto de la etiqueta y se sale de la función. Luego declaramos una variable llamada "lastrow", luego le asignamos el valor de la ultima celda de las filas con el tango de la columna en la cual vamos a buscar, PARA MI CASO, es la columna A, si deseas hacer búsqueda en otra columna debes de cambiarla. Una vez hecho, procedemos a buscar el texto (que está almacenado en la variable TextoABuscar), para eso creamos la variable "Rango". Al ejecutar la función, vamos a comprobar si tiene algún dato, si no es el caso, asumimos que nuestro valor no se encontró por lo que procedemos a asignar el valor de nuestra cadena de texto a la última celda de la columna A, para agregar el uno (porque se supone que es la primera aparición del elemento), nos desplazaremos una celda desde la ultima que poseía un valor (lastrow + 1) y a la celda de la columna A le asignaremos la cadena de texto que buscamos y en la columna siguiente le asignaremos el valor de 1 (se supone que es la primera aparición de este elemento), para eso usaremos "Offset(0,1)" para desplazarnos cero filas y una columna, luego en la etiqueta de información mostraremos que se agrego el valor en cierta celda. Si se encuentra el valor, simplemente aumentaremos la cantidad por lo que simplemente nos desplazaremos una columna a partir de donde encontramos el valor y le sumamos uno al valor que esta posea.
Para que sea mas rápido el proceso, le devolvemos el foco al TextBox1 para que continuemos agregando valores.
En el evento "Click()" del botón, mandaremos a llamar el procedimiento "Count", pero además, guardaremos el documento.
En el evento "KeyDown" de TextBox1 comprobaremos si se presionó la tecla enter, en el escaner que uso, cuando termina de leer el código de barras, también envía una pulsación de la tecla enter, por eso comprobamos que si es igual a vbKeyReturn llamaremos a la función "count" y limpiaremos el texto de TextBox1.
Con lo anterior, tendremos algo como lo que sigue.
Dependiendo de cuantos controles uses, hay que establecer la propiedad "TabStop" de todos ellos salvo de la caja de texto principal, eso para que no pierda el foco y cuando termines de introducir el texto, de inmediato puedas agregar otro.
Y bien, por ahora es todo recuerda que si descargas un documento con macros revisa bien su fuente antes de ejecutarlo. Para probar este ejemplo, te recomiendo copiar y pegar el código.
Los leo luego.





No hay comentarios. :
Publicar un comentario