Anda di halaman 1dari 13

Option Explicit Sub BarraDeProgreso() Dim R As Integer Dim MT As Double For R = 1 To 180 MT = Timer Do Loop While Timer - MT <

0.05 Application.StatusBar = "Progress: " & R & " de 180: " & _ Format(R / 180, "Percent") & " --- " & "Cumplimiento" DoEvents Next R Application.StatusBar = False End Sub

Texto planoImprimir 1. Option Explicit 2. 3. Public Sub recorrer_rango_seleccionado() 4. ' variable de tipo Range para hacer referencia a las celdas 5. Dim obj_Cell As Range 6. 7. 'Recorrer todas las celdas seleccionadas en el rango actual 8. For Each obj_Cell In Selection.Cells 9. 10. ' muestra el valor 11. With obj_Cell 12. MsgBox .Text, vbInformation, "Col " & .Column & " " & "Fila: " & .Ro w 13. End With 14. Next 15. 16. End Sub

Este otro ejemplo es igual , pero si el valor de la celda es de tipo nmerico, lo formatea con la funcin FormatCurrency, y si el valor es de tipo fecha con la funcin FormatDateTime Cdigo vba
Texto planoImprimir 1. Option Explicit 2. 3. Public Sub Aplicar_formato_vba() 4. ' variable de tipo Range para hacer referencia a las celdas 5. Dim obj_Cell As Range 6. 7. 'Recorrer todas las celdas seleccionadas en el rango actual 8. For Each obj_Cell In Selection.Cells 9. 10. With obj_Cell 11. ' si la celda es un valor numrico ...

12. If IsNumeric(.Text) Then 13. ' aplica formato moneda con 2 decimales 14. .Value = FormatCurrency(CDbl(.Text), 2) 15. 16. ' si la celda es una fecha 17. ElseIf IsDate(.Text) Then 18. ' fecha larga 19. .Value = FormatDateTime(.Text, vbLongDate) 20. End If 21. End With 22. Next 23. End Sub 24. Option Explicit 25. 26. Private Sub Command1_Click() 27. Dim objExcel As Object 28. Dim Columna As Integer 29. 30. ' crear la referencia a excel 31. Set objExcel = CreateObject("Excel.application") 32. 33. With objExcel 34. 35. ' Agregar un Nuevo libro 36. .Workbooks.Add 37. 38. Dim i As Integer 39. 40. ' Agregar los nombres de los meses a la columna Meses 41. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 42. Columna = 1 43. For i = 1 To 12 44. .cells(1, Columna).Formula = "Meses" 45. .cells(i + 1, Columna).Formula = MonthName(i) 46. 47. Next 48. 49. ' agregar costos valores para la columna 2 ( Gastos Productos ) 50. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 51. Columna = 2 52. For i = 1 To 12 53. .cells(1, Columna).Formula = "Gastos Productos" 54. .cells(i + 1, Columna).Formula = CInt(Rnd * 255) 55. 56. Next 57. 58. ' agregar valores a la columna 3 (Gastos impuestos) 59. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 60. Columna = 3 61. For i = 1 To 12 62. .cells(1, Columna).Formula = "Gastos impuestos" 63. .cells(i + 1, Columna).Formula = CInt(Rnd * 150) 64. 65. Next 66. 67. ' agregar valores a la columna 4 ( Otros gastos ) 68. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 69. Columna = 4 70. For i = 1 To 12 71. .cells(1, Columna).Formula = "Otros gastos" 72. .cells(i + 1, Columna).Formula = CInt(Rnd * 50)

73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133.

Next ' Sacar el SubTotal para cada columna ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' .cells(14, 1).Formula = "SubTotales" .cells(14, 2).Formula = "=SUM(B2:B13)" ' SubTotal para la columna 3 .cells(14, 3).Formula = "=SUM(C2:C13)" ' SubTotal para la columna 4 .cells(14, 4).Formula = "=SUM(D2:D13)" ' Total ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' .cells(16, 1).Formula = "Total" .cells(16, 4).Formula = "=SUM(B14:D14)" 'Formato de celdas ( fuente y color de fondo ) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' autoajustar las columnas .Columns("A:A").EntireColumn.AutoFit .Columns("B:B").EntireColumn.AutoFit .Columns("C:C").EntireColumn.AutoFit .Columns("D:D").EntireColumn.AutoFit .Range("A1:D1").Select With .Selection.Font .Name = "Arial" .FontStyle = "Negrita" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False End With With .Selection.Interior .colorindex = 35 End With .Range("A2:D13").Select .Selection.Font.colorindex = 2 With .Selection.Interior .colorindex = 11 End With .Range("A14:D16").Select .Selection.Interior.colorindex = 35 .Range("A14:A16").Select .Selection.Font.FontStyle = "Negrita" End With

134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147.

''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ahcer visible el Excel objExcel.Visible = True ' eliminar la referencia Set objExcel = Nothing End Sub Private Sub Form_Load() Me.Caption = "Uso de Frmula en Excel desde vb" Command1.Caption = "Crear libro" End Sub

388 - Imprimir rango en Excel


<Volver> - Anterior - Siguiente

Contenido
Ejemplo 1 Ejemplo 2 Enlaces relacionados

Ejemplo 1
Ejemplo simple de la propiedad PrintArea y el mtodo PrintOut de Vba , para seleccionar un rango de datos de la hoja activa, y poder imprimirlo

Para el formulario de ejemplo, colocar Form: un control Textbox llamado Text1 para indicar el path del Libro de Excel y un text2 para especificar el rango a imprimir

Nota: no es necesario incluir la referencia a Excel

Cdigo fuente en el formulario


Texto planoImprimir 1. Option Explicit 2. Function Print_Rango(PathLibro As String, Rango As String) 3. On Error GoTo Error_Sub 4. Dim ObjExcel As Object 5. 6. ' nueva referencia a Excel 7. Set ObjExcel = CreateObject("Excel.Application") 8. 9. ' comprueba que se pasaron los parmetros 10. If PathLibro = "" Or Rango = "" Then 11. MsgBox "No se ha especificado el rango o la ruta del Libro", vbCritical 12. Exit Function 13. End If 14. 15. With ObjExcel 16. ' abre el libro 17. .WorkBooks.open PathLibro 18. ' configura el rea de impresin de la hoja activa 19. .ActiveSheet.PageSetup.PrintArea = Rango 20. ' Selecciona el rea y la imprime 21. .Selection.PrintOut Copies:=1, Collate:=True 22. ' cierra el libro 23. .WorkBooks(1).Close (False) 24. End With 25. ' descarga la referencia y cierra el Excel 26. Call DescargarObjetos(ObjExcel) 27. Exit Function 28. ' error

29. Error_Sub: 30. If Err.Number > 0 Then 31. MsgBox (Err.Description) 32. On Error GoTo 0 33. Call DescargarObjetos(ObjExcel) ' descarga 34. End If 35. End Function 36. 37. 38. Sub DescargarObjetos(ObjExcel As Object) 39. On Local Error Resume Next 40. ' cierra el Excel 41. ObjExcel.Quit 42. ' elimina la referencia 43. Set ObjExcel = Nothing 44. End Sub 45. 46. Private Sub Command1_Click() 47. Call Print_Rango(Text1, Text2) 48. End Sub 49. 50. Private Sub Form_Load() 51. Command1.Caption = "imprimir rango" 52. Text1.Text = "c:\Libro1.xls" 53. Text2.Text = "$B$4:$C$15" 54. End Sub

Ejemplo 2
Otra forma para seleccionar el rango y mandarlo a imprimir usando la propiedad Select del objeto Range

Range("B4:C15").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1

Esto otro , imprime el rango seleccionado, en este caso B4:C15, con las lneas divisorias, con orientacin vertical para la hoja, tamao de la hoja A4, con los ttulos de las filas y columnas, y con calidad de impresin de 300 ppp y en color
Texto planoImprimir 1. 2. 3. 4. 5. 6. Option Explicit Function Print_Rango(PathLibro As String, Rango As String) On Error GoTo Error_Sub Dim ObjExcel As Object

7. ' nueva referencia a Excel 8. Set ObjExcel = CreateObject("Excel.Application") 9. 10. ' comprueba que se pasaron los parmetros 11. If PathLibro = "" Or Rango = "" Then 12. MsgBox "No se ha especificado el rango o la ruta del Libro", vbCritical 13. Exit Function 14. End If 15. 16. With ObjExcel 17. ' abre el libro 18. .WorkBooks.open PathLibro 19. ' selecciona el rango 20. .Range(Rango).Select 21. With .ActiveSheet.PageSetup 22. .PrintTitleRows = "" 23. .PrintTitleColumns = "" 24. End With 25. 26. .ActiveSheet.PageSetup.PrintArea = "" 27. 28. With .ActiveSheet.PageSetup 29. .LeftHeader = "" 30. .CenterHeader = "" 31. .RightHeader = "" 32. .LeftFooter = "" 33. .CenterFooter = "" 34. .RightFooter = "" 35. .LeftMargin = .Application.InchesToPoints(0) 'mrgenes 36. .RightMargin = .Application.InchesToPoints(0) 37. .TopMargin = .Application.InchesToPoints(0) 38. .BottomMargin = .Application.InchesToPoints(0) 39. .HeaderMargin = .Application.InchesToPoints(0) 40. .FooterMargin = .Application.InchesToPoints(0) 41. .PrintHeadings = True 42. .PrintGridlines = True 'Incluye las lineas de divisin 43. .PrintQuality = 300 ' calidad de la impresin 44. .CenterHorizontally = False 45. .CenterVertically = False 46. .Orientation = 1 ' horientacin vertical 47. .PaperSize = 9 ' Hoja A4 48. .BlackAndWhite = False ' Desativa la Impresin en blanco y negro 49. .Zoom = 100 50. End With 51. ' imprime 52. .Selection.PrintOut Copies:=1, Collate:=True 53. 54. ' cierra este libro 55. .WorkBooks(1).Close (False) 56. End With 57. 58. ' Elimina la referencia y cierra el Excel 59. Call DescargarObjetos(ObjExcel) 60. 61. Exit Function 62. 63. ' error 64. Error_Sub: 65. If Err.Number > 0 Then 66. MsgBox (Err.Description) 67. On Error GoTo 0

68. Call DescargarObjetos(ObjExcel) ' descarga 69. End If 70. End Function 71. 72. 73. Sub DescargarObjetos(ObjExcel As Object) 74. On Local Error Resume Next 75. ' cierra el Excel 76. ObjExcel.Quit 77. ' detruye la referencia 78. Set ObjExcel = Nothing 79. End Sub 80. 81. Private Sub Command1_Click() 82. Call Print_Rango(Text1, Text2) 83. End Sub 84. 85. Private Sub Form_Load() 86. Command1.Caption = "imprimir rango" 87. Text1.Text = "c:\Libro1.xls" 88. Text2.Text = "B4:C15" 89. End Sub

370 - Buscar y reemplazar en Excel desde visual basic


<Volver> - Anterior - Siguiente

Formulario de ejemplo que usa el mtodo Replace de vba para poder buscar datos en celdas en una hoja indicada y poder reemplazar los datos

Formulario

El ejemplo tiene una rutina llamada Reemplazar con los siguientes parmetros :
Texto planoImprimir 1. Call Reemplazar("Ruta del Libro", _ 2. "Nombre de la hoja", _ 3. "Texto a Buscar", _ 4. "Texto a reemplazar", _ 5. "Coincidir mayusculas y minusculas")

El ltimo parmetro es un valor de tipo Boolean que indica si se tomar en cuanta las maysculas y minsculas en la bsqueda. Por defecto est en False, y no se tiene en cuenta . Tambin, si se quiere que al buscar, solo busque la cadena completa en la celda, hay que modificar el valor LookAt, del mtodo Replace. Si el mismo tiene el valor 1, buscar la cadena completa en las celdas, si tiene el valor 2, buscar la cadena parcial. Nota: Por defecto en el ejemplo, el valor de LookAt est en 1, por lo tanto reemplazar solo los datos completos en las celdas

Controles
Text1 para indicar la ruta del libro de Excel Text2 para indicar el Sheet Text3 para el dato que se va a buscar Text4 para el texto de reemplazo Un CommandButton

Cdigo fuente en el formulario Texto planoImprimir 1. 2. 3. 4. 5. 6. 7. 8. 9. Option Explicit ' botn que ejecuta la rutina para buscar y reemplzar en la hoja '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Command1_Click() Reemplazar Text1, Text2, Text3, Text4, False End Sub

10. ' Rutina que busca en la hoja y reemplaza todo 11. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 12. Sub Reemplazar(PathXls As String, _ 13. Hoja As String, _ 14. TextoFind As String, _ 15. TextoReplace As String, _ 16. Optional Match_Case As Boolean) 17. 18. On Error GoTo Error_Sub 19. 20. Dim AppXls As Object 21. 22. Dim ret As Boolean 23. 24. ' verifica si existe el path del archivo xls 25. If Len(Dir(PathXls)) = 0 Then 26. MsgBox "No se ha encontrado la ruta el Libro", vbCritical 27. Exit Sub 28. End If 29. 30. If Hoja = vbNullString Or _ 31. TextoFind = vbNullString Or _ 32. TextoReplace = vbNullString Then 33. MsgBox "No se indicaron algunos parmetros", vbCritical 34. Exit Sub 35. End If 36. 37. Me.MousePointer = vbHourglass 38. 39. ' Nuevo objeto de Excel Application 40. Set AppXls = CreateObject("Excel.Application") 41. 42. ' abre el libro 43. AppXls.Workbooks.Open PathXls 44. 45. ' opcional ( excel no visible ) 46. AppXls.Visible = False 47. 48. ' Ejecuta el mtodo Replace, indicando el Sheet, y las _ 49. opciones de bsqueda y reemplazo 50. ret = AppXls.ActiveWorkbook.Sheets(Hoja).Application.Cells.Replace(What:=Tex toFind, _ 51. Replacement:=TextoReplace, _ 52. LookAt:=1, _ 53. SearchOrder:=1, _ 54. MatchCase:=Match_Case) 55. 56. AppXls.ActiveWorkbook.Save 57. 58. ' cierra y elimina la referencia de Excel 59. AppXls.quit 60. Set AppXls = Nothing 61. 62. Me.MousePointer = 0 63. MsgBox "Listo", vbInformation 64. 65. 66. Exit Sub 67. 68. ' rutina de error 69. Error_Sub:

70. MsgBox Err.Description 71. On Error Resume Next 72. AppXls.quit 73. Set AppXls = Nothing 74. Me.MousePointer = 0 75. End Sub 76. 77. 78. Private Sub Form_Load() 79. Command1.Caption = "Reemplazar todo" 80. Me.Caption = "Buscar y reemplzar en Excel" 81. Text1.Text = "c:\libro1.xls" 82. Text2 = "Hoja1" 83. Text3.Text = "texto a buscar" 84. Text4.Text = "Texto a reemplzar" 85. End Sub

Rutina que recorre las celdas de una columna determinada, para buscar y eliminar los valores repetidos

El ejemplo tiene una rutina a la cual se le pasa como argumentos el path del libro, el nmero de columna a verificar, y la fila inicial y la fila final en la que buscar los valores duplicados

por ejemplo esto recorre desde la fila 10 hasta la fila 20 en la columna 1

Call Eliminar_Duplicados_PorColumna("c:\libro1.xls", 1, 10, 20)

Para el ejemplo colocar

un control commandbutton la referencia Excel y especificar la ruta del archivo xls

Cdigo fuente en el formulario

Texto planoImprimir 1. Option Explicit 2. 3. 4. Private Sub Chequear_Valores(sElementos() As Variant) 5. Dim TempArray() As String 6. Dim x As Integer, x2 As Integer, y As Integer 7. Dim z As Integer, Elemento As Variant 8. Dim ArrFinal() As Variant 9. Dim nRedim As Long 10. 11. Dim i As Integer 12. For i = LBound(sElementos) To UBound(sElementos) 13. ReDim Preserve TempArray(i) 14. TempArray(i) = sElementos(i) 15. Next 16. For x = 0 To UBound(sElementos) 17. z = 0 18. For y = 0 To UBound(sElementos) 19. If sElementos(x) = TempArray(z) And y <> x Then 20. sElementos(y) = "" 21. nRedim = nRedim + 1 22. End If 23. z = z + 1 24. Next y 25. Next x 26. 27. i = 0 28. ReDim ArrFinal(0) 29. 30. For Each Elemento In sElementos 31. If Elemento <> "" Then 32. ' agrega los elementos 33. ArrFinal(i) = Elemento 34. i = i + 1 35. ReDim Preserve ArrFinal(i) 36. End If 37. Next 38. ' retorna la lista 39. sElementos = ArrFinal 40. 41. End Sub 42. 43. Private Sub Eliminar_Duplicados_PorColumna(PathXLS As String, _ 44. Columna As Long, _ 45. DesdeFila As Long, _ 46. HastaFila) 47. 48. Dim objExcel As Excel.Application 49. Dim Elementos() As Variant 50. 51. Set objExcel = New Excel.Application 52. ' abre el xls 53. objExcel.Workbooks.Open (PathXLS) 54. 55. ReDim Elementos(0) 56. Me.MousePointer = vbHourglass 57. With objExcel.ActiveWorkbook.Sheets(1) 58. 59. Dim fila As Long

60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.

Dim n As Long n = 1 ' recorre desde el rango de fila For fila = DesdeFila To HastaFila ' almacena los datos a verificar Elementos(n - 1) = .Application.Cells(fila, Columna) ' elimina el valor de la celda .Application.Cells(fila, Columna) = "" ReDim Preserve Elementos(UBound(Elementos) + 1) n = n + 1 Next ' llama al rutina para verificar los valores repetidos Chequear_Valores Elementos Dim fActual As Long n = 0 ' recorre la lista de los elementos para asignarlos a las celdas For n = 0 To UBound(Elementos) - 1 .Application.Cells((DesdeFila + fActual), Columna).Value = Elementos

(n) 79. fActual = fActual + 1 80. Next 81. End With 82. ' guarda los cambios del libro 83. objExcel.ActiveWorkbook.Save 84. objExcel.Quit 85. Set objExcel = Nothing 86. Me.MousePointer = vbNormal 87. 88. End Sub 89. 90. Private Sub Command1_Click() 91. 92. 'pasa el libro, el nmero de la columna _ 93. a verificar, la fila inicial, y la fina final 94. Call Eliminar_Duplicados_PorColumna("c:\libro1.xls", 1, 5, 250) 95. 96. End Sub

Anda mungkin juga menyukai