P. 1
74606482-CODIGOS-VBA

74606482-CODIGOS-VBA

|Views: 24|Likes:

More info:

Published by: Carolina Moncada Moraga on Nov 14, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/13/2014

pdf

text

original

CODIGOS VBA

IMPRIMIR CELDAS SELECIONADAS, HOJAS Y LIBROS
A veces vale la pena incluir una función para que el usuario del libro pueda imprimir cómodamente (y seguro), por ejemplo desde un botón. De esta manera mantenemos el control sobre lo que se va a imprimir, y de los parámetros que se mandarán a la impresora. Abajo encontrarás sencillos ejemplos de la aplicación de cómo imprimir desde Excel VBA:
  

Selección Hojas seleccionadas Todas las hojas

Primero ajustamos los parámetros de la impresión, el apartado PageSetup. Luego se imprime con el método PrintOut.

Marcado VBA para imprimir las celdas seleccionadas
Sub Imprimir_seleccion() 'preparar la hoja para la impresión With ActiveSheet.PageSetup .PrintArea = "" .Orientation = xlPortrait 'xlLandscape .PaperSize = xlPaperA4 'formato A4 .BlackAndWhite = False 'incluir colores o no .FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho) .FitToPagesTall = 1 'reduce el tamaño de la hoja (alto) .CenterHorizontally = False 'centrar horizontalmente .CenterVertically = False 'centrar verticalmente End With 'imprimir las celdas seleccionadas (1 copia) ActiveWindow.Selection.PrintOut copies:=1, collate:=True End Sub

Código VBA para imprimir las hojas seleccionadas
Sub Imprimir_seleccion()

HorizontalAlignment = xlRight End If End Sub .CenterVertically = False 'centrar verticalmente End With Next Worksheet 'fin del bucle 'imprimir las celdas seleccionadas (1 copia) ActiveWorkbook.CenterHorizontally = False 'centrar horizontalmente .CenterHorizontally = False 'centrar horizontalmente .PrintArea = "" .SelectedSheets. collate:=True End Sub Código VBA para imprimir todas las hojas del libro Sub Imprimir_seleccion() 'preparar la hoja para la impresión 'bucle que repasa todas las hojas For Each Worksheet In ActiveWorkbook.Sheets With ActiveSheet. collate:=True End Sub Alineación izquierda/derecha Sub Ajustar_izq_der() If Selection.Orientation = xlPortrait 'xlLandscape .CenterVertically = False 'centrar verticalmente End With 'imprimir las celdas seleccionadas (1 copia) ActiveWindow.BlackAndWhite = False 'incluir colores o no .FitToPagesTall = 1 'reduce el tamaño de la hoja (alto) .PrintOut copies:=1.PrintOut From:=1.HorizontalAlignment = xlRight Then Selection. copies:=1.Orientation = xlPortrait 'xlLandscape .BlackAndWhite = False 'incluir colores o no .'preparar la hoja para la impresión With ActiveSheet.PrintArea = "" .HorizontalAlignment = xlLeft Else Selection.PaperSize = xlPaperA4 'formato A4 .PageSetup .FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho) .FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho) .PaperSize = xlPaperA4 'formato A4 .PageSetup . To:=1.FitToPagesTall = 1 'reduce el tamaño de la hoja (alto) .

##0" End If End Sub Suprimir filas vacías .##0.NumberFormat = "#.Value = z Cell.CutCopyMode = False End Sub Pegar valor Sub PegarValor() Selection.NumberFormat = "#.00" Next Cell End Sub Pegar formato Sub PegarFormato() Selection.Value = z Cell. 2) Cell.CutCopyMode = False End Sub Dos decimales Sub DosDec() Dim Area As Range Set Area = Selection For Each Cell In Area z = Round(Cell.##0" Then Area.386.PasteSpecial Paste:=xlValues Application. 2) Cell.##0.00" Next Cell End Sub Separador de miles Sub SeparadorMil() Dim Area As Range Set Area = SelectionIf Area.NumberFormat = "#.00" Else Selection.NumberFormat = "#.PasteSpecial Paste:=xlFormats Application.##0.Convertir pesetas a euro Sub Convertir() Set Area = Selection For Each Cell In Area z = Round(Cell / 166.NumberFormat = "#.

235.1 + _ ActiveSheet.UsedRange.ReferenceStyle = xlR1C1 Then Application. 194) ActiveWorkbook.Colors(40) = RGB(234.Delete End If Next r End Sub Autofilter Sub FilterExcel() Selection.Zoom = 75 ActiveWorkbook.Count For r = LastRow To 1 Step -1 If Application. 194) End Sub Mostrar todas las hojas Sub MostrarHojas() Set wsHoja = Worksheets .UsedRange.CountA(Rows(r)) = 0 Then Rows(r).DisplayGridlines = False Else ActiveWindow.Row .Colors(44) = RGB(236. 234) ActiveWorkbook.Colors(44) = RGB(236.ReferenceStyle = xlR1C1 End If End Sub Modificar paleta de colores Sub ModificarPaleta() ActiveWindow.AutoFilter End Sub Grids (Líneas de división) Sub Grids() If ActiveWindow.Rows. 235.ReferenceStyle = xlA1 Else Application.DisplayGridlines = True Then ActiveWindow. 234.Sub SuprimirFilasVacias() LastRow = ActiveSheet.DisplayGridlines = True End If End Sub Cambiar A1 a RC (columnas tiene números en vez de letras) Sub Rc() If Application.

El truco está en utilizar el método WAIT de VBA.Show En el ejemplo de abajo. Private Sub Workbook_Open() . Esto puede ser útil para presentar información al usuario („La importación ha terminado con éxito‟.Worksheets If wsHoja. Procedimiento Crea un formulario „frmMensaje„ con el mensaje que quieres que aparezca. Añade este código al formulario.Visible = False Then wsHoja. aplicas este código.Wait Now + TimeValue("00:00:04") frmMensaje. para mostrar el formulario en cualquier parte de tu programa. El ejemplo nos dice que la rutina se va a esperar („Wait„) hasta la hora Now + TimeValue("00:00:04") Es decir la hora actual más 4 segundos.Visible = True End If Next wsHoja End Sub WAIT – mostrar un formulario VBA durante un tiempo predeterminado Con el método WAIT puedes hacer que un formulario se cierre después de un tiempo determinado.For Each wsHoja In ActiveWorkbook. el formulario se mostrará al abrir el libro (ponemos el código en el contenedor de código VBA „EsteLibro„. Sub MostrarFormulario() Private Sub UserForm_Activate() Application. frmMensaje. „El archivo está guardado‟ etc).Hide End Sub Luego.

Show End Sub Scrollrow – Imagen fija a un costado de la pantalla Si queremos que el usuario vea una imagen en el costado superior izquierdo de la pantalla. podemos aplicar el siguiente código. en la cual ponemos una imagen y un poco de texto. Trata de utilizar la propiedad SCROLLROW. que nos da la celda superior izquierdo de la pantalla visible. intColumn As Double 'ruta a imagen strRuta = "C:\imagen.Row intColumnActual = ActiveCell. El resultado será algo como El código Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim strRuta As String Dim intRowActual as Double. Luego insertamos un comentario.Column .frmMensaje. Y SCROLLCOLUMN de la columna por supuesto. intColumnActual As Double Dim intRow as Double.jpg" 'fila/columna actual intRowActual = ActiveCell. esté donde esté en la hoja.

Entonces hay que hacer que VBA utilice las funciones de Excel. . intColumn).Sum(varSuma) De esta manera puedes aplicar cualquier fórmula de Excel en VBA. Pero VBA no contiene ninguna función igual. No siempre se sabe de antemano que celdas formarán parte del rango a sumar.ScrollRow + 1 intColumn = ActiveWindow. intColumn) . Utilizar funciones Excel en VBA Tenemos un rango varSuma. intColumnActual). Application.Comment.ShapeRange.UserPicture strRuta 'aparcamos en celda actual Cells(intRowActual.Select True Selection.Fill.Visible = True End With 'añadimos imagen al comentario Cells(intRow.WorksheetFunction. Sumar un rango expresado por una variable en VBA es un poco más complicado (pero sigue siendo fácil).Comment. el rango a sumar. Entonces tenemos que expresar el rango de forma variable.'fila/columna de scrollRow intRow = ActiveWindow.ScrollColumn 'insertamos comentario Cells. En Excel es fácil sumar este rango mediante una sencilla fórmula. Para sumar las celdas de este rango tenemos que llamar a la función SUM de Excel.Comment. con tal de que empieces la línea de código con Application.WorksheetFunction.Shape.Text Text:="Hola" ..ClearComments With Cells(intRow.Select End Sub Sumar rangos variables con VBA Excel Sumar un rango en Excel es fácil..AddComment .

Sum(varSuma) Introducción a los formatos personalizados ¿Qué son los formatos personlizados? A veces los formatos predefinidos de Excel no dan – hace falta aplicar un formato personalizado a tus celdas. 1) = Application. 3).WorksheetFunction.WorksheetFunction. 3)) 'sumar el rango SUMA = Application. Cells(13. Cells(13. Escribir la suma (en celda) 'el rango a sumar varSuma = Range(Cells(8. es decir C8:C13. 3)) 'sumar el rango Cells(1. 3). .Nuestro ejemplo En este ejemplo el rango que nos interesa sumar son los valores correspondientes a “BB”.Sum(varSuma) <h2>Escribir la suma (variable)</h2> <div class="cb"> <pre> 'el rango a sumar varSuma = Range(Cells(8.

Número. en la caja de texto Tipo se entra el formato. este formato no siempre está presente en todos los ordenadores. Pero hay un problema. Crear un formato personlizado El diálogo de Formatos se abre tecleando Ctrl+1 o desde el menú contextual (click derecho en celda. 2004-01-17) como algunos sistemas informáticos trabajan con este formato. Formato de celdas. Personalizada. Entonces se crea su propio formato AAAA-MM-DD. A la derecha. .Con bastante frecuencia quiero que celdas que contienen fechas tengan el formato AAAAMM-DD (año-mes-día.

2587 52.21 3 1/2 100.21 =7/2 100000 1.00.050.21 0052. ‘-’ si equivale a 0.7 debes aplicar un formato como: 125. Intenta encontrar formatos que sean “fáciles” y eficaces.00]0%. la celda contiene un valor que termina en . Un formato extendido en contabilidad es: Número: Decimales = 2.0E+0 1125100012.##0.45 Output celda 2004-01-17 Enero Sab -45% El ejemplo arriba: Azul/formato porcentaje sin decimales si mayor que 0.26 52.Valor celda 17-ene-04 17-ene-04 17-ene-04 -0.000. Luego el formato dice cuántos decimales se van a mostrar. Formato AAAA-MM-DD MMMM DDD [Azul][>0. #.00 #.012.69.00 #” “??/?? ##0.[Rojo]-[<0. Separador de miles = Sí En vez de presentar un dinero así: 125050000.125.69 Como puedes ver en el primer ejemplo.Unos ejemplos sencillos Empezamos con unos ejemplos para que veas el efecto del formato.00 0000.0E+3 Números Aquí decides la presentación de números (valores).100.00.00. Rojo si menor que 0.##0. .21 52. Hay unos atajos rápidos para formatear celdas.00]0%.

pero al final sale! El Grabador de macros que trae Excel. Una vez que aprendes a leerlo y corregirlo el grabador de macros es una herramienta más. Pero como para escribir macros hay que usar comandos en inglés supongo que muchos lo van a aprovechar. aquí van los primeros códigos Codigo No mostrar el trabajo de la Macro -No se ve lo que va ejecutando- . ánimo que muchas veces parece que no damos pie con bola. soy un simple usuario de Excel. Lamentablemente el libro está en inglés. y que tiene una curiosidad enorme.. alguien que estudio o que ya tiene un manejo avanzado de macros va a decir que es una porquería. Los voy compartiendo y actualizando a medida que voy avanzando. Pero a favor tengo que decir que me ha resultado muy útil para empezar.pdf que está muy bueno. y no solo por prueba-error. y la verdad que las macros le dan un giro muy groso.CTRL + SHIFT + ! = 2 decimales/separador miles CTRL + SHIFT + % = porcentaje CTRL + SHIFT + # = formato fecha Algunos códigos útiles de Macros de Excel + Libro Macros Estoy armando un listadito de códigos muy útiles para usar cuando estás desarrollando una macro. A fines del año pasado empecé a hacer varias macros en el laburo. Hace mucho tiempo que uso Excel. Bueno. y eso que apenas estoy aprendiendo!!! Además subo y comparto un libro en . así que no va a ser útil para todos. que sabe algo de inglés. del palo de la contabilidad y los números. A ver.. y la verdad que ahora quiero hacer todo con macros. y algo de razón tiene. Una aclaración que no está de más.Si alguien anda por un camino parecido al mio. con el cual estoy aprendiendo "formalmente". y que me sigue siendo útil cuando quiero hacer algo que no sé con qué código será.

guarda y cierraDim NombreLibro As String Dim RutaGuardado As String NombreLibro = InputBox(""Guardar como:"" ) & "".SaveAs Filename:=NombreyRuta ActiveWorkbook. Transpose:=False Application. Operation:=xlNone.xlsm"" RutaGuardado = InputBox(""Guardar en la carpeta:"".ScreenUpdating = False No calcular automaticamente -Es igual a configurar en las opciones de Excel "Calcular=Manual"Application.Hidden True Mostrar el trabajo de la Macro -Deshace lo que hicimos con ocultarApplication.Calculation = xlManual Pegar formulas -Es lo mismo a "Pegado especial -> Fórmulas"Selection.PasteSpecial Paste:=xlPasteFormulas.PasteSpecial Paste:=xlPasteValues.Application.CutCopyMode = False Pegar valores -Es lo mismo a "Pegado especial -> Valores"Selection. Operation:=xlNone. ""C:Mis documentos"" ) Dim NombreyRuta As String NombreyRuta = RutaGuardado & NombreLibro ActiveWorkbook.Close False Ocultar varias hojas -Lo mismo que ocultar una. . pero para varias usando un Array- .ScreenUpdating = True Guardar como y cerrar -Aquí va a abrir dos cuadros pidiendo al usuario que ingrese una nombre primero y después una carpeta. Transpose:=False Application. SkipBlanks_ :=False.CutCopyMode = False Ocultar hoja -En este caso oculta Hoja1Worksheets("Hoja1" ). SkipBlanks_ :=False.

cosa que puede variar entre un reporte y otroDim ULTIMAFILA as String ULTIMAFILA = Cells(Rows.Count. En éste post nos proponemos programar una función en VBA. mediante una macro.SelectedSheets.Sheets(Array(""Hoja1"". CopyToRange:=Range(""G1"" _ ). 1). que produzca el redondeo.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"" ). Redondear a cero decimales Comencemos redondeando a cero decimales. Unique:=True Programar una función de redondeo R edondear un número es una tarea común que podemos hacer con la fórmula de Excel REDONDEAR. Así el número 3.14159 (¡me suena este número!) se puede redondear a cero decimales como 3. Y el número 2.Select ActiveWindow.AdvancedFilter Action:=xlFilterCopy.Visible = False Encontrar Ultima fila -Este código es muy bueno porque encuentra la última fila. ""Hoja2"".7182818 (y éste ¿me debería sonar?) se puede redondear a cero decimales como 3. ""Hoja3"" ). .

blogspot.WorksheetFunction.5 Then Redondealo = Int(n) + 1 Else Redondealo = Int(n) End If End Function El primer número visto es pi que se obtiene con la función de Excel =PI() El segundo número visto es e.round(número.Código: Function Redondealo(n As Double) As Double If n >= Int(n) + 0. =Redondealo(PI()) =Redondealo(EXP(1)) Redondear invocando la función de Excel Todas las funciones disponibles en Excel se pueden invocar mediante una macro. La expresión que hemos de utilizar en VBA para invocar a esta función es la siguiente: Application. precisión) . El código requiere que la función a la que llamemos esté escrita en inglés. que es la base de los logaritmos neperianos. También podemos decir que es la exponencial de 1. Para obtener un listado de la funciones en inglés puede consultar el siguiente enlace. En Excel se puede calcular con la siguiente expresión: =EXP(1) Si aplicamos la función definida por el usuario Redondealo obtendremos en ambos casos el valor de 3. http://trucosexcel.html La función REDONDEAR en español equivale a la función ROUND en inglés.com/2008/10/glosario-traduccin-de-funciones.

En esta ocasión vamos a introducir la variable p que recoge la precisión del redondeo. .WorksheetFunction. p As Single) As Double If n * 10 ^ p >= Int(n * 10 ^ p) + 0.Código: Function SuRedondeo(numero. La función se llama MiRedondeo y el código es el siguiente. precision) SuRedondeo = Application.5 Then MiRedondeo = Int(n * 10 ^ p + 1) / (10 ^ p) Else MiRedondeo = Int(n * 10 ^ p) / (10 ^ p) End If End Function Podemos ver el resultado aplicado a Pi y a e.Round(numero. Código: Function MiRedondeo(n As Double. precision) End Function Programemos la función Con la función Redondealo fuimos capaces de redondear a cero decimales.

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 . nxx As Single) As Double cal0 = Int(nnum) cal1 = dec(nnum) cal2 = cal1 * 10 ^ nxx cal3 = Int(cal2) cal4 = cal2 * 10 ^ (nxx .Public Function redn(nnum As Double.

cal8 = cal3 End If redn = cal0 + (cal8 / (10 ^ nxx)) End Function .

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->