viernes, 25 de noviembre de 2011

23. DATOS VINCULADOS PARA LA GESTIÓN DE ALUMNOS – Control Docente

INSTRUCCIONES
He desarrollado para demostración un sistema de control de Alumnos mal llamado “Control Docente”. Este Libro Gestiona la inscripción, inserta nuevos alumnos y controla la asistencia, prácticosexámenes y entrega la Nota Final. Ordena los alumnos por Curso, Apellido Paterno, Apellido Materno.
Private Sub CommandButton1_Click() ‘Boton Insertar Alumno Nuevo
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Dim fil As Long: Dim col As Long: Dim nro As Integer
  Me.TextBox1.SetFocus
  nro = 1
  fil = [B8].Row
  col = [B8].Column
  If ([B8] <> "") Then
    Do While (Cells(fil, col).Value <> "")
      fil = fil + 1
      nro = nro + 1
    Loop
  End If
  Call copiarFila("asistencia", fil, 32, nro)
  Call copiarFila("practicos", fil, 33, nro)
  Call copiarFila("examenes", fil, 31, nro)
  Call copiarFila("notasFinales", fil, 11, nro)
  Call ordenar("notasFinales", fil, 9)
  Call ordenar("examenes", fil, 28)
  Call ordenar("practicos", fil, 28)
  Call ordenar("asistencia", fil, 28)
  UserForm1.Hide
  Call limpiarFormulario
  With Worksheets("notasFinales")
    .Range("G8").FormulaLocal = "=SIERROR(REDONDEAR(Asistencia!AE8*K$2;0);0)"
    .Range("H8").FormulaLocal = "=SIERROR(REDONDEAR(Practicos!AF8*K$3;0);0)"
    .Range("I8").FormulaLocal = "=SIERROR(REDONDEAR(Examenes!AC8*K$4;0);0)"
    .Range("G8:I8").AutoFill Destination:=Range(Cells(8, 7), Cells(fil + 1, 9)), Type:=xlFillDefault
  End With

  Worksheets("Asistencia").Select
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub
Private Sub copiarFila(hoja As String, fil As Long, col As Long, nro As Integer)
  Dim miRango As String
  Worksheets(hoja).Activate
  Worksheets(hoja).Range(Cells(fil, 2), Cells(fil, col)).Copy Destination:=Range(Cells(fil + 1, 2), Cells(fil + 1, col))
  Application.CutCopyMode = False
  Cells(fil, 2).Value = nro
  Cells(fil, 3).Value = StrConv(TextBox3.Text, vbProperCase)
  Cells(fil, 4).Value = StrConv(TextBox4.Text, vbProperCase)
  Cells(fil, 5).Value = StrConv(TextBox2.Text, vbProperCase)
  Cells(fil, 6).Value = StrConv(TextBox1.Text, vbProperCase)
End Sub
Private Sub limpiarFormulario()
  TextBox1.Text = ""
  TextBox2.Text = ""
  TextBox3.Text = ""
  TextBox4.Text = ""
End Sub
Private Sub CommandButton2_Click() ‘Boton de Cancelar
  Me.TextBox1.SetFocus
  Me.Hide
  Call limpiarFormulario
End Sub
Private Sub ordenar(hoja As String, fil As Long, col As Long)
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  Range(Cells(8, 3), Cells(fil, col)).Select
  With ActiveWorkbook.Worksheets(hoja).Sort
    .SortFields.Clear 'SortOn=xlSortOnValues ordena por valores
    .SortFields.Add Key:=Range("F8:F17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("C8:C17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("D8:D17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("E8:E17"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Range(Cells(8, 3), Cells(fil, col))
    .Header = xlNo 'sin encabezado
    .MatchCase = False 'no distingue entre mayusculas y minusculas
    .Orientation = xlTopToBottom
    '.SortMethod = xlPinYin
    .Apply
  End With
  'Worksheets(hoja).Range("AC4").Value = Application.WorksheetFunction.CountIf(Range("G8:AB8"), "")
  Application.Calculation = xlCalculationAutomatic
  Application.ScreenUpdating = True
End Sub


VIDEO DEMOSTRATIVO:

lunes, 14 de noviembre de 2011

22. ACTIVAR O INSTALAR COMPLEMENTOS EN EXCEL


El modulo estará disponible para cualquier libro de Excel.
INSTRUCCIONES
1. Clic en Archivo/Opciones/Complementos:

2. Clic en Ir y active Aliteral y Aceptar

3. Ahora la función aLiteral estará disponible para cualquier Libro de excel

21. CREAR COMPLEMENTOS VBA


INSTRUCCIONES
1. En la ventana VBA:
Archivo/Guardar
2. Guarde con el Tipo Complemento de Excel:


3. Clic en Guardar. Note que se guarda en la carpeta de Complementos pero deberá activar el complemento con los pasos indicados en tema siguiente 22. Activar o Instalar Complementos

20. FUNCIÓN QUE DEVUELVE EL LITERAL DE UN NUMERO


Función que devuelve el literal de un número entero entre 0 y 100
Ej. 98 -> Noventa y Ocho
INSTRUCCIONES
1. Cree un nuevo Libro y Modulo nuevo
2. Transcriba el siguiente código:

Function aLiteral(ByVal valor As Double) As String
  Dim literal As String
  valor = Round(valor, 0)
  valor = Abs(valor)
  Dim numeros(100) As String
  numeros(0) = "cero"
  numeros(1) = "uno"
  numeros(2) = "dos"
  numeros(3) = "tres"
  numeros(4) = "cuatro"
  numeros(5) = "cinco"
  numeros(6) = "seis"
  numeros(7) = "siete"
  numeros(8) = "ocho"
  numeros(9) = "nueve"
  numeros(10) = "diez"
  numeros(11) = "once"
  numeros(12) = "doce"
  numeros(13) = "trece"
  numeros(14) = "catorce"
  numeros(15) = "quince"
  numeros(20) = "veinte"
  numeros(30) = "treinta"
  numeros(40) = "cuarenta"
  numeros(50) = "cincuenta"
  numeros(60) = "sesenta"
  numeros(70) = "setenta"
  numeros(80) = "ochenta"
  numeros(90) = "noventa"
  numeros(100) = "cien"
  If (valor = 0) Then
    literal = numeros(valor)
  Else
    Do
      If (valor >= 100) Then
        If (valor = 100) Then
          literal = numeros(100)
          valor = valor - valor
        Else
          valor = 0
          On Error GoTo salir
        End If
      End If
      If (valor >= 10 And valor < 100) Then
        If (valor < 16) Then
          literal = literal & numeros(valor)
          valor = valor - valor
        Else
          literal = literal & numeros(Int(valor / 10) * 10)
          valor = valor - (Int(valor / 10) * 10)
          If (valor > 1) Then
            literal = literal & " y "
          End If
        End If
      End If
      If (valor > 0 And valor < 10) Then
        literal = literal & numeros(valor)
        valor = valor - valor
      End If
    Loop Until (valor = 0)
  End If
salir:
  aLiteral = literal
End Function

3. Guarde o siga con los siguientes temas (Crear un complemento e Instalarlo)
Nota.- Como puede verse esta función podría mejorarse para las centenas, unidades de mil, decenas de mil, etc. y podría agregarse soporte para decimales o usarse para otro tipo de literales.

VÍDEO DEMOSTRATIVO:

19. FUNCIONES VBA Y PARÁMETROS POR VALOR Y REFERENCIA


Las funciones son métodos que devuelven solo un tipo de resultado en contraste con los procedimientos que pueden devolver ningún o más de un resultado.
Ej.
Function nombreFuncion (ByVal [parámetros]) As tipoDato ‘función con parámetros por valor
[Sentencias]
nombreFuncion = [ResultadoDevuelto]
End Function

Sub nombreFuncion (ByRef [parámetros])  ‘procedimiento con parámetros por Referencia
[Sentencias]
End Function
LOS PARÁMETROS VBA
Pueden ser por valor o por referencia.
Por valor, quiere decir que se pasa una copia del valor original y cualquier cambio en esta no afecta a la original
Por referencia, se crea un apuntador a la variable original por lo que cualquier cambio en el valor de la variable local afectara a la variable original

viernes, 4 de noviembre de 2011

18. EVENTOS EN VBA - VALIDAR CON VBA


Vamos a validar las celdas en general para valores mayores o iguales a Cero y menores o iguales a 100 es decir entre Cero y Cien
INSTRUCCIONES
1. Cree un nuevo Libro
2. Doble Clic(izq) en ThisWorkbook
3. Cambie la lista desplegable de (General) por Workbook
4. Cambie Open por SheetChange
5. Transcriba el código VBasic:

Dónde:
Target es una variable tipo Range
Si es menor a cero, mayora a cien o no es numérico el dato Entonces
Limpiamos el rango, lo seleccionamos y mostramos un cuadro de dialogo

Nota.- No debemos guardar este método en un botón ya que es una macro de evento esto quiere decir que se ejecutará realizada una acción por parte del usuario en tiempo de ejecución de Excel
6. Guarde como practico18.xlsm

jueves, 3 de noviembre de 2011

17. DEPURACIÓN - PUNTO DE INTERRUPCIÓN, VENTANA INSPECCIÓN Y EJECUTAR PASO A PASO



Aremos una inspección de los valores de las variables en las sentencias de Control y Repetitivas anteriores.
INSTRUCCIONES
1. Abra el ejercicio anterior practico16.xlsm
2. PUNTO DE INTERRUPCIÓN
2.1 Haga clic(izq) a la izquierda de la sentencia siguiente, para crear un punto de interrupción:


3. AGREGAR INSPECCIÓN
3.1 Seleccione la variable c
3.2 Clic en el Menú Depuración\Agregar Inspección\Aceptar

4. DEPURACIÓN
4.1 Presione la tecla F8 reiteradamente para ejecutar sentencia a sentencia, observe como cambia el valor de la variable c en la ventana de Inspecciones
5. DETENER DEPURACIÓN
5.1 Clic en el botón Restablecer  para finalizar la Depuración Paso a Paso


VIDEO DEMOSTRATIVO(En construcción):




16. GESTIONAR ESTRUCTURAS – DO LOOP UNTIL, DO WHILE UNTIL, IF THEN Y SELECT CASE


Haremos un recorrido por la gestión de Estructuras Repetitivas (Bucles) y Condicionales (SI-Entonces) If Then,
INSTRUCCIONES
1. Cree un nuevo Libro y Modulo nuevo
2. Transcriba las macros y asigne un botón a cada una:
2.1 Estructura repetitiva Do Loop Until se repite hasta q la condición lógica es Verdadera, Ej:

2.2 Estructura repetitiva Do While Loop se repite mientras que la condición sea Verdadera, Ej:

2.3 Estructura condicional If Then ejecuta una u otra sentencia de acuerdo a que la condición sea Verdadera o Falsa Ej:

2.4 Condición Select Case de acuerdo a un valor ejecuta múltiples Case
3. Guarde como practico16.xlsm

martes, 1 de noviembre de 2011

15. GESTIÓN DE RANGOS – SELECCIONAR, ELIMINAR, INSERTAR, PROTEGER Y COPIAR RANGO


Haremos un recorrido por la gestión de Celdas y sus Rangos
INSTRUCCIONES
1. Cree un nuevo Libro y Modulo nuevo
2. Transcriba las macros y asigne un botón a cada una:
Note las distintas formas de referenciar un rango:
Range(“A1”), rango de A1
[A1], abreviada idéntica a la anterior
Range(“A1:B5”), rango desde “A1” hasta “B5”
[A1:B5], idem al anterior
fila = 1
columna = 5
Cells(fila, columna), idem al anterior más usada para valores variables

14. GESTIONAR HOJAS – CREAR, ABRIR, CERRAR, GUARDAR, IMPRIMIR Y PROTEGER HOJA


INSTRUCCIONES
1. Cree un nuevo Libro y Modulo nuevo
2. Transcriba las macros y asigne un botón a cada una
eliminarHoja(), elimina pidiendo el numero en una serie de hojas con el mismo nombre (Hoja1, Hoja2, etc) y desactivamos los cuadro de dialogo de alerta.
ocultarHoja(), si cambiamos False por True hacemos visible la Hoja otra vez



ALTERNATIVA PARA CREAR UN NUEVO LIBRO CON NOMBRE CONSTANTE:

3. (opcional) Guarde como practico13.xlsm



13. ASIGNAR UNA MACRO A UN BOTÓN U OBJETO


Con un botón de formulario:
INSTRUCCIONES
1. Ficha Programador (Cinta de Opciones)/Insertar/Botón (Controle de formulario):

2. Clic(izquierdo) sobre la Hoja
3. Clic(izq) sobre el nombre de Macro que se desea asignar
4. Clic (izq) en Aceptar
5. (opcional), clic(izq) sobre el botón y escriba un nuevo el nombre
6. Clic fuera del botón para activar el botón, Listo para probar su macro asignada al botón