LIMPIAR CONTENIDO DE CONTROLES DE FORMULARIO EN HOJA EXCEL O EN USERFORM

Hola a todos!.

Hoy me gustaría dejaros un par de códigos para borrar el contenido de los controles de formulario, tanto aquellos que se insertan en la hoja excel como aquellos que insertamos en nuestros userform o formularios en el editor de VBA.

Voy a comenzar con los controles insertados en una hoja (controles ActiveX), por ejemplo una en la que tengamos varios: Textbox, ComboBox, ListBox y CheckBox. Para que podamos automatizar el proceso de forma óptima debemos utilizar la instrucción Select Case:

Sub LIMPIAR_CONTROLES()
With ActiveSheet
'Por cada objeto que indiquemos en el select case, borramos contenido
For Each Control In .OLEObjects
Select Case TypeName(Control.Object)
Case "TextBox"
Control.Object.Text = vbNullString
Case "ComboBox"
Control.Object.Clear
Case "ListBox"
Control.Object.Clear
Case "CheckBox"
Control.Object.Value = False
End Select
Next Control
End With
End Sub

Dado que estamos trabajando con controles ActiveX debemos tratar en nuestro código con los objetos OLEObject, que son los que nos van a permitir interactuar con nuestra hoja. A continuación solo tendremos que especificar el tipo de objeto y la forma en la que debemos limpiarlo o vaciarlo en el Select – Case.

Con los Formularios o Userforms resulta más sencillo, dado que haremos referencia a la colección Controls. El resultado del código es similar al anterior:

Private Sub CommandButton1_Click()
'Por cada objeto que indiquemos en el select case, borramos contenido
For Each Control In Me.Controls
Select Case TypeName(Control)
Case "TextBox"
Control.Text = vbNullString
Case "ComboBox"
Control.Clear
Case "ListBox"
Control.Clear
Case "CheckBox"
Control.Value = False
End Select
Next Control
End Sub

Como podéis ver, ambas estructuras son idénticas (salvo por la forma de hacer referencia a los controles de formulario).

Dado que se trata de fragmentos de código bastante específicos y sencillos, considero que no requieren un archivo de ejemplo. Os invito a que los probéis en vuestros proyectos : )

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Anuncios

MÉTODO FIND COMBINADO CON INSTRUCCIÓN SELECT CASE O FUNCIÓN REPLACE. ENCONTRAR Y REEMPLAZAR

Hola a todos!

Como todos sabéis Excel es mucho más fórmulas y celdas, Excel nos permite programar prácticamente todo lo que nos propongamos. Y aunque en muchas ocasiones escuchéis o leáis que Excel no es adecuado para realizar tareas relacionadas con las bases de datos o tratamientos automatizados de información, lo cierto es que sospecho que las personas que realizan esos comentarios no conocen el poder de Excel, de otra forma su opinión sería distinta.

El tema del post de hoy viene relacionado precisamente con el tratamiento de bases de datos. Es muy habitual que cuando importamos una base de datos, ya sea desde un archivo TXT, CSV, .accdb o cualquier otro, algunos de los campos que nos aparecen vienen resumidos con códigos o abreviaturas, el motivo suele ser que el largo de los campos de registro en el programa que captura la información solo permiten una cierta cantidad de caracteres y es necesario abreviar o utilizar códigos.

Un ejemplo clásico es, por ejemplo abreviar cuando se describe el campo de género (Mujer=M o F y Hombre=H o M o V), o (Casado=C, Soltero=S). Pues bien, para “decodificar” estos códigos, existen multitud de soluciones, la primera y más obvia es la de modificar en el propio código de la herramienta que exporta los datos y “escribir” correctamente la información. Pero muchas veces esto no es posible, o bien el programa es muy antiguo y carece de mantenimiento, o simplemente no es posible realizar un desarrollo para modificar estos campos.

La solución queda entonces en el “tejado” de Excel que es quien recibe la información. Supongamos entonces que hemos recibido un campo con nombres de personas y el género establecido de la siguiente forma:

METODO FIND COMBINADO CON INSTRUCCION SELECT CASE O FUNCION REPLACE

Bien, para modificar esta información y por ejemplo poner HOMBRE o MUJER podemos realizar esta tarea de varias formas, podríamos realizarlo con SQL directamente, con condicionales sobre la columna indicada, pero también podemos hacerlo utilizando el método find para encontrar el campo y la columna que queremos cambiar (esto es interesante cuando los datos que recibimos pueden cambiar de estructura y posición de campos).

Pero el método find solamente nos sirve para localizar el campo, para poder modificar los valores lo podemos hacer de una forma bastante eficiente utilizando una instrucción SELECT CASE o recurriendo a la función REPLACE. A continuación os mostraré dos códigos, cada uno de ellos desarrollará una de las dos alternativas.

  • Método FIND con la instrucción SELECT CASE, este sería el código que os propongo:

Sub Seleccion_Caso()
'Declaramos variables
Dim Final As Double, i As Double
Dim nCampo As Object, sItem As Object
Dim sDato As String, nCol As Long
'Con la hoja1
With Sheets("Hoja1")
Final = Application.CountA(.Range("A:A"))
'Indicamos la búsqueda en la primera fila
Set nCampo = .Range("1:1")
Set sItem = nCampo.Find("Género")
'Si encontramos el dato, guardamos el número de columna
nCol = sItem.Column
'Mediante un for recorremos todos los ítems del campo seleccionado
For i = 2 To Final
'Con un Select Case vamos sustituyendo los datos
sDato = .Cells(i, nCol)
Select Case sDato
Case "H"
.Cells(i, nCol) = "HOMBRE"
Case "M"
.Cells(i, nCol) = "MUJER"
End Select
Next i
End With
End Sub

Como podéis observar, mediante la instrucción Select Case procedemos a realizar los cambios que necesitamos. Es necesario utilizar un loop for-next para que el select pueda evaluar cada celda (o ítem).

El resultado es este:

METODO FIND COMBINADO CON INSTRUCCION SELECT CASE O FUNCION REPLACE1

  • Método FIND con la función REPLACE, este sería el otro código que os propongo:

Sub Reemplazar()
'Declaramos variables
Dim Final As Double, i As Double
Dim nCampo As Object, sItem As Object
Dim sDato As String, nCol As Long
'Con la hoja1
With Sheets("Hoja1")
Final = Application.CountA(.Range("A:A"))
'Indicamos la búsqueda en la primera fila
Set nCampo = .Range("1:1")
Set sItem = nCampo.Find("Género")
'Indicamos la búsqueda en la primera fila
nCol = sItem.Column
'Seleccionamos toda la columna
Columns(nCol).Select
'Con un replace reemplazamos los datos elegidos
With Selection
.Replace What:="HOMBRE", Replacement:="H", LookAt:=xlWhole
.Replace What:="MUJER", Replacement:="M", LookAt:=xlWhole
End With
sItem.Select
End With
End Sub

Con este método para probarlo, realizaremos la inversa, es decir, si es HOMBRE se indicará una H, y si es MUJER una M.

Y volveremos a tener la misma información que al principio:

METODO FIND COMBINADO CON INSTRUCCION SELECT CASE O FUNCION REPLACE

De estos dos códigos, me gusta utilizar el primero con el select case, dado que me permite introducir al final de la instrucción un “else” si fuese necesario y así contemplar otros valores que no sean los que hemos establecidos. Sin embargo debo reconocer que el segundo código es más rápido al utilizar la función REPLACE.

Pues esto ha sido todo, espero que os haya resultado de interés y os ayude con vuestras automatizaciones.

Descarga el archivo de ejemplo pulsando en: MÉTODO FIND COMBINADO CON INSTRUCCIÓN SELECT CASE O FUNCIÓN REPLACE

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

ESTRUCTURA SELECT CASE PARA REEMPLAZAR CARACTERES EN UNA CADENA DE TEXTO O NÚMEROS

Hola a todos:

Hace unos días respondí a una consulta en la que un lector me preguntaba sobre la forma de incorporar a un proceso un código que pudiese reemplazar determinados caracteres, por ejemplo: la ñ por la n.

La aplicación que estaba desarrollando iniciaba consultas a internet y necesitaba controlar que estos caracteres se reemplazasen por los que él indicaba. Además también necesitaba hacer algunas modificaciones con otros datos en los que debía reemplazar algunos números por otros.

Para realizar esta tarea, opté por hacer uso de una estructura Select Case, dado que me permitía realizar todo lo que me pedía.

Veámoslo con un ejemplo sencillo, tenemos varias informaciones en las cuatro primeras líneas:

ESTRUCTURA SELECT CASE PARA REEMPLAZAR CARACTERES EN UNA CADENA DE TEXTO O NUMERO

Para el primer caso, se necesita cambiar la ñ por una n, en los siguientes casos, si los números son el 1, el 2 o el 3, debemos mostrar un 1, si son el 4, el 5 o el 6 debemos mostrar un 2 y si son el 7, el 8 o el 9, un 3. Y en la última fila varios números combinamos.

Pues bien, para hacer este ejercicio vamos a utilizar la siguiente macro:

Sub EJEMPLO_SELECT_CASE()
'Definimos variables
Dim sDato As String, nItem As String
Dim i As Integer, j As Integer, sLargo As Integer
With Sheets("DATOS")
Final = Application.CountA(.Range("A:A"))
'Iniciamos bucle por cada celda de la columna A
For i = 2 To Final
sLargo = Len(.Cells(i, 1))
'Si hay datos entonces iniciamos segundo bucle
If sLargo > 0 Then
'Extraemos cada carácter de la celda seleccionada
For j = 1 To sLargo
nItem = Mid(.Cells(i, 1), j, 1)
'Iniciamos estructura Select Case
Select Case nItem
Case "Ñ"
nItem = "N"
Case "ñ"
nItem = "n"
Case 0 To 3
nItem = "1"
Case 4 To 6
nItem = "2"
Case 7 To 9
nItem = "3"
End Select
'Agrupamos de nuevo la palabra
sDato = sDato & nItem
Next j
End If
'Pasamos el dato a la columna B
.Cells(i, 2) = sDato
'Igualamos Sdato a 0
sDato = 0
'Seguimos con la próxima palabra/string
Next i
End With
End Sub

Como podéis observar, tenemos varios bucles for – next, uno para recorrer las filas y otro para recorrer la cadena de texto dentro de esa fila.

A continuación aplicamos el Select Case que hemos programado según los parámetros requeridos, cambiar la ñ por la n (también si es mayúscula) y por grupo de números para obtener este resultado:

ESTRUCTURA SELECT CASE PARA REEMPLAZAR CARACTERES EN UNA CADENA DE TEXTO O NUMERO1

Como podéis observar, los cambios se realizan según lo esperado, y podríamos seguir añadiendo condiciones o (casos) a nuestro Select según nuestras necesidades.

Y esto ha sido todo, espero que os sea de utilidad 🙂

Descarga el archivo de ejemplo pulsando en: ESTRUCTURA SELECT CASE PARA REEMPLAZAR CARACTERES EN UNA CADENA DE TEXTO O NÚMERO

 
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!