Ingreso de datos a una hoja. Sección 2: Crear una base de datos

Al resolver nuestra segunda inquietud vamos a codificar dos procedimientos en el mismo módulo anterior llamado IngProd() y el segundo IngProveed().

Este procedimiento nos va a permitir ingresar un conjunto de datos para formar una base de datos de productos, con el siguiente formato:

CodProd, Nombre del producto, Cantidad, UnidMed, CostUnit, PrUnit, FIngreso, CodProv

El ingreso de datos será desde el teclado, en ese orden, separados por coma (puede haber espacio en blanco después de la coma). Se grabarán en la segunda hoja del libro Ventas2015. En la primera grabación se dará nombre a esta hoja: BdProductos. Será una base de datos como tal: Cada columna un campo y cada fila un registro.

Cada vez que se desee ingresar datos a esta hoja, los nuevos registros se añadirán al final de los ya grabados. Para esto, cada vez que se accesa deberá buscar la primera celda (fila A) vacía, a partir de la cual continuará grabando los nuevos registros. La segunda fila contendrá los nombres de campo o cabecera. La primera fila dejamos para un titulo o en blanco.

El ancho de cada uno de los campos será el siguiente:

CodProd: 5
Nombre del producto: 30
Cantidad: 5 (numérico)
Unidad de medida: 3
Costo unitario: 8 (numérico)
Precio unitario: 8 (numérico)
 

El procedimiento principal será IngProd; éste creará la hoja BdProductos en la primera vez y colocará el encabezamiento. Las siguientes ocasiones se ingresará el nombre para que lo active. Llamará al procedimiento Extrae pasando un parámetro y recibiendo otros. Observe que esto se realiza usando la sentencia de llamada: Call Extrae(...).

Abra su libro MisMacros03.xlsm y Ventas 2015.xlsm haciendo clic en cada uno de los siguientes enlaces:

Mis MAcros.xlsm

Ventas 2015.xlsx
 

Vaya al Editor y abra el módulo ModDatos y agregue al final el procedimiento.

He aquí el procedimiento:


Sub IngProd()
Dim CodProd, NomProd, UnidM, Fecha, CodProv As String
Dim CUnit, PrUnit As Double
Dim Cantid As Integer

' Abrimos el libro Ventas 2015.xlsx
fName = Application.GetOpenFilename
Workbooks.Open fName
Workbooks("Ventas 2015").Activate
Hoja = Trim(InputBox("Nombre de la hoja" + Chr(13) + _
"Si no existe la hoja presione " + Chr(13) + _
"En caso contrario ingrese el nombre de la nueva hoja")
) If Trim(Hoja) = "" Then
Sheets.Add After:=Worksheets(Sheets.Count)
ActiveSheet.Name = "BdProductos"
Hoja = "BdProductos"
‘ Invoca al procedimiento Cabecera que no requiere argumentos Cabecera
End If


Sheets(Hoja).Activate
Range("A1").Select
If ActiveCell <> "" Then
nR = Selection.End(xlDown).Row
Else
nR = 2
End If
Cad = InputBox("Ingreso de datos usando el siguiente formato:" + Chr(13) + _
"CodProd, Nombre Prod,Cantid,UnidMedid,CostoUnit,PrUnit, Fecha,CodProv" + _
Chr(13) + "separado por comas.")
Cells(nR, 1).Select
While Trim(Cad) <> ""
Call Extrae(Cad, CodProd, NomProd, Cantid, UnidM, CUnit, PrUnit, Fecha, CodProv)
nR = nR + 1
Cells(nR, 1) = CodProd
Cells(nR, 2) = NomProd
Cells(nR, 3) = Cantid
Cells(nR, 4) = UnidM
Cells(nR, 5) = CUnit
Cells(nR, 6) = PrUnit
Cells(nR, 7) = Fecha
Cells(nR, 8) = CodProv
Cad = InputBox("Fila nro. " + Str(nR + 1))
Wend
ActiveWorkbook.Save

End Sub


Sub Cabecera()
Range("A1") = "Ingrese aquí el título general"
Range("A2") = "CodProd"
Range("A2").ColumnWidth = 8
Range("B2") = "Nombre del producto"
Range("B2").ColumnWidth = 30
Range("C2") = "Cantidad"
Range("C2").ColumnWidth = 8
Range("D2") = "UniMed"
Range("D2").ColumnWidth = 7
Range("E2") = "CostUnit"
Range("E2").ColumnWidth = 9
Range("E2").NumberFormat = "0.00"
Range("F2") = "PrUnit"
Range("F2").ColumnWidth = 9
Range("F2").NumberFormat = "0.00"
Range("G2") = "Fecha"
Range("G2").ColumnWidth = 10
Range("G2").NumberFormat = "m/d/yyyy"
Range("H2") = "CodProv"
Range("H2").ColumnWidth = 8

End Sub


Sub Extrae(C, CodProd, NomProd, Cantid, UnidM, CUnit, PrUnit, Fecha, CodProv)
L = Len(Trim(C))
CodProd = Trim(Left(C, InStr(C, ",") - 1))
C = Trim(Right(C, L - InStr(C, ",")))
L = Len(Trim(C))
NomProd = Trim(Left(C, InStr(C, ",") - 1))
C = Trim(Right(C, L - InStr(C, ",")))
L = Len(Trim(C))
Cantid = Val(Trim(Left(C, InStr(C, ",") - 1)))
C = Trim(Right(C, L - InStr(C, ",")))
L = Len(Trim(C))
UnidM = Trim(Left(C, InStr(1, C, ",") - 1))
C = Trim(Right(C, L - InStr(1, C, ",")))
L = Len(Trim(C))
CUnit = Val(Trim(Left(C, InStr(C, ",") - 1)))
C = Trim(Right(C, L - InStr(1, C, ",")))
L = Len(Trim(C))
PrUnit = Val(Trim(Left(C, InStr(C, ",") - 1)))
C = Trim(Right(C, L - InStr(1, C, ",")))
L = Len(Trim(C))
Fecha = Trim(Left(C, InStr(1, C, ",") - 1))
C = Trim(Right(C, L - InStr(1, C, ",")))
CodProv = Trim(C)

End Sub

El siguiente procedimiento permitirá ingresar datos a la base de datos de proveedores. Tendrá el siguiente formato:

CodProv, Nombre del proveedor, Telefono, Dirección, Atención, Correo

La modalidad de acceso será similar al de productos. Lo agregaremos al final del módulo ModDatos.

Nombre del procedimiento principal:

Sub IngProveed()


End Sub


Éste llamará al procedimiento:

Sub CabeceraProveed()

End

Del mismo modo, dentro del proceso continuo de ingreso de datos (dentro de un While), se llamará al procedimiento:

Sub ExtraeProv(Cad, CodProv, NomProv, Telef, Dirección, Atención, Correo)


End Sub

El contenido de cada uno de ellos será totalmente similar a los que corresponde al ingreso de datos de producto.

Lo dejamos como tarea para los que deseen codificarlo. En la siguiente entrega, Solución a la Tarea, colgaremos dichos procedimientos en el mismo módulo y pasaremos a la tercera inquietud de ingresar datos y realizar cálculos con ellos.

Solución a la tarea

Dejamos como tarea la creación e ingreso de datos de una base de datos de proveedores.

El procedimiento es totalmente similar al que dimos para la tabla o base de datos bdProductos.

Con el ánimo de cambiar la modalidad de acceso a la hoja, hemos cambiado sólo este segmento; todo lo demás simplemente hemos cambiado una variable por otra.

En MisMacros03 vaya al editor y, en el módulo ModDatos, agregue al final los siguientes tres procedimientos.

He aquí la solución:


Sub IngProveed()
Dim CodProv, NomProv, Telef, Direccion, Atencion, Correo As String

' Abrimos el libro Ventas 2015.xlsx
' Otra forma de activar la hoja
fName = Application.GetOpenFilename
Workbooks.Open fName
xKey = 0
For i = 1 To Sheets.Count
If Sheets(i).Name = "bdProveed" Then
xKey = 1
End If
Next
If xKey = 0 Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "bdProveed"
CabeceraProveed
‘ Invoca al procedimiento CabeceraProveed End If

Sheets("bdProveed").Activate

Range("A1").Select
If ActiveCell <> "" Then
nR = Selection.End(xlDown).Row
Else
nR = 2
End If
Cad = InputBox("Ingrese los datos usando el siguiente formato:" + Chr(13) + _
"CodProv, Nombre del Prov, Teléfono, Dirección,Atención,Correo" + _
Chr(13) + "separado por comas.")
Cells(nR, 1).Select
While Trim(Cad) <> ""
Call ExtraeProv(Cad, CodProv, NomProv, Telefono, Direccion, Atencion, Correo)
nR = nR + 1
Cells(nR, 1) = CodProv
Cells(nR, 2) = NomProv
Cells(nR, 3) = Telefono
Cells(nR, 4) = Direccion
Cells(nR, 5) = Atencion
Cells(nR, 6) = Correo
Cad = InputBox("Fila nro. " + Str(nR + 1))
Wend
ActiveWorkbook.Save

End Sub


Sub CabeceraProveed()
Range("A1") = "Ingrese aquí el título general"
Range("A2") = "CodProv"
Range("A2").ColumnWidth = 8
Range("B2") = "Nombre del proveedor"
Range("B2").ColumnWidth = 40
Range("C2") = "Telefono"
Range("C2").ColumnWidth = 12
Range("D2") = "Direccion"
Range("D2").ColumnWidth = 40
Range("E2") = "Atencion"
Range("E2").ColumnWidth = 30
Range("F2") = "Correo"
Range("F2").ColumnWidth = 30

End Sub


Sub ExtraeProv(C, CodProv, NomProv, Telefono, Direccion, Atencion, Correo)
L = Len(Trim(C))
CodProv = Trim(Left(C, InStr(C, ",") - 1))
C = Trim(Right(C, L - InStr(C, ",")))
L = Len(Trim(C))
NomProv = Trim(Left(C, InStr(C, ",") - 1))
C = Trim(Right(C, L - InStr(C, ",")))
L = Len(Trim(C))
Telefono = Trim(Left(C, InStr(C, ",") - 1))
C = Trim(Right(C, L - InStr(C, ",")))
L = Len(Trim(C))
Direccion = Trim(Left(C, InStr(1, C, ",") - 1))
C = Trim(Right(C, L - InStr(1, C, ",")))
L = Len(Trim(C))
Atencion = Trim(Left(C, InStr(C, ",") - 1))
C = Trim(Right(C, L - InStr(1, C, ",")))
Correo = Trim(C)

End Sub

En la siguiente imagen se tiene una parte de este procedimiento.

En la siguiente sección resolveremos el problema de ingresar los datos de X e Y para estimar una recta de regresión.

El procedimiento ingresará los datos y calculará, pero si ya los datos hubieran sido ingresados, sólo calculará. Para ello en la hoja Regresion, se usará las columnas A y B, a partir de la fila 3, en los cuales estará contenido los datos.

Guarde su libro MisMacros03.xlsm.

Vaya a la siguiente sesión haciendo aquí