K VBA para proteger hojas de un libro Excel 0diggsdigg 0 Share Con la ayuda de un truco de VBA de Excel puedes permitir que el usuario solo pueda abrir por ejemplo la primera hoja (sin palabra de paso) – pero no las otras (cuales requieren palabra de paso). Esta función no está integrada en Excel (sorprendentemente), por eso hay que recurrir a VBA.
Eventos empleados para la protección Para esto vamos a utilizar el evento Workbook_SheetActivate, un evento que salta cada vez que alguna hoja se active. Es decir, el evento se activará cuando el usuario hace click sobre una etiqueta de una hoja. Si la hoja forma parte de las restringidas, Excel pedirá palabra de paso. Al introducir una palabra de paso erronea, se queda en la hoja anterior.
Grado de seguridad de la macro para proteger hojas Cualquier persona puede entrar al código VBA para ver la palabra de paso. Por eso debes proteger el codigo (VBA editor – Click derecho sobre EsteLibro – Propiedades). Este método no da 100% de seguridad. Si activamos la protección de los módulos VBA tenemos bastante seguridad, pero hay que tener en cuenta que existen varios programas comerciales para resolver el tema de palabras de paso de Excel.
Los procedimientos EsteLibro‘ del editor VBA ( Herramientas – Macro – Pon este código en el contenedor ‘ EsteLibro Editor VBA).
Luego tienes que poner que hojas/palabra de paso (ver Preparar ‘Preparar modelo‘ del código).
Código VBA para proteger hojas Excel Dim strStartHoja As String Dim strSegundaHoja As String Private Sub Workbook_SheetActivate( ByVal Sh As Object Object) ) Dim z As Integer Dim i As Integer Dim x As Boolean Dim varHoja As Variant Dim varPaso As Variant Dim varInput As Variant 'preparar modelo [admin. input] varHoja = Array("Sheet2" Array( "Sheet2", , "Sheet3" "Sheet3") ) 'las hojas a proteger... varPaso = "gofio" 'palabra de paso... [letras/números] 'desconectar otros Events (evitar un tipo de bucle) Application.EnableEvents = False
'comprobar hojas strSegundaHoja = Sh.Name For i = LBound LBound(varHoja) (varHoja) To UBound UBound(varHoja) (varHoja) If varHoja(i) = strSegundaHoja Then x = True Next i If x = False Then GoTo 99 'ocultar la hoja temporalmente z = ActiveWindow.Index Windows(z).Visible = False 'comparar palabra de paso varInput = InputBox("Palabra InputBox( "Palabra de paso:") paso:" ) If varInput <> varPaso Then Sheets(strStartHoja). Select 'volver a mostrar la hoja Windows(z).Visible = True 99: 'conectar Events Application.EnableEvents = True End Sub '************************************************* Private Sub Workbook_SheetDeactivate( ByVal Sh As Object Object) ) 'recordar hoja inicial strStartHoja = Sh.Name End Sub
'comprobar hojas strSegundaHoja = Sh.Name For i = LBound LBound(varHoja) (varHoja) To UBound UBound(varHoja) (varHoja) If varHoja(i) = strSegundaHoja Then x = True Next i If x = False Then GoTo 99 'ocultar la hoja temporalmente z = ActiveWindow.Index Windows(z).Visible = False 'comparar palabra de paso varInput = InputBox("Palabra InputBox( "Palabra de paso:") paso:" ) If varInput <> varPaso Then Sheets(strStartHoja). Select 'volver a mostrar la hoja Windows(z).Visible = True 99: 'conectar Events Application.EnableEvents = True End Sub '************************************************* Private Sub Workbook_SheetDeactivate( ByVal Sh As Object Object) ) 'recordar hoja inicial strStartHoja = Sh.Name End Sub
Objecto Application de Excel VBA El objeto Application de VBA nos da información del usuario/máquina. En este artículo presentaremos unas aplicaciones del un objeto muy básico de Excel/VBA: Application. Este representa todo el conjunto del programa Excel y sus libros de trabajo.
Unos ejemplos de propiedades del objeto Application El objeto Application tiene muchas propiedades. Hay unas que pueden ser interesantes para el programador de macros VBA de Excel. Objeto Application.
Propiedad UserName OrganizationName OperatingSystem Version ProductCode StandardFont StandardFontSize DecimalSeparator ActivePrinter DefaultFilePath UserLibraryPath
Devuelve Nombre del usuario Nombre de la empresa Sistema operativo Versión de MS Excel Código de MS Excel Fuente por defecto Tamaño fuente por defecto Carácter separador de miles Impresora por defecto Ruta de acceso por defecto Ruta a carpeta Add-ins
Sobre la versión de MS Excel arriba: NºVersión 12 Excel Excel 2007 2007 11 Excel Excel 2003 2003 10 Excel 2002 2002 (“XP”) (“XP”) 9 Excel 20 2000 8 Excel 97 7 Excel 95
Algunos ejemplos prácticos del objeto Application de Excel Presentar la impresora activa del usuario
Para presentar la impresora activa del usuario, en una caja de diálogo, pondríamos Sub Devolver ImpresoraActiva() Dim strImpresoraActiva as String strImpresoraActiva = Application.ActivePrinter Msgbox strImpresoraActiva End sub
o todavía más fácil: Sub Devolver ImpresoraActiva() Msgbox Application.ActivePrinter End sub
Crear lista extensa de información sobre la máquina del usuario
Abajo te presentamos una macro para presentar varios datos del usuario/maquina. Sub Application_Data() 'dimensiones Dim strDataArray(10) As String Dim i, x As Integer 'devolver datos del objeto 'Application' strDataArray(0) = Application.UserName strDataArray(1) = Application.OrganizationName strDataArray(2) = Application.OperatingSystem strDataArray(3) = Application.Version strDataArray(4) = Application.ProductCode strDataArray(5) = Application.StandardFont strDataArray(6) = Application.StandardFontSize strDataArray(7) = Application.DecimalSeparator strDataArray(8) = Application.ActivePrinter strDataArray(9) = Application.DefaultFilePath strDataArray(10) = Application.UserLibraryPath 'presentar x = 0 For i = 3 Cells(i, x = x + Next i
los datos en celdas D3... To 13 4) = strDataArray(x) 1
End Sub Sub SuprimirDatosEnceldas() 'suprimir datos antiguos Range(Cells(3, 4), Cells(13, 4)).ClearContents End Sub
Messagebox y Excel VBA Las messagebox son muy útiles (y fáciles de usar), y crea una interfaz entre el usuario y el programa. Sirven para •
Mostrar información al usuario
•
Recibir información del usuario
•
Devolver información del usuario
Construcción sintáctica de la messagebox Msgbox "Mensaje", Botones/íconos, "Título"
o en el caso de devolver información Respuesta = Msgbox("Mensaje", Botones/íconos, "Título")
Nota las paréntesis en la segunda construcción.
Mensaje Cualquier tipo de texto. Para crear un salto de línea empleamos el carácter vbCrLf . Actualización terminada: " & vbCrLf & "- Importación de datos de venta.
Botones Si quieres puedes añadir cualquier de estos cuatro botones (si no pones nada Excel te pondrá vbOkOnly por defecto). vbOkOnly vbOkCancel vbYesNoCancel vbAbortRetryIgnore
Iconos Puedes elegir entre los siguientes. vbCritical vbQuestion vbExclamation vbInformation
Título Cualquier texto.
Devolver información Si quieres que el programa utilice la respuesta del usuario, estas son las cifras que te devuelve. Ok = 1 Cancel = 2 Abort = 3 Retry = 4 Ignore = 5 Yes = 6 No = 7
Ejemplos Te ponemos unos ejemplos módelo para que te vayas acostumbrando a las diferentes messagebox. Sub MessageBox() msgbox "Actualización terminada:" , _
vbOKOnly, "Información" End Sub
Sub MessageBox() msgbox "¿Quieres seguir?", vbYesNo, "Información importante" End Sub
Sub MessageBox() Dim intRespuesta As Integer intRespuesta = MsgBox( "¿Quieres seguir?", vbQuestion + vbYesNo, _ Información importante") If intRespuesta = 6 Then MsgBox"Seguimos" Else MsgBox"Terminamos" End If End Sub
Sub MessageBox() msgbox "Actualización terminada:" & _ vbCrLf & vbCrLf & _ "- Importación de datos de venta." & vbCrLf & _ "- Cálculos de impuestos." & vbCrLf & _ "- Venta por proveedor." & vbCrLf _ , vbOKOnly, "Actualización terminada." End Sub
Sub MessageBox() msgbox "Actualización terminada:" & vbCrLf & vbCrLf & _ "- Importación de datos de venta." & vbCrLf & _ "- Cálculos de impuestos." & vbCrLf & _ "- Venta por proveedor." & vbCrLf _ , vbExclamation + vbOKOnly, _ "Actualización terminada." End Sub
Abrir otro libro de Excel utilizando VBA 0diggsdigg 0 Share
Este código sirve para abrir otro libro Excel a través del diálogo ‘Abrir’. Allí el usuario elige el libro a abrir. Si el usuario pulsa Cancelar, el diálogo se cierra.
Este procedimiento en sí no sirve para mucho (porque luego se debe hacer algo con este libro, verdad), pero al final será un procedimiento básico en muchos de tus futuros programas de Excel VBA. Sub Abrir_archivo() Dim strRutaArchivo As String 'un poco de información MsgBox ("Abra el archivo Excel." ) 'elegir archivo strRutaArchivo = _ Application.GetOpenFilename( "Libro de Microsoft Excel (*.xls), *.xls" ) 'abrir archivo On Error GoTo 9 Workbooks.Open Filename:=strRutaArchivo 9: End Sub
•
Inicio
•
Sitemap
•
•
Inicio
•
VBA-Macros
•
VBA-Ejemplos
•
Atajos
•
General
•
Formatos
•
Fórmulas
•
SQL
•
Inicio » VBA-Ejemplos » Explorador de informes
Explorador de informes 0diggsdigg
0 Share José Skraviuk | 08/09/2006
Resumen de este ejemplo de “Explorador de informes” Este ejemplo nos nuestra, de cómo armar un explorador de informes en Excel, manejándonos desde un Panel Principal. Esto nos permite dar una mejor estética a cualquier aplicación desarrollada en Excel.
La importancia del formato Excel de presentación Como hemos ido comentando en otros ejemplos de Excel y VBA de este sitio, la presentación de los libros Excel es algo muy importante, sobre todo si trata de informes para distribuir.
Captura de pantalla de esta plantilla Excel
I Sub Auto_Open() Sheets("Hoja2").Visible = False Sheets("Hoja3").Visible = False Sheets("Hoja4").Visible = False End Sub Sub AbrirH1() Sheets("Hoja2").Visible = True Sheets("Hoja2").Activate Sheets("Hoja2").Range("A1").Select End Sub Sub Volver() Sheets("Panel").Activate Sheets("panel").Range("a1").Select End Sub
Sub AbrirH2() Sheets("Hoja3").Visible = True Sheets("Hoja3").Activate Sheets("Hoja3").Range("A1").Select End Sub Sub AbrirH3() Sheets("Hoja3").Visible = True Sheets("Hoja3").Activate Sheets("Hoja3").Range("A1").Select End Sub Sub Botón6_AlHacerClic() 'Cierra el libro activo, antes guarda todos los cambios... ActiveWorkbook.Save ActiveWorkbook.Close End Sub
Inicio » VBA-Ejemplos » Crear una barra de progreso en Excel
Crear una barra de progreso en Excel 0diggsdigg 0 Share José Skraviuk | 13/12/2005 Un ejemplo de una macro VBA de como crear una barra de progreso (progress bar) para incluir en nuestras aplicaciones y plantillas Excel.
Crear una barra de progreso en Excel VBA. De esta forma podemos añadir un medidor de progreso gráfico a la barra de estado de Excel.
El código 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
Resumen Se usa el evento change para simular una casilla de verificación, en la columna A, y luego combinamos con una suma condicional, que que solamente SUMA los meses que se encuentran tildados.
Un ejemplo real Al hacer clic sobre la columna A, tilda la celda.
Luego se puede aplicar una fórmula matricial y condicional para sumar los meses tildados. {=SUMA(SI($A$2:$A$13<>“”;$C$2:$C$13;0))}
El código El código debe escribirse en la misma hoja Excel, ver imagen.
'Jose Skraviuk 'ayudaexcel {at}
yahoo.com.ar
Private Sub Worksheet_SelectionChange( ByVal Target As Excel.Range) Dim aOffset As Integer On Error GoTo err_handler Application.EnableEvents = False If Not Application.Intersect _ (Target, Columns("A")) Is Nothing Then If Target.Column = 4 Then aOffset = 3 Else aOffset = 2 End If If IsEmpty(Target.Value) Then With Target .Font.Name = "Wingdings" .Value = Chr(252) End With Target.Offset(0, iOffset). Select Else Target.Value = "" Target.Offset(0, iOffset). Select End If End If err_handler: Application.EnableEvents = True End Sub
Comentarios Para evitar confusiones (sobre todo si estamos preparando una plantilla para otras personas), podríamos optar por la fórmula SUMAPRODUCTO, que además permite aplicar varias condiciones de una manera fácil. =SUMAPRODUCTO((A2:A13<>“”)*C2:C13)
Excel VBA – Crear un sistema de ayuda
0diggsdigg 0 Share José Skraviuk | 12/11/2005
Resumen Un bonito ejemplo de como usar el evento Change, para proporcionar ayuda acerca de la celda seleccionada. Este truco Excel permite proporcionar ayuda en línea al usuario, acera de la celda seleccionada. Esto puede resultar útil a la hora de construir formularios (no los de VBA, sino los formularios a rellenar de toda la vida…) en una hoja Excel.
El código 'Jose Skraviuk '
[email protected] Private Sub Worksheet_SelectionChange( ByVal Target As Excel.Range) If ActiveCell = Range("B5") Then Range("ayuda") = "Ud ha seleccionado la OPCION1, permite ver el ejemplo nº1" Else Range("ayuda") = "" If ActiveCell = Range("D5") Then Range("ayuda") = "Ud ha seleccionado la OPCION2, permite ver el ejemplo nº2" Else Range("ayuda") = "" End If End If End Sub
El temporizador de Excel VBA 0diggsdigg 0 Share Si queremos que una instrucción se haga automáticamente, a intervalos fijos, podemos recurrir al método Application.OnTime.
Procedimientos Vamos a necesitar tres sencillas macros.
1. StartTemporizador – Iniciar el temporizador 2. Tu_Sub – Cualquier instrucción 3. StopTemporizador – Cerrar el temporizador Luego hacen falta dos botones en la hoja, uno para la macro StartTemporizador , y otro para la StopTemporizador .
Declaraciones Por encima de las macros descritas abajo, hacemos las declaraciones. Public datHora As Date Public Const conIntervalo = 60 'un minuto Public Const conRunMacro = "Tu_Sub" 'tu proced.
Iniciar temporizador La primera macro inicia el temporizador. Sub StartTemporizador() datHora = Now + TimeSerial(0, 0, conIntervalo) 'iniciar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=True End Sub
Tu procedimiento Aquí pones lo que quieres que Excel haga periodicamente. Sub Tu_Sub() MsgBox datHora 'o cualquier instrucción 'reiniciar el temporizador StartTemporizador End Sub
Cerrar temporizador El temporizador hay que cerrarlo ‘manualmente’. Sub StopTemporizador() On Error Resume Next 'desactivar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=False End Sub
Todo el código Ahora, el módulo de las macros descritas arriba debe tener el siguiente aspecto. Public datHora As Date
Public Const conIntervalo = 60 'un minuto Public Const conRunMacro = "Tu_Sub" 'tu proced. Sub StartTemporizador() datHora = Now + TimeSerial(0, 0, conIntervalo) 'iniciar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=True End Sub Sub Tu_Sub() MsgBox datHora 'o cualquier instrucción 'reiniciar el temporizador StartTemporizador End Sub Sub StopTemporizador() On Error Resume Next 'desactivar el temporizador Application.OnTime _ Earliesttime:=datHora, _ Procedure:=conRunMacro, _ Schedule:=False End SuB
Copiar módulo VBA a otro libro Excel 0diggsdigg 0 Share Método para guardar un módulo VBA/importarlo a otro libro Excel. Al exportar hojas a un libro nuevo (el primer ejemplo de código), los módulos VBA no se copiarán, sino el libro nuevo se quedará sin código VBA. Es decir, este ejemplo no vale para copiar módulos VBA.
'copiar hojas a un libro nuevo Sheets(Array("Hoja1", "Hoja2", "Hoja3")).Copy
Para exportar un módulo VBA, primero hay que guardarlo como un archivo de texto, y luego importarlo desde el libro nuevo.
Objetos del editor VBA El editor VBA tiene 2 objetos básicos: VBProject » Todos los módulos y componentes/referencias VBA del libro VBComponent » Un módulo (o formulario) específico del VBProject Para utilizarlos debes marcar la siguiente referencia del ed itor VBA: Herramientas – Referencias – Microsoft Visual Basic for Applications Extensibility x.x.
Exportar módulo VBA 'exportar módulo VBA Dim vbaProyecto As VBIDE.VBProject Dim vbaModulo As VBIDE.VBComponent Public strRuta as String Set vbaProyecto = ThisWorkbook.VBProject Set vbaModulo = vbaProyecto.VBComponents( "Module1") strRuta = ThisWorkbook.Path & "\modulo1_export.txt" 'o strRuta = "c:\modulo1_export.txt" vbaModulo.Export strRuta
Importar módulo VBA 'importar módulo VBA Dim vbaProyecto As VBIDE.VBProject Dim vbaModulo As VBIDE.VBComponent Public strRuta as String strRuta = ThisWorkbook.Path & "\modulo1_export.txt" 'o strRuta = "c:\modulo1_export.txt" Set vbaProyecto = ActiveWorkbook.VBProject vbaProyecto.VBComponents.Import (strRuta) 'suprimir el archivo plano Kill strRuta
Calcular los Dígitos de control desde Excel VBA 0diggsdigg
0 Share En este ejemplo presentamos un ejemplo de marcado VBA para calcular los dígitos de control de una cuenta bancaria española.
¿Qué son los dígitos de control? Las cuentas bancarias españolas consisten de 4 grupos de dígitos. Los dígitos de control verifican los códigos de Entidad y Oficina (el primer dígito), y el Número de Cuenta (el segundo dígito). El algoritmo para calcular los dígitos de control se define en Norma bancaria 34 de AEB (Asociación Española de Banca).
Tarea Queremos un programa que nos calcule los dígitos de control de una cuenta.
Un ejemplo de cuenta 0123 – 4567 – xx – 0123456789 Entidad Oficina Dígitos de control Cuenta
0123 4567 xx 0123456789
En el ejemplo arriba, los dígitos de control serían 81.
Empezamos Abrimos un libro nuevo. Formateamos las celdas B3:E3 a TEXTO.
Crear el módulo Entra a Herramientas – Macros – Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como “ProyectoVBA (Tu libro). Marca ese proyecto. Insertar – Módulo. Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código. Herramientas – Referencias. Marca Microsoft ActiveX DataObjects x.x Library. Ahora cierras el editor VBA, vuelves a Excel. Guardamos el libro.
El código Sub DC_check()
Dim Bank As String Dim Office As String Dim DC As String Dim Account As String Dim BankOffice As String Dim Valor1, Valor2, Valor3, Valor4, Valor5 DIm Valor6, Valor7, Valor8, Valor9, Valor10 Dim TestValue1 As Integer Dim TestValue2 As Integer Dim TestValueDC As Integer '--------------------------------------------------'recoger el número de cuenta Bank = Range("B3").Text Office = Range("C3").Text DC = Range("D3").Text Account = Range("E3").Text BankOffice = Bank & Office '--------------------------------------------------'evaluar DC (1) Valor1 = (Mid(BankOffice, 1, 1) * 4) Valor2 = (Mid(BankOffice, 2, 1) * 8) Valor3 = (Mid(BankOffice, 3, 1) * 5) Valor4 = (Mid(BankOffice, 4, 1) * 10) Valor5 = (Mid(BankOffice, 5, 1) * 9) Valor6 = (Mid(BankOffice, 6, 1) * 7) Valor7 = (Mid(BankOffice, 7, 1) * 3) Valor8 = (Mid(BankOffice, 8, 1) * 6) TestValue1 = Valor1 + Valor2 + Valor3 + Valor4 + _ Valor5 + Valor6 + Valor7 + Valor8 TestValue1 = (TestValue1 Mod 11) TestValue1 = 11 - TestValue1 If TestValue1 = 10 Then TestValue1 = 1 If TestValue1 = 11 Then TestValue1 = 0 '--------------------------------------------------'evaluar DC (2) Valor1 = (Mid(Account, 1, 1) * 1) Valor2 = (Mid(Account, 2, 1) * 2) Valor3 = (Mid(Account, 3, 1) * 4) Valor4 = (Mid(Account, 4, 1) * 8) Valor5 = (Mid(Account, 5, 1) * 5) Valor6 = (Mid(Account, 6, 1) * 10) Valor7 = (Mid(Account, 7, 1) * 9) Valor8 = (Mid(Account, 8, 1) * 7) Valor9 = (Mid(Account, 9, 1) * 3) Valor10 = (Mid(Account, 10, 1) * 6) TestValue2 = Valor1 + Valor2 + Valor3 + Valor4 + Valor5 + _ Valor6 + Valor7 + Valor8 + Valor9 + Valor10 TestValue2 = (TestValue2 Mod 11) TestValue2 = 11 - TestValue2 If TestValue2 = 10 Then TestValue2 = 1
If TestValue2 = 11 Then TestValue2 = 0 '--------------------------------------------------'reconstituir las dos cifras del DC TestValueDC = TestValue1 & TestValue2 'evaluar DC completo If TestValueDC = DC Then Test = True MsgBox "Correcto." Else Test = False MsgBox "DC no corresponde a esta cuenta." & vbCrLf & _ "[en este caso DC sería " & TestValueDC & ".]", vbOKOnly, vbInformation End If End Sub
Buscar fragmento de texto en una lista 0diggsdigg 0 Share La función INSTR nos permite buscar un fragmento de texto en una lista de cadenas de texto. Nos devuelve la posición dentro de la cadena. Esta cifra es clave: 0 = no coincide, >0 = sí que coincide. En este ejemplo buscaremos en una lista de apellidos. En el ejemplo abajo, “Aban” nos devuelve dos apellidos. Otro ejemplo sería ‘queiro”, c ual nos devolvería Abanquiero.
Preparamos la hoja •
• •
En celdas C5:C12 tenemos la lista en que buscar (celdas D5:D12 también pertenecen a la matriz. En celda G2 introducimos el criterio. En celdas G5:H5 el programa pondrá la lista “filtrada”, allí no tienes que introducir nada.
Crear el módulo Entra a Herramientas – Macros – Editor VBA. A la izquierda ves (si no lo ves CTRL+R) algo como “ProyectoVBA (Tu libro). Marca ese proyecto. Insertar – Módulo. Doble click en el módulo nuevo, y a la derecha sale un espacio blanco, es para el código.
Ejecutar macro Para ejecutar esta macro entras a Herramientas – Macros. Allí encontrarás la macro “Buscar_Texto_En_Lista()”. Marca esta, y “Ejecutar“.
Código Sub Buscar_Texto_En_Lista() 'dimensiones Dim lngUltimaFila As Long Dim strObjetoBuscar As String Dim lngResultado As Long Dim lngColumna As Long, lngFila As Long Dim lngPegarColumna As Long, lngPegarFila As Long Dim x As Integer, n As Integer 'quitar resultados anteriores Range("G5:H4000").ClearContents 'columna + fila donde empezar/terminar búsqueda lngColumna = 2 lngFila = 5 lngUltimaFila = Columns(lngColumna).Range( "A65536").End(xlUp).Row 'columna + fila donde empezar a pegar resultados lngPegarColumna = 6 lngPegarFila = 5 'objeto a buscar strObjetoBuscar = Range( "G2").Text If strObjetoBuscar = "" Then GoTo 99 'minúsculas strObjetoBuscar = LCase(strObjetoBuscar) 'bucle: realizar búsqueda For n = lngFila To lngUltimaFila 'evaluación lngResultado = InStr(1, Cells(n, 3),strObjetoBuscar, vbTextCompare) 'copiar/pegar If lngResultado > 0 Then Range(Cells(n, 2), Cells(n, 4)).Copy Range( _ Cells(lngPegarFila, lngPegarColumna), _ Cells(lngPegarFila, lngPegarColumna + 2)) _ .Select ActiveSheet.Paste lngPegarFila = lngPegarFila + 1
End If Next n 'aparcar Application.CutCopyMode = False Range("G2").Select 99: End Sub
Sumar rangos variables con VBA Excel 0diggsdigg 0 Share Sumar un rango en Excel es fácil. Sumar un rango expresado por una variable en VBA es un poco más complicado (pero sigue siendo fácil). No siempre se sabe de antemano que celdas formarán parte del rango a sumar. Entonces tenemos que expresar el rango de forma variable. En Excel es fácil sumar este rango mediante una sencilla fórmula. Pero VBA no contiene ninguna función igual. Entonces hay que hacer que VBA utilice las funciones de Excel.
Utilizar funciones Excel en VBA Tenemos un rango varSuma, el rango a sumar. Para sumar las celdas de este rango tenemos que llamar a la función SUM de Excel. Application.WorksheetFunction.Sum(varSuma)
De esta manera puedes aplicar cualquier fórmula de Excel en VBA, con tal de que empieces la línea de código con Application.WorksheetFunction...
Nuestro ejemplo En este ejemplo el rango que nos interesa sumar son los valores correspondientes a “BB”, es decir C8:C13.
Escribir la suma (en celda) 'el rango a sumar varSuma = Range(Cells(8, 3), Cells(13, 3)) 'sumar el rango Cells(1, 1) = Application.WorksheetFunction.Sum(varSuma)
Escribir la suma (variable)
'el rango a sumar varSuma = Range(Cells(8, 3), Cells(13, 3)) 'sumar el rango SUMA = Application.WorksheetFunction.Sum(varSuma)
Ejemplos de macros Excel VBA 0diggsdigg 1 Share
Ponemos a tu disposición una lista de ejemplos de macros personales de Excel que pueden ser útiles en tu trabajo diario. Recordamos que las macros Excel VBA ofrecen infinidad de posibilidades – trata de encontrar las tareas repititivas y de ahí crear las macros.
Unos ejemplos de aplicaciones de macros Excel VBA: Cambiar propiedades de las hojas Excel, suprimir filas, aplicar los formatos más comúnes… En poco tiempo tendrás unas macros imprescindibles, y ya no podrás trabajar en Excel sin ellas. Grabar y programar macros de Excel es una estupenda (posiblemente la mejor) manera de empezar a aprender Visual Basic para Excel (VBA). Para ayuda sobre como se graban las macros, ver Grabar una macro.
Alineación izquierda/derecha Sub Ajustar_izq_der() If Selection.HorizontalAlignment = xlRight Then Selection.HorizontalAlignment = xlLeft Else Selection.HorizontalAlignment = xlRight End If End Sub
Convertir pesetas a euro Sub Convertir() Set Area = Selection For Each Cell In Area z = Round(Cell / 166.386, 2) Cell.Value = z Cell.NumberFormat = "#,##0.00" Next Cell 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
Suprimir filas vacías 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
Grids (Líneas de división) Sub Grids() If ActiveWindow.DisplayGridlines = True Then ActiveWindow.DisplayGridlines = False Else ActiveWindow.DisplayGridlines = True End If End Sub
Cambiar A1 a RC (columnas tiene números en vez de letras) Sub Rc() If Application.ReferenceStyle = xlR1C1 Then Application.ReferenceStyle = xlA1 Else Application.ReferenceStyle = xlR1C1 End If End Sub
Modificar paleta de colores Sub ModificarPaleta() ActiveWindow.Zoom = 75 ActiveWorkbook.Colors(44) = RGB(236, 235, 194) ActiveWorkbook.Colors(40) = RGB(234, 234, 234) ActiveWorkbook.Colors(44) = RGB(236, 235, 194) End Sub
Mostrar todas las hojas
Sub MostrarHojas() Set wsHoja = Worksheets For Each wsHoja In ActiveWorkbook.Worksheets If wsHoja.Visible = False Then wsHoja.Visible = True End If Next wsHoja End Sub
Sumar rangos variables con VBA Excel 0diggsdigg 0 Share Sumar un rango en Excel es fácil. Sumar un rango expresado por una variable en VBA es un poco más complicado (pero sigue siendo fácil). No siempre se sabe de antemano que celdas formarán parte del rango a sumar. Entonces tenemos que expresar el rango de forma variable. En Excel es fácil sumar este rango mediante una sencilla fórmula. Pero VBA no contiene ninguna función igual. Entonces hay que hacer que VBA utilice las funciones de Excel.
Utilizar funciones Excel en VBA Tenemos un rango varSuma, el rango a sumar. Para sumar las celdas de este rango tenemos que llamar a la función SUM de Excel. Application.WorksheetFunction.Sum(varSuma)
De esta manera puedes aplicar cualquier fórmula de Excel en VBA, con tal de que empieces la línea de código con Application.WorksheetFunction...
Nuestro ejemplo En este ejemplo el rango que nos interesa sumar son los valores correspondientes a “BB”, es decir C8:C13.
Escribir la suma (en celda) 'el rango a sumar varSuma = Range(Cells(8, 3), Cells(13, 3)) 'sumar el rango Cells(1, 1) = Application.WorksheetFunction.Sum(varSuma) Escribir la suma (variable)
'el rango a sumar varSuma = Range(Cells(8, 3), Cells(13, 3)) 'sumar el rango SUMA = Application.WorksheetFunction.Sum(varSuma)
Declarar variables 0diggsdigg 0 Share
¿Porqué declarar variables? El código saldrá más estructurado Si no declaras un variable, no sabrás que tipo de datos contendrá. Es más seguro – evitarás errores tipográficos VBA te ayudará a poner los nombres correctos. Si no, un error tipográfico puede parar el programa. El código trabajará más eficaz Variables no declaradas serán tratatos como Variants, las cuales ocupan mucha más memoria. Te ayudará a programar VBA te ayuda a elegir propiedades/métodos que corresponden a esa variable.
Declarar variables
Una variable se declara empleando el comando DIM. DIM significa Dimension, y viene del antiguo BASIC. Al declarar, puedes indicar el número de dimensiones que la variable va a tener (ej. guardar números dentro de una variable, en 3 dimensiones). Para que sea más fácil leer el código, pon un indicador en el nombre de la variable. Así basta con leer el nombre de la variable para saber de que tipo es. Puede ser str para String, int para Integer etc. Una alternativa al DIM es Public. La variable será accesible desde todas partes de tú proyecto VBA.
Poner nombres explicativos Intenta poner nombres explicativos a las variables. Dim strCodigoPostal as String Dim datFechaRecogida as Date
El nombre puede tener hasta 254 carácteres (por supuesto demasiado…). No puede empezar con una cifra. Algunos nombres son reservados para VBA/Excel, la cual te notificará al ejecutar.
¿Donde poner las declaraciones? VBA te deja declarar casi en cualquier sitio del código. No obstante, la posición puede dar resultados distintos. Por eso es recomendable seguir unas normas. Tipo de declaración
Dim Dim Dim Public
Ubicación Accesible Encima del procedimiento (antes Todos los procedimientos del del primer Sub) módulo. Antes de un procedimiento Ese procedimiento . específico. Dentro de un procedimiento. Resto de ese procedimiento. Encima del procedimiento (antes Todos los procedimientos (de del primer Sub) todos los módulos)
Ejemplo que guarda las hojas en forma individual en nuevo nuevo archivo, pudiendo indicar el formato ( Csv, Html, Texto o Xls ) El ejemplo crea una referencia al objeto Excel para abrir un libro indicado, y luego recorre en un bucle For Next todas las hojas que tenga el libro . Luego dependiendo del formato elegido, va guardando el contenido de cada hoja individualmente en el App.path del proyecto con el método SaveAs de vba .
Pasos para el ejemplo •
Añadir la referencia a Microsoft Excel Object Library
•
Agregar un command1
•
Un Text1 para escribir el path del Xls
Nota: si se quiere , para no incluir la referencia , se debe declarar las variables ObjExcel y Objsheet como de tipo Object Dim ObjExcel As Object Dim ObjHoja As Object Código fuente a colocar en el formulario
Texto planoImprimir 1. Option Explicit 2. 3. 4. ' enumeración para espcificar el formato de salida de los datos 5. Private Enum EFormato 6.
CSV = 6
7.
HTML = 44
8.
TEXTO = 20
9.
EXCEL = -4143
10.End Enum 11. 12.' botón para exportar las hojas 13.'''''''''''''''''''''''''''''''' 14.Private Sub Command1_Click() 15.
Call Exportar_Hojas("c:\Nuevo Microsoft Excel Worksheet.xls", TEXTO)
16.End Sub 17. 18.' Sub que exporta 19.'''''''''''''''''''' 20.Private Sub Exportar_Hojas(PathLibro As String, _ 21.
Formato As EFormato)
22. 23.Dim ObjExcel As EXCEL.Application 24.Dim ObjHoja As EXCEL.Worksheet 25.Dim Extension As String 26.Dim opcion As Variant 27.Dim i As Integer 28. 29.
' verifca que el path del xls sea válido
30.
If Len(Dir(PathLibro)) = 0 Then
31. 32.
MsgBox "El archivo xls que especificó no existe. Verifique la ruta", v bCritical Exit Sub
33.
End If
34.
' Diálogo de pregunta para elegir el tipo de archivo
35.
opcion = InputBox("Seleccionar un formato para guardar cada hoja de l libro " & _
36.
"seleccionado en archivos individuales: " & _
37.
vbNewLine & String(25, "-") & vbNewLine & _
38.
"1 - Archivo de Excel" & vbNewLine & _
39.
"2 - Archivo Csv" & vbNewLine & _
40.
"3 - Archivo Html" & vbNewLine & _
41.
"4 - Archivo de texto plano txt" & _
42.
vbNewLine, "Seleccionar opción para guardar")
43. 44.
Select Case opcion
45.
Case 1: Formato = EXCEL: Extension = ".xls"
46.
Case 2: Formato = CSV: Extension = ".csv"
47.
Case 3: Formato = HTML: Extension = ".Html"
48.
Case 4: Formato = TEXTO: Extension = ".txt"
49.
Case vbNullString:
50.
MsgBox "Acción cancelada", vbInformation
51.
Exit Sub
52. 53. 54. 55.
Case Else: MsgBox "No ha seleccionado ninguna opción", _ vbCritical, "Error" Exit Sub End Select
56. 57. 58.
' crea el Objeto Application
59.
Set ObjExcel = CreateObject("Excel.Application")
60. 61.
With ObjExcel
62. 63.
.DisplayAlerts = False
64.
' abre
65.
.Workbooks.Open (PathLibro)
66. 67.
' recorre la colección Sheets, es decir todas las hojas
68.
For i = 1 To .Worksheets.Count
69. 70.
' abre
71.
.Workbooks.Open (PathLibro)
72. 73.
' referencia a esta sheet
74.
Set ObjHoja = .Sheets(i)
75.
' selecciona la hoja actual con el método Select
76.
ObjHoja.Select
77.
' Copia la hoja entera con el método Copy
78.
ObjHoja.Copy
79. 80.
' exporta la hoja individual al formato indicado con SaveAs
81.
.ActiveWorkbook.SaveAs FileName:=App.Path + "-" & _
82.
Trim(ObjHoja.Name) + Extension, _
83.
FileFormat:=Formato, _
84.
Password:="", _
85.
WriteResPassword:="", _
86.
ReadOnlyRecommended:=False, _
87.
CreateBackup:=False
88.
Next
89.
End With
90.
' cierra el libro y elimina las referencias
91.
ObjExcel.Quit
92.
Set ObjHoja = Nothing
93.
Set ObjExcel = Nothing
94.
' ok
95.
MsgBox "Archivos generados en el directorio : " & App.Path, vbInforma tion
96. 97. 98.Exit Sub 99.' rutina de error 100.''''''''''''''''''' 101.ErrorSub: 102.
MsgBox Err.Description
103.
On Error Resume Next
104.
ObjExcel.Quit
105.
Set ObjHoja = Nothing
106.
Set ObjExcel = Nothing
107.End Sub 108. 109. 110.Private Sub Form_Load() 111.
Command1.Caption = "Exportar ..."
112.
Text1 = "Indicar aqui la ruta del libro "
113.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 número 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
Código 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. 25.
Next y Next x
26. 27.
i=0
28.
ReDim ArrFinal(0)
29. 30. 31.
For Each Elemento In sElementos 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.
Dim n As Long
61.
n=1
62.
' recorre desde el rango de fila
63.
For fila = DesdeFila To HastaFila
64.
' almacena los datos a verificar
65.
Elementos(n - 1) = .Application.Cells(fila, Columna)
66.
' elimina el valor de la celda
67.
.Application.Cells(fila, Columna) = ""
68.
ReDim Preserve Elementos(UBound(Elementos) + 1)
69.
n=n+1
70.
Next
71.
' llama al rutina para verificar los valores repetidos
72.
Chequear_Valores Elementos
73. 74.
Dim fActual As Long
75.
n=0
76.
' recorre la lista de los elementos para asignarlos a las celdas
77.
For n = 0 To UBound(Elementos) - 1
78.
.Application.Cells((DesdeFila + fActual), Columna).Value = Eleme ntos(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. 93. 94.
'pasa el libro, el número de la columna _ a verificar, la fila inicial, y la fina final Call Eliminar_Duplicados_PorColumna("c:\libro1.xls", 1, 5, 250)
95. 96.End Sub Option Explicit
Private Sub Chequear_Valores(sElementos() As Variant) Dim TempArray() As String Dim x As Integer, x2 As Integer, y As Integer Dim z As Integer, Elemento As Variant Dim ArrFinal() As Variant Dim nRedim As Long
Nota. Otra forma de realizar esto, podría ser, cargar todos los valores en un array o vector. Luego utilizar esta función para eliminar los datos duplicados, y por último, pasar el array a la hoja del libro.
Simple ejemplo para realizar una copia de una hoja indicada, a una nueva A la función CopiarHoja, se le debe indicar como parámetros : •
•
•
El nombre del objeto sheets origen, es decir el nombre de la hoja que se va a copiar . El segundo parámetro el nombre de la nueva hoja, que se agrega en este caso con el método Add del objeto sheets de vba. Por último el path del archivo de Excel .
Nota: Si se pasa como parámetro en la hoja de destino, un nombre de una que ya existe , se visualiza un error mediante un mensaje, ya que como está puesto el ejemplo, solo es para copiar en una nueva hoja, no en una ya existente. Indicar la referencia a Microsoft Excel Object Library
Código fuente en el formulario
Texto planoImprimir 1. Option Explicit 2. 3. 4. ' NameHojaOrigen: La hoja que se va a copiar _ 5.
NameNuevaHoja : Nombre para la nueva _
6.
PathLibro : Ruta del Xls
7. 8. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 9. Private Sub Copiar_hoja(NameHojaOrigen As String, _ 10.
NameNuevaHoja As String, _
11.
PathLibro As String)
12. 13. 14.On Error GoTo Error_Sub 15. 16.' crea el objeto Excel 17.Dim ObjExcel As Object 18.Set ObjExcel = CreateObject("Excel.Application") 19. 20. 21.'ObjExcel.Visible = True 22. 23.'abre el libro 24.ObjExcel.Workbooks.Open PathLibro 25. 26.With ObjExcel 27.
Dim SheetO As Object
28.
Dim SheetD As Object
29. 30.
On Error Resume Next
31.
Set SheetO = .Sheets(NameHojaOrigen)
32.
Set SheetD = .Sheets(NameNuevaHoja)
33. 34.
If SheetO Is Nothing Then
35.
MsgBox "Error. la hoja Origen indicada no existe", vbCritical
36.
End If
37.
If Not SheetD Is Nothing Then
38.
MsgBox "Error. la hoja Destino ya existe en el libro. " & _
39. 40.
"Indicar otro nombre para la nueva hoja", vbCritical End If
41. 42.
If SheetD Is Nothing And Not SheetO Is Nothing Then
43.
On Error GoTo 0
44.
Set SheetO = Nothing
45.
Set SheetD = Nothing
46. 47.
Else
48.
Set SheetO = Nothing
49.
Set SheetD = Nothing
50. 51.
ObjExcel.Quit
52.
Set ObjExcel = Nothing
53.
Exit Sub
54.
End If
55. 56.
.Sheets.Add ' agrega con Add una nueva hoja en el libro
57.
.ActiveSheet.Select ' La selecciona
58.
.ActiveSheet.Name = NameNuevaHoja ' le cambia el nombre
59.
.Sheets(NameHojaOrigen).Select ' Se posiciona en la hoja de origen
60.
.Cells.Select ' selecciona todas las celdas
61.
.Selection.Copy ' copia el contenido
62.
.Sheets(NameNuevaHoja).Select ' se posiciona en la nueva hoja
63.
.Cells.Select ' selecciona
64.
.ActiveSheet.Paste ' pega los datos
65.
.Application.CutCopyMode = False
66.
.ActiveWorkbook.Save ' graba los cambios en el libro
67. 68.End With 69. 70.' descarga la referencia y cierra el Excel
71.ObjExcel.Quit 72.Set ObjExcel = Nothing 73. 74.MsgBox "Ok", vbInformation 75. 76.Exit Sub 77.Error_Sub: 78.MsgBox Err.Description 79.On Error Resume Next 80. 81.Set ObjExcel = Nothing 82. 83.Err.Clear 84.End Sub 85. 86.Private Sub Form_Load() 87.
Call Copiar_hoja("Informe", "Copia De Informe", "c:\Libro1.xls")
88.End Sub Option Explicit
' NameHojaOrigen: La hoja que se va a copiar _ NameNuevaHoja : Nombre para la nueva _ PathLibro : Ruta del Xls '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Copiar_hoja(NameHojaOrigen As String, _ NameNuevaHoja As String, _
Formulario de ejemplo que usa el método 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 parámetros :
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")
Call Reemplazar("Ruta del Libro", _ "Nombre de la hoja", _ "Texto a Buscar", _ "Texto a reemplazar", _ "Coincidir mayusculas y minusculas")
El último parámetro es un valor de tipo Boolean que indica si se tomará en cuanta las mayúsculas y minúsculas en la búsqueda. Por defecto está en False, y no se tiene en cuenta . También, si se quiere que al buscar, solo busque la cadena completa en la celda, hay que modificar el valor LookAt, del método 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
Código fuente en el formulario
Texto planoImprimir 1. Option Explicit 2. 3. ' botón que ejecuta la rutina para buscar y reemplzar en la hoja 4. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 5. Private Sub Command1_Click() 6.
Reemplazar Text1, Text2, Text3, Text4, False
7. End Sub 8. 9. 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. 28.
Exit Sub End If
29. 30.
If Hoja = vbNullString Or _
31.
TextoFind = vbNullString Or _
32.
TextoReplace = vbNullString Then
33.
MsgBox "No se indicaron algunos parámetros", 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. 49. 50.
' Ejecuta el método Replace, indicando el Sheet, y las _ opciones de búsqueda y reemplazo ret = AppXls.ActiveWorkbook.Sheets(Hoja).Application.Cells.Replace( What:=TextoFind, _
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