Académique Documents
Professionnel Documents
Culture Documents
Primero ajustamos los parmetros de la impresin, el apartado PageSetup. Luego se imprime con el mtodo PrintOut.
'preparar la hoja para la impresin With ActiveSheet.PageSetup .PrintArea = "" .Orientation = xlPortrait 'xlLandscape .PaperSize = xlPaperA4 'formato A4 .BlackAndWhite = False 'incluir colores o no .FitToPagesWide = 1 'reduce el tamao de la hoja (ancho) .FitToPagesTall = 1 'reduce el tamao de la hoja (alto) .CenterHorizontally = False 'centrar horizontalmente .CenterVertically = False 'centrar verticalmente End With 'imprimir las celdas seleccionadas (1 copia) ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True End Sub
Alineacin izquierda/derecha
Sub Ajustar_izq_der() If Selection.HorizontalAlignment = xlRight Then Selection.HorizontalAlignment = xlLeft Else Selection.HorizontalAlignment = xlRight End If End Sub
Pegar formato
Sub PegarFormato() Selection.PasteSpecial Paste:=xlFormats Application.CutCopyMode = False End Sub
Pegar valor
Sub PegarValor() Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False End Sub
Dos decimales
Sub DosDec() Dim Area As Range Set Area = Selection For Each Cell In Area z = Round(Cell, 2) Cell.Value = z Cell.NumberFormat = "#,##0.00" Next Cell End Sub
Separador de miles
Sub SeparadorMil() Dim Area As Range Set Area = SelectionIf Area.NumberFormat = "#,##0" Then Area.NumberFormat = "#,##0.00" Else Selection.NumberFormat = "#,##0" End If End Sub
Sub SuprimirFilasVacias() LastRow = ActiveSheet.UsedRange.Row - 1 + _ ActiveSheet.UsedRange.Rows.Count For r = LastRow To 1 Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete End If Next r End Sub
Autofilter
Sub FilterExcel() Selection.AutoFilter End Sub
For Each wsHoja In ActiveWorkbook.Worksheets If wsHoja.Visible = False Then wsHoja.Visible = True End If Next wsHoja End Sub
Procedimiento
Crea un formulario frmMensaje con el mensaje que quieres que aparezca. Aade este cdigo al formulario. El ejemplo nos dice que la rutina se va a esperar (Wait) hasta la hora
Now + TimeValue("00:00:04")
Luego, para mostrar el formulario en cualquier parte de tu programa, aplicas este cdigo.
frmMensaje.Show
En el ejemplo de abajo, el formulario se mostrar al abrir el libro (ponemos el cdigo en el contenedor de cdigo VBA EsteLibro.
Private Sub Workbook_Open()
El cdigo
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim strRuta As String Dim intRowActual as Double, intColumnActual As Double Dim intRow as Double, intColumn As Double 'ruta a imagen strRuta = "C:\imagen.jpg" 'fila/columna actual intRowActual = ActiveCell.Row intColumnActual = ActiveCell.Column
'fila/columna de scrollRow intRow = ActiveWindow.ScrollRow + 1 intColumn = ActiveWindow.ScrollColumn 'insertamos comentario Cells.ClearComments With Cells(intRow, intColumn) .AddComment .Comment.Text Text:="Hola" .Comment.Visible = True End With 'aadimos imagen al comentario Cells(intRow, intColumn).Comment.Shape.Select True Selection.ShapeRange.Fill.UserPicture strRuta 'aparcamos en celda actual Cells(intRowActual, intColumnActual).Select End Sub
De esta manera puedes aplicar cualquier frmula de Excel en VBA, con tal de que empieces la lnea de cdigo con
Application.WorksheetFunction...
Nuestro ejemplo
En este ejemplo el rango que nos interesa sumar son los valores correspondientes a BB, es decir C8:C13.
Con bastante frecuencia quiero que celdas que contienen fechas tengan el formato AAAAMM-DD (ao-mes-da, 2004-01-17) como algunos sistemas informticos trabajan con este formato. Pero hay un problema; este formato no siempre est presente en todos los ordenadores. Entonces se crea su propio formato AAAA-MM-DD.
El ejemplo arriba: Azul/formato porcentaje sin decimales si mayor que 0,00. Rojo si menor que 0,00. - si equivale a 0,00. #.##0,00 #.##0,00 0000,00 # ??/?? ##0,0E+0 1125100012,2587 52,21 52,21 =7/2 100000 1.125.100.012,26 52,21 0052,21 3 1/2 100,0E+3
Nmeros
Aqu decides la presentacin de nmeros (valores). Intenta encontrar formatos que sean fciles y eficaces. Un formato extendido en contabilidad es: Nmero: Decimales = 2, Separador de miles = S En vez de presentar un dinero as: 125050000,7 debes aplicar un formato como: 125.050.000,69 Como puedes ver en el primer ejemplo, la celda contiene un valor que termina en ,69. Luego el formato dice cuntos decimales se van a mostrar. Hay unos atajos rpidos para formatear celdas.
CTRL + SHIFT + ! = 2 decimales/separador miles CTRL + SHIFT + % = porcentaje CTRL + SHIFT + # = formato fecha
Estoy armando un listadito de cdigos muy tiles para usar cuando ests desarrollando una macro. Los voy compartiendo y actualizando a medida que voy avanzando. A fines del ao pasado empec a hacer varias macros en el laburo, y la verdad que ahora quiero hacer todo con macros. Hace mucho tiempo que uso Excel, y la verdad que las macros le dan un giro muy groso, y eso que apenas estoy aprendiendo!!! Adems subo y comparto un libro en .pdf que est muy bueno, con el cual estoy aprendiendo "formalmente", y no solo por prueba-error. Lamentablemente el libro est en ingls, as que no va a ser til para todos. Pero como para escribir macros hay que usar comandos en ingls supongo que muchos lo van a aprovechar. Una aclaracin que no est de ms, soy un simple usuario de Excel, del palo de la contabilidad y los nmeros, que sabe algo de ingls, y que tiene una curiosidad enorme.Si alguien anda por un camino parecido al mio, nimo que muchas veces parece que no damos pie con bola, pero al final sale! El Grabador de macros que trae Excel... A ver, alguien que estudio o que ya tiene un manejo avanzado de macros va a decir que es una porquera, y algo de razn tiene. Pero a favor tengo que decir que me ha resultado muy til para empezar, y que me sigue siendo til cuando quiero hacer algo que no s con qu cdigo ser. Una vez que aprendes a leerlo y corregirlo el grabador de macros es una herramienta ms. Bueno, aqu van los primeros cdigos
Application.ScreenUpdating = False No calcular automaticamente -Es igual a configurar en las opciones de Excel "Calcular=Manual"Application.Calculation = xlManual Pegar formulas -Es lo mismo a "Pegado especial -> Frmulas"Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks_ :=False, Transpose:=False Application.CutCopyMode = False Pegar valores -Es lo mismo a "Pegado especial -> Valores"Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks_ :=False, Transpose:=False Application.CutCopyMode = False Ocultar hoja -En este caso oculta Hoja1Worksheets("Hoja1" ).Hidden True Mostrar el trabajo de la Macro -Deshace lo que hicimos con ocultarApplication.ScreenUpdating = True Guardar como y cerrar -Aqu va a abrir dos cuadros pidiendo al usuario que ingrese una nombre primero y despus una carpeta, guarda y cierraDim NombreLibro As String Dim RutaGuardado As String NombreLibro = InputBox(""Guardar como:"" ) & "".xlsm"" RutaGuardado = InputBox(""Guardar en la carpeta:"", , ""C:Mis documentos"" ) Dim NombreyRuta As String NombreyRuta = RutaGuardado & NombreLibro ActiveWorkbook.SaveAs Filename:=NombreyRuta ActiveWorkbook.Close False Ocultar varias hojas -Lo mismo que ocultar una, pero para varias usando un Array-
Sheets(Array(""Hoja1"", ""Hoja2"", ""Hoja3"" ).Select ActiveWindow.SelectedSheets.Visible = False Encontrar Ultima fila -Este cdigo es muy bueno porque encuentra la ltima fila, cosa que puede variar entre un reporte y otroDim ULTIMAFILA as String ULTIMAFILA = Cells(Rows.Count, 1).End(xlUp).Row Filtrar y copiar registros unicos -En este caso filtra el rango A1:A4 y copia valores nicos a G1 Range(""A1:A4"" ).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range(""G1"" _ ), Unique:=True
edondear un nmero es una tarea comn que podemos hacer con la frmula de Excel
REDONDEAR. En ste post nos proponemos programar una funcin en VBA, mediante una macro, que produzca el redondeo.
Cdigo:
Function Redondealo(n As Double) As Double If n >= Int(n) + 0.5 Then Redondealo = Int(n) + 1 Else Redondealo = Int(n) End If End Function
El primer nmero visto es pi que se obtiene con la funcin de Excel =PI() El segundo nmero visto es e, que es la base de los logaritmos neperianos. Tambin podemos decir que es la exponencial de 1. En Excel se puede calcular con la siguiente expresin: =EXP(1) Si aplicamos la funcin definida por el usuario Redondealo obtendremos en ambos casos el valor de 3. =Redondealo(PI()) =Redondealo(EXP(1))
Cdigo:
Programemos la funcin
Con la funcin Redondealo fuimos capaces de redondear a cero decimales. En esta ocasin vamos a introducir la variable p que recoge la precisin del redondeo. La funcin se llama MiRedondeo y el cdigo es el siguiente.
Cdigo:
Function MiRedondeo(n As Double, p As Single) As Double If n * 10 ^ p >= Int(n * 10 ^ p) + 0.5 Then MiRedondeo = Int(n * 10 ^ p + 1) / (10 ^ p) Else MiRedondeo = Int(n * 10 ^ p) / (10 ^ p) End If End Function
Public Function redn(nnum As Double, nxx As Single) As Double cal0 = Int(nnum) cal1 = dec(nnum) cal2 = cal1 * 10 ^ nxx cal3 = Int(cal2) cal4 = cal2 * 10 ^ (nxx - 1) cal5 = Int(cal4) cal6 = dec(cal5 / (10 ^ (nxx - 1))) cal7 = cal6 / (10 ^ nxx) comp = 5 / (10 ^ (nxx + 1)) If cal7 >= comp Then cal8 = cal3 + 1 Else
cal8 = cal3 End If redn = cal0 + (cal8 / (10 ^ nxx)) End Function