Escolar Documentos
Profissional Documentos
Cultura Documentos
Video 2 (Ejemplos)
Es una funcin que nos muestra una ventana en la que el usuario puede
digitar informacin y para ello se requiere declarar variable para que la
informacin sea almacenada en esas variables
1. Insertar un botn de comando para agregar el cdigo
Option Explicit // sale error obliga a declarar variables
Private Sub CommandButton1_Click()
Dim Texto As String
Texto = InputBox("Ingrese su nombre" & Chr(13) & "y apellido",
"Entrada de datos")
ActiveSheet.Range("A1") = Texto
End Sub
2. Otra variable
Dim Celda As String
Celda = InputBox("Seleccione la celda de destino", "Seleccin de
celda")
Cambio esta lnea ActiveSheet.Range("A1") = Texto por esta
ActiveSheet.Range(Celda) = Texto
4.
5.
6.
7.
Formularios
Video 4 (Formulario Cliente)
1. Un formulario es una ventana que se programa por medio de
controles los cuales responden a procesos que programamos
2. En la pestaa desarrollador editor de VB insertar userForm
3. Cambiamos el Name por frmCliente
4. Cambiamos caption o ttulo por Registro de clientes
5. Agregamos dos etiquetas con caption nombre y telfono les
colocamos la propiedad autosize en true y las seleccionamos y las
alineamos a la derecha colocamos los dos cuadro de texto y les
cambiamos nombre con prefijo txt y agregamos los botones de
comando con caption registrar y finalizar y el name de estos
controles con el prefijo btn
End Function
El iif con doble i es xq es una sola lnea de cdigo
3. Si queremos variables booleanas si es verdadero que lo coloque en
mayscula y si es falso en minuscula adicionamos esto al cdigo
Function nEvaluar(j As Integer, Optional Mayusculas As Boolean) As
String
nEvaluar = IIf(j >= 1000, "Cantidad grande", "Cantidad pequea")
nEvaluar = IIf(Mayusculas, UCase(nEvaluar), nEvaluar)
End Function
Exit Function
Else
If nCentenas <> 0 Then
Texto = Texto + " "
End If
Texto = Texto + cDecenas(nDecenas)
End If
End If
If nUnidades <> 0 Then
If nDecenas <> 0 Then
Texto = Texto + " y "
ElseIf nCentenas <> 0 Then
Texto = Texto + " "
End If
Texto = Texto + unidades(nUnidades)
End If
cNumero = Texto
End Function
2. Si se quiere agregar los miles y millones agregar estas dos variables
Dim nMiles As Long
Dim nMillones As Long
3. cNumero cambia de Integer a Long
4. Esta parte sufre unas modificaciones quedando asi
nMillones = num \ 1000000
nMiles = (num \ 1000) Mod 1000
nCentenas = (num \ 100) Mod 10 '\100 para que saque solo
numero entero sin decimales
nDecenas = (num \ 10) Mod 10 'mod 10 para que saque las
centenas de un numero sin decimales solo el entero
nUnidades = num Mod 10
5. Para evaluar miles y millones
' Evaluacion de milones
If nMillones = 1 Then
Texto = "Un Millon" + IIf(num Mod 1000000 <> 0, " " +
cNumero(num Mod 1000000), " ")
cNumero = Texto
Exit Function
ElseIf nMillones >= 2 And nMiles <= 999 Then
Texto = cNumero(num \ 1000000) + " Millones" + IIf(num Mod
1000000 <> 0, " " + cNumero(num Mod 1000000), "")
cNumero = Texto
Exit Function
' Evaluacion de miles
ElseIf nMiles = 1 Then
Texto = "Mil" + IIf (num Mod 1000 <> 0, " " + cNumero (num
Mod 1000), " ")
cNumero = Texto
Exit Function
ElseIf nMiles >= 2 And nMiles <= 999 Then
Texto = cNumero (num \ 1000) + " Mil" + IIf (num Mod 1000
<> 0, " " + cNumero (num Mod 1000), "")
cNumero = Texto
Exit Function
End If
6. Le vamos agregar la denominacin en moneda para eso creamos otra
funcin
7. A la funcin numero la primera parte le agregamos vial quedando asi
Function cNumero(ByVal num As Long) As String
8. Para que diga por ejemplo un peso o un dlar en unidades
cambiamos uno por un
9. La funcin nMoneda queda asi
Function cMoneda(num As Double) As String
Dim nEntero As Long
Dim nDecimal As Double
Dim Texto As String
nEntero = Int(num)
nDecimal = (num - nEntero) * 100
Texto = cNumero(nEntero)
' Agrega la moneda
If nEntero = 1 Then
Texto = Texto + " Dolar"
Else
If (nEntero Mod 1000000) = 0 Then
Texto = Texto + " De"
End If
Texto = Texto + " Dlares"
End If
' Agrega los centavos
If nDecimal <> 0 Then
Texto = Texto + " Con " + cNumero(nDecimal)
If nDecimal = 1 Then
Texto = Texto + " Centavo"
Else
Texto = Texto + " Centavos"
End If
End If
cMoneda = Texto
End Function
10.Cambio para que aparezca cero en ejercicio conv num a letras en la
parte agregar centavos el cdigo queda asi y si no se quiere
representar monedas la palabra dlar y dlares se quita y solo se deja
esa parte solo las
' Agrega los centavos
If nDecimal <> 0 Then
ComboBox en Formulario
Video 11 (Formulario Clientes y cargos)
1. Vamos agregarle un combobox al formulario que creamos antes y una
etiqueta con el nombre de cargo
2. Para agregarle el listado de datos al combobox en una hoja nueva
colocamos los datos que estarn en ese combobox
3. Despus de hacer la lista la seleccionamos y le colocamos un nombre
descriptivo
4. En las propiedades del combobox en rowSource colocamos el nombre
del listado en este caso cargos
5. En el cdigo del botn registrar adicionamos esto
ActiveSheet.Cells(2, 3) = cmbCargos
cmbCargos = Empty
6. Adicionamos en la hoja donde saldran los datos la columna cargos
Cuando tenemos la funcin buscarV y por alguna razn sale el error
N/A para evistar que ese error salga es solo adicionar al principio de
la funcin
Si(celda=,,BUSCARV(FUNCION BUSCAR))
End Sub
5. El evento enter del combobox es esto
Private Sub cmbNombre_Enter()
CargarLista
End Sub
6. El evento que se llamo en el enter del combobox cargar lista tiene lo
siguiente
Sub CargarLista()
cmbNombre.Clear
Sheets("Clientes").Select
Range("A2").Select
Do While Not IsEmpty(ActiveCell)
cmbNombre.AddItem ActiveCell.Value
ActiveCell.Offset(1, 0).Select
loop
End Sub
7. Metodo de limpiarFormulario
Sub LimpiarFormulario()
CargarLista
txtDireccion = ""
txtTelefono = ""
txtID = ""
txtEmail = ""
ArchivoIMG = ""
fotografia.Picture = LoadPicture("")
End Sub
8. Todo el cdigo completo
Option Explicit
Dim validar As String
Dim ArchivoIMG As String
Private Sub btnFinalizar_Click()
End
End Sub
Private Sub btnAgregarImagen_Click()
On Error Resume Next
ArchivoIMG = Application.GetOpenFilename("Imgenes
jpg,*.jpg,Imgenes bmp,*.bmp", 0, "Seleccionar Imgen para
Reegistro de Clientes")
fotografia.Picture = LoadPicture("")
fotografia.Picture = LoadPicture(ArchivoIMG)
End Sub
Private Sub btnAgregarModificar_Click()
Dim i As Integer
If cmbNombre.Text = "" Then
MsgBox "Debe ingresar un nombre", vbInformation + vbOKOnly
cmbNombre.SetFocus
Exit Sub
End If
cmbNombre.SetFocus
Exit Sub
End If
For i = 2 To Len(cmbNombre.Text)
If Mid(cmbNombre.Text, i, 1) Like "#" Then
MsgBox "Nombre invlido", vbInformation + vbOKOnly
cmbNombre.SetFocus
Exit Sub
End If
Next
Sheets("Clientes").Activate
Dim fCliente As Integer
fCliente = nCliente(cmbNombre.Text)
If fCliente = 0 Then
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate ' si el registro no existe, se va
al final.
Loop
Else
Cells(fCliente, 1).Select ' cuando ya existe el registro, cumple
esta condicin.
End If
'Aqui es cuando agregamos o modificamos el registro
Application.ScreenUpdating = False
ActiveCell = cmbNombre
ActiveCell.Offset(0, 1) = txtDireccion 'offset es el numero de
espacios que se esta dezplazando 1er num hacia abajo y 2do num
hacia der
ActiveCell.Offset(0, 2) = txtTelefono
ActiveCell.Offset(0, 3) = txtID
ActiveCell.Offset(0, 4) = txtEmail
ActiveCell.Offset(0, 5) = ArchivoIMG
Application.ScreenUpdating = True
LimpiarFormulario
cmbNombre.SetFocus
End Sub
Private Sub btnCerrar_Click()
End
End Sub
Private Sub btnEliminar_Click()
Dim fCliente As Integer
fCliente = nCliente(cmbNombre.Text)
If fCliente = 0 Then
MsgBox "El cliente que usted quiere eliminar no existe",
vbInformation + vbOKOnly
cmbNombre.SetFocus
Exit Sub
End If
If MsgBox("Seguro que quiere eliminar este cliente?", vbQuestion
+ vbYesNo) = vbYes Then
Cells(fCliente, 1).Select
ActiveCell.EntireRow.Delete
LimpiarFormulario
MsgBox "Cliente eliminado", vbInformation + vbOKOnly
cmbNombre.SetFocus
End If
End Sub
Private Sub cmbNombre_Change()
On Error Resume Next
If nCliente(cmbNombre.Text) <> 0 Then
Sheets("Clientes").Activate
Cells(cmbNombre.ListIndex + 2, 1).Select
txtDireccion = ActiveCell.Offset(0, 1)
txtTelefono = ActiveCell.Offset(0, 2)
txtID = ActiveCell.Offset(0, 3)
txtEmail = ActiveCell.Offset(0, 4)
fotografia.Picture = LoadPicture("")
fotografia.Picture = LoadPicture(ActiveCell.Offset(0, 5))
ArchivoIMG = ActiveCell.Offset(0, 5)
Else
txtDireccion = ""
txtTelefono = ""
txtID = ""
txtEmail = ""
ArchivoIMG = ""
fotografia.Picture = LoadPicture("")
End If
End Sub
Private Sub cmbNombre_Enter()
CargarLista
End Sub
Sub CargarLista()
cmbNombre.Clear
Sheets("Clientes").Select
Range("A2").Select
Do While Not IsEmpty(ActiveCell)
cmbNombre.AddItem ActiveCell.value
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Sub LimpiarFormulario()
CargarLista
txtDireccion = ""
txtTelefono = ""
txtID = ""
txtEmail = ""
ArchivoIMG = ""
End Sub
Private Sub fotografia_Click()
On Error Resume Next
ArchivoIMG = Application.GetOpenFilename("Imgenes jpg,*.jpg,
Imagenes bmp, *bmp.bmp", 0, "Seleccionar imagen para registro de
clientes")
fotografia.Picture = LoadPicture("")
fotografia.Picture = LoadPicture(ArchivoIMG)
End Sub
9. Las funciones creadas en mdulos
Option Explicit
'carga formulario, nos ubicamos en hoja clientes y que la muestre y
que muestr formulario
Sub registrar()
Load frmClientes
Sheets("Clientes").Activate
frmClientes.Show
End Sub
Function nCliente(nombre As String) As Integer
Application.ScreenUpdating = False 'desabilita la actualizacin en
pantalla
Sheets("Clientes").Activate
Range("A2").Activate 'desde aqui empieza a leer los registos
nCliente = 0 'quiero decir que dicho cliente no existe
'mientras celda activa no este vacia o halla un registro
Do While Not IsEmpty(ActiveCell)
If nombre = ActiveCell Then
nCliente = ActiveCell.Row
End If
ActiveCell.Offset(1, 0).Select 'interesa que se desplace hacia abajo
Loop
Application.ScreenUpdating = True 'activa actualizacion en pantalla
End Function
Function IsValidEmail(value As String) As Boolean
Dim RE As Object
Set RE = CreateObject("vbscript.RegExp")
RE.Pattern = "^[a-zA-Z0-9\._-]+@([a-zA-Z0-9_-]+\.)+([a-zA-Z]{2,3})$"
IsValidEmail = RE.Test(value)
Set RE = Nothing
End Function
Fila = Fila + 1
Loop
End Sub
Lista = Hoja17.Cells(Fila, 1)
cmbCodigoProducto.AddItem (Lista)
Next
End Sub
17.El clic del botn modificar quedara asi
Private Sub btnModificar_Click()
' reemplazar la informacion de un registro existente
Dim Fila As Integer 'controlo fila en la hoja de calculo
Dim Final As Integer 'detectar el final donde se inserta el registro
For Fila = 2 To 1000 'debido a que se tiene un encabezado
' envia informacion a 3 hojas de calculo
If Hoja17.Cells(Fila, 1) = "" And Hoja18.Cells(Fila, 1) = "" And
Hoja19.Cells(Fila, 1) = "" Then
Final = Fila - 1
Exit For
End If
Next
For Fila = 2 To Final 'debido a que se tiene un encabezado
If Me.cmbCodigoProducto = Hoja17.Cells(Fila, 1) Then
Hoja17.Cells(Fila, 2) = Me.txtNombre
Hoja17.Cells(Fila, 3) = Me.txtDescripcion
Exit For
End If
Next
' hacer modificacion del nombre en hoja18 (entradas) y
19(existencia) que es la unica modificacion que se hace ahi
For Fila = 2 To Final
If Me.cmbCodigoProducto = Hoja18.Cells(Fila, 1) Then
Hoja18.Cells(Fila, 2) = Me.txtNombre
End If
Next
For Fila = 2 To Final
If Me.cmbCodigoProducto = Hoja19.Cells(Fila, 1) Then
Hoja19.Cells(Fila, 2) = Me.txtNombre
Exit For
End If
Next
Me.cmbCodigoProducto = ""
Me.txtNombre = ""
Me.txtDescripcion = ""
End Sub
18.Si en el codigo de registrar pto se quiere colocar un fondo en color
para seleccionar un registro cuando se intente registrar y este ya
exista se debe seleccionar el textBox del formulario y en las
propiedades la de backColor colocarla en el color deseado para copiar
el codigo que aparece y luego regresarlo al original y en codigo
adicionar esto debajo del for del registro ya existe
End Sub
31.Codigo change del combobox es el mismo del de entradas
Private Sub cmbCodigoProducto_Change()
Dim Fila As Integer
Dim Final As Integer
'si comboBox esta en blanco nombre y descripcion tambien deben
estar en blanco
If cmbCodigoProducto.value = "" Then
Me.txtNombre = ""
Me.txtExistencia = ""
End If
'toma informacion de la hoja de ptos y de existencias
For Fila = 2 To 1000
If Hoja17.Cells(Fila, 1) = "" And Hoja19.Cells(Fila, 1) = "" Then
Final = Fila - 1
Exit For
End If
Next
'Tomar informacion del nombre que se encuentra en la hoja de pto
para colocarlo en el textBox de nombre del form de consultas
For Fila = 2 To Final
If cmbCodigoProducto = Hoja17.Cells(Fila, 1) Then
Me.txtNombre = Hoja17.Cells(Fila, 2)
Exit For
End If
Next
'toma informacion de la hoja19 la de existencias para asi mostrarlo
en la caja de texto de existencias
For Fila = 2 To Final
If cmbCodigoProducto = Hoja19.Cells(Fila, 1) Then
Me.txtExistencia = Hoja19.Cells(Fila, 3)
Exit For
End If
Next
End Sub
32.Codigo enter del combobox tambin es el mismo del formulario
entradas
Private Sub cmbCodigoProducto_Enter()
Dim Fila As Integer
Dim Final As Integer
Dim Lista As String
' Este evento es para que aparezcan los codigos de ptos en el
comboBox
For Fila = 1 To cmbCodigoProducto.ListCount
cmbCodigoProducto.RemoveItem 0
Next Fila
For Fila = 2 To 1000
If Hoja17.Cells(Fila, 1) = "" Then
Me.txtCantidadSalida = ""
End Sub
34.Codigo del botn finalizar es el mismo
Private Sub btnFinalizar_Click()
Unload Me
End Sub
35.El codigo de producto en las hojas de texto se registra como texto y
no como numero para arreglar eso cambiamos unas cosas en la
mayor parte del codigo partiendo desde formulario registrar
productos es agregar la palabra val antes de todos los
me.txtCodigoProducto el cual queda entre parentesis, se aregla para
todo lo relacionado con el codigo de producto ya sea txt o cmb
36.Se agrego en el formulario modificar el codigo para que tambin
modifique nombre de producto en hoja de calculo de salidas
For Fila = 2 To Final
If Val(Me.cmbCodigoProducto) = Hoja20.Cells(Fila, 1) Then
Hoja20.Cells(Fila, 2) = Me.txtNombre
Exit For
End If
Next
37.Para que carque automticamente el formulario cuando se abra el
libro seleccionar this workbook que hace referencia al libro de trabajo
entero doble clic en la pantalla gris aparece general seleccionamos
workbook en el evento open colocar frmMenu.show (o el formulario
que quiere que se abra cuando abre documento)
38.En los textbox de fecha para no tener que colocar los slash se pone
un codigo que enmascara esa parte por lo que uno solo colocara los
nmeros tanto en el textbox de fecha de entrada como en de fecha
de salida se da doble clic en el evento keydown osea cuando se
presionan las teclas
Private Sub txtFechaSalida_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case Len(Me.txtFechaSalida) 'longitud informacion ingresada
en el textbox
Case 2 'caso de que sean 2 digitos o caracteres osea los dos nume
del dia
Me.txtFechaSalida = Me.txtFechaSalida + "/"
Case 5 ' 5 caracteres correspondientes a dos del dia mas el / mas
los dos del mes
Me.txtFechaSalida = Me.txtFechaSalida + "/"
End Select
End Sub
Private Sub txtFechaIngreso_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case Len(Me.txtFechaIngreso) 'longitud informacion ingresada
en el textbox
Case 2 'caso de que sean 2 digitos o caracteres osea los dos nume
del dia
Me.txtFechaIngreso = Me.txtFechaIngreso + "/"
Case 5 ' 5 caracteres correspondientes a dos del dia mas el / mas
los dos del mes
Me.txtFechaIngreso = Me.txtFechaIngreso + "/"
End Select
End Sub
End Function
Me.cmbCodigoProducto = ""
Me.txtNombre = ""
Me.txtDescripcion = ""
End Sub
3. Botn cancelar
Private Sub btnFinalizar_Click()
Unload Me
End Sub
4. Para el caso de los combobox es el mismo codigo que el form de
moddificar para que cargue las opciones en el evento change
Private Sub cmbCodigoProducto_Change()
Dim Fila As Integer
Dim final As Integer
If Val(cmbCodigoProducto.value = "") Then
Me.txtNombre = ""
Me.txtDescripcion = ""
End If
For Fila = 2 To 1000
If Hoja17.Cells(Fila, 1) = "" Then
final = Fila - 1
Exit For
End If
Next
For Fila = 2 To final
If Val(cmbCodigoProducto) = Hoja17.Cells(Fila, 1) Then
Me.txtNombre = Hoja17.Cells(Fila, 2)
Me.txtDescripcion = Hoja17.Cells(Fila, 3)
Exit For
End If
Next
End Sub
5. Para el evento enter
Private Sub cmbCodigoProducto_Enter()
Dim Fila As Integer
Dim final As Integer
Dim Lista As String
' Este evento es para que aparezcan los codigos de ptos en el
comboBox
For Fila = 1 To cmbCodigoProducto.ListCount
cmbCodigoProducto.RemoveItem 0
Next Fila
For Fila = 2 To 1000
If Hoja17.Cells(Fila, 1) = "" Then
final = Fila - 1 ' No se necesita la ultima celda que sale en
blanco para agregar ya que este modifica
Exit For
End If
Next
For Fila = 2 To final
Lista = Hoja17.Cells(Fila, 1)
cmbCodigoProducto.AddItem (Lista)
Next
End Sub
6. Se hicieron cambios se cambio entradas por ingresos por conpras y
salidas por transferencias ya que se refiere a transferencias de
mercancas a otras bodegas o tiendas
7. Hacer el botn para devoluciones de entradas y salidas los botones
de combobox quedan de la siguiente forma para ambos combobox
Private Sub cmbCodigoProducto_Change()
Dim Fila As Integer
Dim final As Integer
If Val(cmbCodigoProducto.value = "") Then
Me.txtNombre = ""
Me.txtExistencia = ""
End If
For Fila = 2 To 1000
If Hoja19.Cells(Fila, 1) = "" Then
final = Fila - 1
Exit For
End If
Next
For Fila = 2 To final
If Val(cmbCodigoProducto) = Hoja19.Cells(Fila, 1) Then
Me.txtNombre = Hoja19.Cells(Fila, 2)
Me.txtExistencia = Hoja19.Cells(Fila, 3)
Exit For
End If
Next
End Sub
Private Sub cmbCodigoProducto_Enter()
Dim Fila As Integer
Dim final As Integer
Dim Lista As String
' Este evento es para que aparezcan los codigos de ptos en el
comboBox
For Fila = 1 To cmbCodigoProducto.ListCount
cmbCodigoProducto.RemoveItem 0
Next Fila
For Fila = 2 To 1000
If Hoja19.Cells(Fila, 1) = "" Then
final = Fila - 1
Exit For
End If
Next
For Fila = 2 To final
Lista = Hoja19.Cells(Fila, 1)
cmbCodigoProducto.AddItem (Lista)
Next
End Sub
8. Los botones de finalizar quedan asi
Private Sub btnFinalizar_Click()
Unload Me
End Sub
9. Al colocar la fecha para que por codigo oculto se coloque los
separadores de dia, mes, ao
Private Sub txtFechaDevolucion_KeyDown(ByVal KeyCode As
MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case Len(Me.txtFechaDevolucion) 'longitud informacion
ingresada en el textbox
Case 2 'caso de que sean 2 digitos o caracteres osea los dos nume
del dia
Me.txtFechaDevolucion = Me.txtFechaDevolucion + "/"
Case 5 ' 5 caracteres correspondientes a dos del dia mas el / mas
los dos del mes
Me.txtFechaDevolucion = Me.txtFechaDevolucion + "/"
End Select
End Sub
10.Botn procesar para entradas y salidas por devolucin solo cambia
dos lneas de codigo donde se suma y resta por la existencia y la del
tipo de devolucin
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(1, 1) =
"DETALLE DE MOVIMIENTOS DE " & UCase(Me.txtNombre)
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(3, 2) =
CodProd 'Celda B3
For Fila = 1 To 1000
If Hoja17.Cells(Fila, 1) = CodProd Then 'hoja de calculo ptos
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(4,
2) = Hoja17.Cells(Fila, 2) '(4,2) nombre
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(5,
2) = Hoja17.Cells(Fila, 3) '(5,2) desc
Exit For
End If
Next
For Fila = 1 To 1000
If Hoja19.Cells(Fila, 1) = CodProd Then 'hoja calculo existencia
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(6,
2) = Hoja19.Cells(Fila, 3) '(6,2) existencia
ValorSaldo = Hoja19.Cells(Fila, 3)
Exit For
End If
Next
15.Establecer datos del pto
'Establecer datos del producto consultado
ContarFilas = 9 'numero de filas(encabezado) que abra desde el inicio
hasta donde se colocarian los registros
'Asignar el codigo de producto para el reporte. El Ucase es para hacer
mayusculas lo q esta en txtnombre
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(1, 1) =
"DETALLE DE MOVIMIENTOS DE " & UCase(Me.txtNombre)
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(3, 2) =
CodProd 'Celda B3
For Fila = 1 To 1000
If Hoja17.Cells(Fila, 1) = CodProd Then 'hoja de calculo ptos
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(4,
2) = Hoja17.Cells(Fila, 2) '(4,2) nombre
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(5,
2) = Hoja17.Cells(Fila, 3) '(5,2) desc
Exit For
End If
Next
For Fila = 1 To 1000
If Hoja19.Cells(Fila, 1) = CodProd Then 'hoja calculo existencia
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(6,
2) = Hoja19.Cells(Fila, 3) '(6,2) existencia
ValorSaldo = Hoja19.Cells(Fila, 3)
Exit For
End If
Next
16.Detalle de registro de entradas y salidas
'Entradas colocar detalle de registro de mov de entradas
For Registro = 1 To Final
If Hoja18.Cells(Registro, 2) = CodProd Then
ContarFilas = ContarFilas + 1
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
as, 2) = Hoja18.Cells(Registro, 1) 'Comprob'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
as, 3) = Hoja18.Cells(Registro, 4) 'Fecha de Ingreso'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
as, 4) = Hoja18.Cells(Registro, 5) 'No. Factura'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
as, 5) = Hoja18.Cells(Registro, 6) 'Proveedor'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
as, 6) = Hoja18.Cells(Registro, 8) 'Tipo Entrada'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
as, 7) = Hoja18.Cells(Registro, 7) 'Cant. Entrada'
End If
Next
'Salidas colocar detalle de registro de mov de salidas
ContarFilasFilas2 = 9
For Registro2 = 1 To Final2
If Hoja18.Cells(Registro2, 2) = CodProd Then
ContarFilasFilas2 = ContarFilasFilas2 + 1
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
asFilas2, 8) = Hoja18.Cells(Registro2, 1) 'Comprob'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
asFilas2, 9) = Hoja18.Cells(Registro2, 4) 'Fecha de Salida'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
asFilas2, 10) = Hoja18.Cells(Registro2, 5) 'No. Factura'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
asFilas2, 11) = Hoja18.Cells(Registro2, 6) 'Destino'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
asFilas2, 12) = Hoja18.Cells(Registro2, 8) 'Tipo Salida'
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(ContarFil
asFilas2, 13) = Hoja18.Cells(Registro2, 7) 'Cant. Salida'
End If
Next
17.Codigo para saber donde se coloca saldo
'Determinar el final para colocar saldo final del producto
'7(G) se refiere a la fila del final parte de entradas y 13(M) a la de
salidas y (1) es hoja 1 del nuevo lobro de trabajo
For FilaDelTotal = 10 To 1000
If
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(FilaDelTot
al, 7) = "" And
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(FilaDelTot
al, 13) = "" Then
SaldoTotal = FilaDelTotal
Exit For
End If
Next
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(SaldoTot
al, 12) = "Saldo"
Application.Workbooks(NombreArchivo).Worksheets(1).Cells(SaldoTot
al, 13) = ValorSaldo
18.Ahora para hacer formatos se puede en el mismo codigo o creando
modulo donde se copiara el codigo para llamarlo desde el codigo de
botn consultar con call nombreModulo se acostumbra hacersr aparte
si el codigo es muy largo si no se deja ah mismo
19.'APLICAR FORMATO A TODO EL REPORTE
Unload Me
ObjExcel.Activate
20.Macro para colocar bordes y quitar cuadricula de la hoja
Macro para establecer Bordes en reporte y quitar las lneas de
cuadrcula
Range(Cells(10, 2), Cells(SaldoTotal, 13)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ThemeColor = 1
.TintAndShade = -0.249946592608417
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ThemeColor = 1
.TintAndShade = -0.249946592608417
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ThemeColor = 1
.TintAndShade = -0.249946592608417
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ThemeColor = 1
.TintAndShade = -0.249946592608417
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ThemeColor = 1
.TintAndShade = -0.249946592608417
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ThemeColor = 1
.TintAndShade = -0.249946592608417
.Weight = xlThin
End With
Range("A3").Select
ActiveWindow.DisplayGridlines = False
21.Macro para formatear saldo
'Macro para formatear el saldo
Range(Cells(SaldoTotal, 12), Cells(SaldoTotal, 13)).Select
Selection.Font.Bold = True
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("A3:A6").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.Font.Bold = True
Range("B9").Select
ActiveCell.FormulaR1C1 = "Comprb."
Range("C9").Select
ActiveCell.FormulaR1C1 = "Fecha"
Range("D9").Select
ActiveCell.FormulaR1C1 = "Factura"
Range("E9").Select
ActiveCell.FormulaR1C1 = "Proveedor"
Range("F9").Select
ActiveCell.FormulaR1C1 = "Tipo Entrada"
Range("G9").Select
ActiveCell.FormulaR1C1 = "Cant. Entrada"
Range("H9").Select
ActiveCell.FormulaR1C1 = "Comprb."
Range("I9").Select
ActiveCell.FormulaR1C1 = "Fecha"
Range("J9").Select
ActiveCell.FormulaR1C1 = "Transf."
Range("K9").Select
ActiveCell.FormulaR1C1 = "Destino"
Range("L9").Select
ActiveCell.FormulaR1C1 = "Tipo Salida"
Range("M9").Select
ActiveCell.FormulaR1C1 = "Cant. Salida"
Range("M9").Select
Range(Selection, Selection.End(xlToLeft)).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.Font.Bold = True
Range("A3").Select
Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Columns("F:F").EntireColumn.AutoFit
Columns("G:G").EntireColumn.AutoFit
Columns("H:H").EntireColumn.AutoFit
Columns("J:J").EntireColumn.AutoFit
Columns("K:K").EntireColumn.AutoFit
Columns("L:L").EntireColumn.AutoFit
Columns("M:M").EntireColumn.AutoFit
Range("B8:G8").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
ActiveCell.FormulaR1C1 = "ENTRADAS"
Range("H8:M8").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
ActiveCell.FormulaR1C1 = "SALIDAS"
Range("B8:G8").Select
Selection.Font.Size = 12
Selection.Font.Size = 14
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 5296274
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("H8:M8").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.Font.Size = 12
Selection.Font.Size = 14
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.Font.Bold = True
Range("B8:G8").Select
With Selection.Font
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
Selection.Font.Bold = True
Range("A3").Select
23.Codigo para botn finalizar
Private Sub btnFinalizar_Click()
Unload Me
End Sub
Next
End Sub
Private Sub cmbUsuario_Enter()
Dim Fila As Integer
Dim final As Integer
Dim Lista As String
For Fila = 1 To cmbUsuario.ListCount
cmbUsuario.RemoveItem 0
Next Fila
For Fila = 2 To 1000
If Hoja25.Cells(Fila, 1) = "" Then
final = Fila - 1
Exit For
End If
Next
For Fila = 2 To final
Lista = Hoja25.Cells(Fila, 1)
cmbUsuario.AddItem (Lista)
Next
End Sub
6. Formulario de login
Private Sub btn_Registrar_Click()
Dim usuario As String
Dim Fila, final As Integer
Dim password, UsuarioEncontrado, yaExiste, Status
Dim Rango As Range
Titulo = "Gestor de Inventarios"
yaExiste =
Application.WorksheetFunction.CountIf(Hoja25.Range("Tabla5[Usuario
s]"), Me.txtUsuario.value)
Set Rango = Hoja25.Range("Tabla5[Usuarios]")
If Me.txtUsuario.value = "" Or Me.txtPassword.value = "" Then
MsgBox "Introduce usuario y contrasea", vbExclamation, Titulo
Me.txtUsuario.SetFocus
ElseIf yaExiste = 0 Then
MsgBox "El usuario '" & Me.txtUsuario & "' no existe",
vbExclamation, Titulo
ElseIf yaExiste = 1 Then
UsuarioEncontrado =
Rango.Find(What:=Me.txtUsuario.value, MatchCase:=False).Address
password = Hoja25.Range(UsuarioEncontrado).Offset(0,
1).value
Status = Hoja25.Range(UsuarioEncontrado).Offset(0,
2).value
If Hoja25.Range(UsuarioEncontrado).value =
Me.txtUsuario.value And password = Me.txtPassword.value Then
For Fila = 1 To 1000
If Hoja26.Cells(Fila, 1) = "" Then
final = Fila
Exit For
End If
Next
Hoja26.Cells(final, 1) = "=NOW()"
Hoja26.Cells(final, 1).Copy
Hoja26.Cells(final, 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Hoja26.Cells(final, 2) = Me.txtUsuario
Hoja26.Cells(final, 3) = Status
If Status = "Admin" Then
Hoja16.btnAdmin.Enabled = True
End If
Hoja26.Range("G1") = Me.txtUsuario
Unload Me
Else
MsgBox "La contrasea es incorrecta", vbExclamation, Titulo
End If
End If
End Sub
7. Botn salir que cierra el documento
Private Sub btn_Salir_Click()
Unload Me
ActiveWorkbook.Save
Application.DisplayAlerts = False
Application.Quit
End Sub
8. Cuando se inicialice el formulario se desactiva el botn administrador
que solo ser accesible para ese perfil
Private Sub UserForm_Initialize()
Call OcultarHojasGestorInventario
Hoja16.btnAdmin.Enabled = False
End Sub
9. Otro evento del formulario
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As
Integer)
If CloseMode = 0 Then
Unload Me
ActiveWorkbook.Save
Application.DisplayAlerts = False
Application.Quit
'Cancel = 1
'CloseMode = 1
End If
End Sub
10.Modulo para ocultar y mostrar hojas
Sub MostrarHojas()
Dim Hoja As Worksheet
For Each Hoja In Worksheets
If Hoja.CodeName <> "Hoja16" Then
Hoja.Visible = xlSheetVisible
End If
Next Hoja
End Sub
Sub OcultarHojasGestorInventario()
Dim Hoja As Worksheet
For Each Hoja In Worksheets
If Hoja.CodeName <> "Hoja16" Then
Hoja.Visible = xlSheetVeryHidden
End If
Next Hoja
End Sub
11.Se le agrega a la hoja de entrads por devolucin, ingresos por
compras, salidas por devolucin, tranferencias respectivamente
Hoja18.Cells(final, 11) = Hoja26.Range("G1")
Hoja18.Cells(final, 11) = Hoja26.Range("G1")
Hoja20.Cells(final, 11) = Hoja26.Range("G1")
Hoja20.Cells(final, 11) = Hoja26.Range("G1")
12.En thisworkbook para que cuando se abra libro de trabajo se coloca
Private Sub Workbook_Open()
frmLoginGestor.Show
End Sub
13.Pendiente cdigo del botn de fecha porque en office 64 no sirve
(parte11 gestor inv los ltimos min)
14.Para ocultar el libro de trabajo en el momento que se ejecuta la
aplicacin en donde dice thsiWorkNook se copia esta lnea
ThisWorkBook.Application.Visible = False
SplashForm.Show
15.Este codigo va en el load del splashForm
'Para mostrar un UserForm sin barra de titulo necesitamos cuatro
funciones API:
Const GWL_STYLE = -16
Const WS_CAPTION = &HC00000
#If VBA7 Then
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As
Long
End Sub
16.En el form para que funcione la propiedad showModal debe ser false
17.Adiciono splash screem personalizado la pantalla de inicio de la
aplicacin con una barra de progreso
18.Oculto libro de trabajo que solo se muestra con la opcin mostrar
todo
19.Todas las opciones en un solo formulario
20.La x de cerrar no permite cerrar formulario no hace nada cunado el
libro de trabajo est cerrado y para eso se coloca botn salir para que
sea el nico con el que se pueda salir si no se es admin que es
cuando da la opcin de mostrar libro de trab
21.Se deshabilitan todos los botones de uso administrativo cuando se
entra con usuario empleado
22.Para ocultar libro de trabajo cuando se ejecute la aplicacin vamos a
la hoja llamada thisworkbook
Private Sub Workbook_Open()
ThisWorkbook.Application.Visible = False
End Sub
Min 11:43 parte12
Pendiente escribir todo el cdigo de parte 12
23.