0% encontró este documento útil (0 votos)
3 vistas7 páginas

Diseñar El Formulario (Userform)

El documento detalla el proceso para crear un formulario en VBA para gestionar un inventario en Excel, incluyendo la creación de campos y un botón para guardar datos. Se proporciona código para validar entradas, guardar información en una hoja de cálculo y buscar registros existentes. Además, se sugiere implementar un sistema de autoincremento para códigos y la posibilidad de actualizar registros existentes.

Cargado por

luisarevalo12
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas7 páginas

Diseñar El Formulario (Userform)

El documento detalla el proceso para crear un formulario en VBA para gestionar un inventario en Excel, incluyendo la creación de campos y un botón para guardar datos. Se proporciona código para validar entradas, guardar información en una hoja de cálculo y buscar registros existentes. Además, se sugiere implementar un sistema de autoincremento para códigos y la posibilidad de actualizar registros existentes.

Cargado por

luisarevalo12
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1.

Diseñar el Formulario (UserForm)


Primero, debemos entrar al entorno de programación:

1. Presiona ALT + F11 para abrir el Editor de VBA.


2. Ve al menú Insertar > UserForm.
3. En el cuadro de herramientas, agrega los siguientes elementos y cámbiales el
nombre en la ventana de Propiedades (esto es vital para que el código funcione):

Elemento Etiqueta (Label) Nombre del Objeto (Name)


Cuadro de texto Descripción txtDescripcion
Cuadro de texto Adquisición txtAdquisicion
Cuadro de texto Costo Adquisición txtCostoCompra
Cuadro de texto Estatus txtEstatus
Cuadro de texto Años de Utilidad txtAnios
Cuadro de texto Costo Actual txtCostoActual
Botón de comando (Guardar) btnGuardar
Exportar a Hojas de cálculo

2. El Código para Guardar los Datos


Haz doble clic en el botón "Guardar" que creaste dentro del formulario y pega el
siguiente código:

VBA
Private Sub btnGuardar_Click()
Dim fila As Long

'Validar que la descripción no esté vacía


If [Link] = "" Then
MsgBox "Por favor, ingresa una descripción.", vbExclamation
Exit Sub
End If

'Buscar la siguiente fila vacía en la Hoja1 (ajusta el nombre si es


necesario)
fila = Sheets("INVENTARIO").Range("A" & [Link]).End(xlUp).Row + 1

'Pasar los datos del formulario a las celdas


With Sheets("INVENTARIO")
.Cells(fila, 1).Value = [Link]
.Cells(fila, 2).Value = [Link]
.Cells(fila, 3).Value = [Link]
.Cells(fila, 4).Value = [Link]
.Cells(fila, 5).Value = [Link]
.Cells(fila, 6).Value = [Link]
End With
'Limpiar el formulario
[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""
[Link] = ""

MsgBox "Datos guardados correctamente", vbInformation


End Sub

3. Crear el Botón de Acción en Excel


Ahora necesitamos el macro que "llama" al formulario:

1. En el mismo editor de VBA, ve a Insertar > Módulo.


2. Pega este código:

VBA

Sub AbrirFormulario()
[Link]
End Sub

3. Regresa a tu hoja de Excel.


4. Ve a la pestaña Insertar > Ilustraciones > Formas y dibuja un rectángulo (o usa
un botón de la pestaña Programador).
5. Haz clic derecho sobre la forma y selecciona "Asignar macro...".
6. Elige AbrirFormulario y acepta.

Un toque de matemáticas para tu "Costo Actual"

Si quieres que el Costo Actual se calcule automáticamente basándose en la depreciación


lineal, podrías usar una lógica simple dentro de VBA:

Cactual=Cadquisicioˊn−(An~osutilidadCadquisicioˊn×An~ostranscurridos)

Nota importante: No olvides guardar tu archivo como "Libro de Excel habilitado para
macros (.xlsm)", de lo contrario, perderás todo el código al cerrar.

¿Te gustaría que agregue una función para que el "Costo Actual" se calcule
automáticamente apenas ingreses los años de utilidad?

Private Sub btnGuardar_Click()

Dim fila As Long


'Validar que la descripción no esté vacía

If [Link] = "" Then

MsgBox "Por favor, ingresa una descripción.", vbExclamation

Exit Sub

End If

[Link] = True

[Link] = RGB(240, 240, 240) ' Color gris de fondo (opcional)

' Asigna el primer código disponible

[Link] = GenerarSiguienteCodigo()

'Buscar la siguiente fila vacía en la Hoja1 (ajusta el nombre si es necesario)

fila = Sheets("INVENTARIO").Range("B" & [Link]).End(xlUp).Row + 1

'Pasar los datos del formulario a las celdas

With Sheets("INVENTARIO")

.Cells(fila, 2).Value = [Link]

' .Cells(fila, 3).Value = [Link]

.Cells(fila, 4).Value = [Link]

.Cells(fila, 5).Value = [Link]

.Cells(fila, 6).Value = [Link]

.Cells(fila, 7).Value = [Link]

.Cells(fila, 8).Value = [Link]

.Cells(fila, 9).Value = [Link]

End With

MsgBox "Datos guardados correctamente", vbInformation


LimpiarCampos

End Sub

Sub LimpiarCampos()

' [Link] = ""

[Link] = ""

[Link] = ""

[Link] = ""

[Link] = ""

[Link] = ""

[Link] = ""

' Asigna el nuevo código automáticamente al terminar

[Link] = GenerarSiguienteCodigo

End Sub

Private Function GenerarSiguienteCodigo() As Long

Dim ultimoId As Variant

' Busca el valor máximo en la columna B de la hoja INVENTARIO

ultimoId = [Link](Sheets("INVENTARIO").Range("B:B"))

If IsNumeric(ultimoId) Then

GenerarSiguienteCodigo = ultimoId + 1

Else

GenerarSiguienteCodigo = 1 ' Si la tabla está vacía, inicia en 1

End If

End Function

Private Sub Command_cancelar_Click()


End Sub

1. Botón para Buscar Datos


Este código busca el valor de txtCodigo en la columna B de tu hoja. Si lo
encuentra, carga la información en el formulario.
vba
Private Sub btnBuscar_Click()
Dim codigoBusqueda As String
Dim rangoBusqueda As Range
Dim celdaEncontrada As Range
Dim ws As Worksheet

Set ws = Sheets("INVENTARIO")
codigoBusqueda = [Link]

If codigoBusqueda = "" Then


MsgBox "Por favor, ingresa un código para buscar.", vbExclamation
Exit Sub
End If

' Buscar en la columna B


Set celdaEncontrada = [Link]("B").Find(What:=codigoBusqueda,
LookIn:=xlValues, LookAt:=xlWhole)

If Not celdaEncontrada Is Long Then


' Cargar datos encontrados (ajusta los índices de columna según
tu hoja)
' [Link] nos da el número de fila
[Link] = [Link]([Link], 4).Value
[Link] = [Link]([Link], 5).Value
[Link] = [Link]([Link], 6).Value
[Link] = [Link]([Link], 7).Value
[Link] = [Link]([Link], 8).Value
[Link] = [Link]([Link], 9).Value

MsgBox "Registro encontrado en la fila " & [Link],


vbInformation
Else
MsgBox "El código " & codigoBusqueda & " no existe en el
inventario.", vbCritical
End If
End Sub
Usa el código con precaución.

2. Modificar el Botón Guardar (Para que también Actualice)


Para que el botón Guardar sea "inteligente", debe detectar si el código ya existe.
Si existe, actualiza la fila; si no, crea una nueva.
vba
Private Sub btnGuardar_Click()
If Not CamposCompletos() Then Exit Sub

Dim fila As Long


Dim ws As Worksheet
Dim celdaEncontrada As Range
Set ws = Sheets("INVENTARIO")

' Intentar encontrar si el código ya existe para MODIFICAR


Set celdaEncontrada = [Link]("B").Find(What:=[Link],
LookIn:=xlValues, LookAt:=xlWhole)

If Not celdaEncontrada Is Nothing Then


' Si existe, usamos esa fila
fila = [Link]
Else
' Si NO existe, buscamos la última fila vacía para NUEVO registro
fila = [Link]("B" & [Link]).End(xlUp).Row + 1
End If

' Guardar o Actualizar datos


With ws
.Cells(fila, 2).Value = Val([Link])
.Cells(fila, 4).Value = [Link]
.Cells(fila, 5).Value = [Link]
.Cells(fila, 6).Value = CDbl([Link])
.Cells(fila, 7).Value = Val([Link])
.Cells(fila, 8).Value = [Link]
.Cells(fila, 9).Value = CDbl([Link])
End With
MsgBox "Proceso completado correctamente.", vbInformation
LimpiarCampos
End Sub
Usa el código con precaución.

3. Ajuste Necesario
Para que puedas buscar, debes permitir que el usuario escriba
en txtCodigo temporalmente o añadir un botón de "Nuevo Registro" que
reactive el autoincremento. Si el campo está bloqueado ( Locked = True ), el
usuario no podrá escribir el ID que quiere buscar.
Recomendación: Agrega un botón "Limpiar / Nuevo" que llame
a LimpiarCampos y desbloquee el código si deseas buscar manualmente.

También podría gustarte