Beruflich Dokumente
Kultur Dokumente
Adolfo Aparicio
www.excelavanzado.com
Auto_Open() y A uto_Close()
Existe una macro de autoarranque que se ejecuta cuando se abr e el libro. Se llama auto_open(). Y existe otra que se ejecuta justo antes de cerrar el libro que se llama auto_close(). Sub Auto_Open() Dim hora As Double Dim saludo As String hora = (Now - Int(Now)) * 24 Select Case hora Case 6 To 14 saludo = "Buenos das" Case 14 To 21 saludo = "Buenas tardes" Case Else saludo = "Buenas noches" End Select MsgBox saludo & " Amo" End Sub Equivalente a auto_open existe otra macro Workbook_Open, pero sta ha de ser guardada no en un mdulo normal, sino en ThisWorkbook. Pruebe lo siguiente: El siguiente procedimiento permite abrir automticamente el libro Balance.xls al abrir el libro Informe.xls. El procedimiento ha de estar en ThisWorkbook del libro Informe.xls. Sub Workbook_Open() 'Apertura de libro Balance Workbooks.Open Filename:="C:/Temp/Balance.xls" 'Activacin del libro Informe Windows("Informe.xls").Activate End Sub
Blog
Saludo al arrancar
Crear un libro Personal.xls como se ha indicado anteriormente con la macro de autoarranque siguiente: 2 Sub Auto_open() MsgBox ("Que tengas un buen da") End Sub Esta macro creada en el libro Personal.xls hace que al iniciar Excel nos salga un mensaje saludndonos.
Exportar un mdulo
4
1. Pase al editor de visual basic y active el mdulo a exportar. 2. Seleccione Archivo/ Exportar archivo. Aparece un cuadro de dilogo. 3. En cuadro de edicin Nombre de Archivo , teclee el nombre para el archivo donde se guardar el mdulo, por ejemplo "General.Bas", observe que .BAS es la extensin de estos archivos. 4. Pulse sobre el botn Guardar.
Importar un mdulo
5
1. Active el editor Visual Basic. 2. Seleccione Archivo/ Importar Archivo . Aparece un cuadro de dilogo. 3. Seleccione en la lista Buscar en: la carpeta donde tiene ubicado el archivo a importar.
converted by Web2PDFConvert.com
4. Una vez localizada la carpeta, seleccione el archivo a importar (General.Bas en el ejemplo) y pulse sobre Abrir.
La clusula Private
6
Puede anteponer la clusula private a todos los procedimientos y funciones que sean llamados slo desde el mismo mdulo, es una forma de ahorrar memoria y hacer que el programa corra un poco ms rpido. Si necesita llamar un procedimiento o funcin desde otro mdulo, nunca debe precederlo por la clusula private, recuerde que esta clusula restringe el mbito de utilizacin de un procedimiento a su propio mdulo.
Ventana Inmediato
9 Puedes inspeccionar variables desde esta ventana anteponiendo la palabra print antes de la variable, o el signo ?.
Debug.Print
Esta expresin permite efectuar la depuracin del programa de forma ms cmoda. Se introduce en un programa antecediendo a una variable que se desea comprobar en la ventana Inmediato. De esta forma conseguiremos ver todos los valores que toma la variable cada vez que el programa pasa por este comando. Se ven en la Ventana Inmediato [Ctr+G]. . Ejemplo: Sub Dos_a_la_diez() Dim i As Integer Dim t As Integer t=1 For i = 1 To 10 t=t*2 Debug.Print "Dos a la " & i & " = " & t Next MsgBox t End Sub Despus de efectuada la depuracin se quita la lnea que contiene el comando Debug.Print.
10
12
13
17
Extensiones de los nombres de macro - Mdulos de clase. Extensin .cls. - Formularios. Extensin .frm. - Mdulos estandar. Extensin .bas. Exit Sub, Exit Function
Se usan eventualmente para salir de un procedimiento o funcin.
Llamada a un procedimiento
[Call] NombreProc [(lista de argumentos)] La palabra clave Call es opcional para llamar a un procedimiento, salvo que existan argumentos, en cuyo caso es obligatoria. Los argumentos deben ir entre parntesis y pueden ser valores o variables. Sub Suma(a As Byte, b As Byte) MsgBox "La suma es " & a + b End Sub Sub sumar() Call Suma(3, 4) End Sub
19
21
24
25
25
im = tipo_nominal / fraccionamiento / 100 Termino = Principal * im / (1 - (1 + im) ^ (-Aos * fraccionamiento)) End Function Pongamos un ejemplo para un principal de 100.000 , 10 aos, tipo nominal anual del 6%, con fraccionamiento mensual. En este caso, al ser el fraccionamiento mensual el trmino obtenido es la mensualidad. Sub ejemplo() End Sub
27
29
30
Funcin que calcula la fila que ocupa cierto valor en una tabla
Est pensado para que la matriz se ponga comenzando en la celda A1, sin encabezado y sin que se repitan los elementos. Function DimeFila(Rango As Range, Valor_a_buscar) As Integer For Each c In Rango If c.Value = Valor_a_buscar Then DimeFila = c.Row End If Next End Function
converted by Web2PDFConvert.com
32
34
Factorial
Function facto(n) Dim i As Integer facto = 1 i=0 Do i=i+1 facto = facto * i Loop While i <> n End Function
35
36
While...Wend
Esta estructura permite ejecutar las instrucciones contenidas mientras la condicin sea verdadera. La siguiente macro posiciona el cursor en la ltima celda llena de la columna A de la Hoja1.
Sub final1() i=1 While Worksheets("Hoja1").Cells(i, 1).Value <> "" Worksheets("Hoja1").Cells(i, 1).Select i=i+1 Wend End Sub
39
Otra variante: Sub final2() While ActiveCell.Value <> "" ActiveCell.Offset(1, 0).Select Wend ActiveCell.Offset(-1, 0).Select End Sub La segunda macro requiere posicionar inicialmente el cursor en la primera celda llena.
Manejo de Rangos
Para sealar una tabla se hace con CurrentRegion. Un ejemplo: 40 Dim R As Range Dim filas As Long Set R = Range("A1").CurrentRegion filas = R.Rows.Count
Ocultar Hojas
Podemos ocultar o mostrar Hojas de un libro. En el ejemplo siguiente, la Hoja2 esta inicialmente oculta, y para poder trabajar con ella la macro la mustra, y al finalizar la vuelve a ocultar. 41 Sub oculta() Sheets("Hoja2").Visible = True ActiveWorkbook.Sheets("Hoja2").Activate '... ... Sheets("Hoja2").Visible = False End Sub
42
43
Utilizacin de un Array
Sub ColumnaArray() Dim i As Byte Dim uso uso = Array("AS", "AT", "BC", "BM", "BV", "BB", "BO", "DI", "EN", "FB") Worksheets("Hoja1").Activate Range("B4").Select For i = 1 To 10 ActiveCell.Value = i ActiveCell.Offset(0, 1).Value = uso(i - 1) ActiveCell.Offset(1, 0).Activate Next i End Sub
44
Pero si lo que queremos es dejar no el valor del clculo sino la propia frmula se debera hacer de esta forma: 45
Range("I3").Formula ="=average(H3,J3)"
Si queremos introducir la frmula de la TIR para toda una columna, podemos escribir el siguiente cdigo:
Range("I7").Formula ="=IRR(C:C)"
Si lo que deseamos es introducir en una celda, no la frmula, sino el clculo de la TIR aplicada a toda una columna, el cdigo ser el siguiente:
Range("I7") = Application.WorksheetFunction.IRR(Columns("C:C").EntireColumn)
Excel
Financieras
Macros
Otros Trucos
converted by Web2PDFConvert.com