53
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.

Macos en Vba Excel

Embed Size (px)

Citation preview

K

VBA para proteger hojas de un libro Excel0diggsdigg0Share 

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

Pon este código en el contenedor ‘EsteLibro‘ del editor VBA (Herramientas – Macro – Editor VBA).

Luego tienes que poner que hojas/palabra de paso (ver ‘Preparar modelo‘ del código).

Código VBA para proteger hojas Excel

Dim strStartHoja As StringDim strSegundaHoja As StringPrivate Sub Workbook_SheetActivate(ByVal Sh As Object)Dim z As IntegerDim i As IntegerDim x As Boolean

Dim varHoja As VariantDim varPaso As VariantDim varInput As Variant 'preparar modelo [admin. input]varHoja = Array("Sheet2", "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 hojasstrSegundaHoja = Sh.NameFor i = LBound(varHoja) To UBound(varHoja)If varHoja(i) = strSegundaHoja Then x = TrueNext iIf x = False Then GoTo 99 'ocultar la hoja temporalmentez = ActiveWindow.IndexWindows(z).Visible = False 'comparar palabra de pasovarInput = InputBox("Palabra de paso:")If varInput <> varPaso Then Sheets(strStartHoja).Select 'volver a mostrar la hojaWindows(z).Visible = True 99: 'conectar EventsApplication.EnableEvents = True End Sub '*************************************************

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)'recordar hoja inicialstrStartHoja = Sh.NameEnd Sub

Objecto Application de Excel VBAEl 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 Propiedad DevuelveApplication. UserName Nombre del usuario

OrganizationName Nombre de la empresaOperatingSystem Sistema operativoVersion Versión de MS ExcelProductCode Código de MS ExcelStandardFont Fuente por defectoStandardFontSize Tamaño fuente por defectoDecimalSeparator Carácter separador de milesActivePrinter Impresora por defectoDefaultFilePath Ruta de acceso por defectoUserLibraryPath Ruta a carpeta Add-ins

Sobre la versión de MS Excel arriba:

Versión

12 Excel 200711 Excel 200310 Excel 2002 (“XP”)9 Excel 20008 Excel 977 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 StringstrImpresoraActiva = 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() 'dimensionesDim strDataArray(10) As StringDim i, x As Integer 'devolver datos del objeto 'Application'strDataArray(0) = Application.UserNamestrDataArray(1) = Application.OrganizationNamestrDataArray(2) = Application.OperatingSystemstrDataArray(3) = Application.VersionstrDataArray(4) = Application.ProductCodestrDataArray(5) = Application.StandardFontstrDataArray(6) = Application.StandardFontSizestrDataArray(7) = Application.DecimalSeparatorstrDataArray(8) = Application.ActivePrinterstrDataArray(9) = Application.DefaultFilePathstrDataArray(10) = Application.UserLibraryPath 'presentar los datos en celdas D3...x = 0 For i = 3 To 13 Cells(i, 4) = strDataArray(x) x = x + 1 Next i End SubSub SuprimirDatosEnceldas() 'suprimir datos antiguosRange(Cells(3, 4), Cells(13, 4)).ClearContents End Sub

Messagebox y Excel VBALas 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).

vbOkOnlyvbOkCancelvbYesNoCancelvbAbortRetryIgnore

Iconos

Puedes elegir entre los siguientes.

vbCriticalvbQuestion

vbExclamationvbInformation

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 = 1Cancel = 2Abort = 3Retry = 4Ignore = 5Yes = 6No = 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 IntegerintRespuesta = MsgBox("¿Quieres seguir?", vbQuestion + vbYesNo, _Información importante")If intRespuesta = 6 Then MsgBox"Seguimos"Else MsgBox"Terminamos"End IfEnd 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 VBA0diggsdigg0Share 

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ónMsgBox ("Abra el archivo Excel.") 'elegir archivostrRutaArchivo = _Application.GetOpenFilename("Libro de Microsoft Excel (*.xls), *.xls") 'abrir archivo

On Error GoTo 9Workbooks.Open Filename:=strRutaArchivo9: End Sub

Inicio Sitemap

Inicio VBA-Macros VBA-Ejemplos Atajos General Formatos Fórmulas SQL

Inicio » VBA-Ejemplos » Explorador de informes

Explorador de informes0diggsdigg0Share 

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 = FalseSheets("Hoja3").Visible = FalseSheets("Hoja4").Visible = FalseEnd SubSub AbrirH1()Sheets("Hoja2").Visible = TrueSheets("Hoja2").ActivateSheets("Hoja2").Range("A1").SelectEnd SubSub Volver()Sheets("Panel").ActivateSheets("panel").Range("a1").SelectEnd SubSub AbrirH2()Sheets("Hoja3").Visible = TrueSheets("Hoja3").ActivateSheets("Hoja3").Range("A1").SelectEnd Sub

Sub AbrirH3()Sheets("Hoja3").Visible = True

Sheets("Hoja3").ActivateSheets("Hoja3").Range("A1").SelectEnd Sub

Sub Botón6_AlHacerClic()'Cierra el libro activo, antes guarda todos los cambios...ActiveWorkbook.SaveActiveWorkbook.CloseEnd Sub

Inicio » VBA-Ejemplos » Crear una barra de progreso en Excel

Crear una barra de progreso en Excel0diggsdigg0Share 

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 IntegerDim MT As DoubleFor R = 1 To 180MT = TimerDoLoop While Timer - MT < 0.05Application.StatusBar = "Progress: " & R & " de 180: " & _Format(R / 180, "Percent") & " --- " & "Cumplimiento"DoEventsNext RApplication.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 IntegerOn Error GoTo err_handlerApplication.EnableEvents = False If Not Application.Intersect _(Target, Columns("A")) Is Nothing Then If Target.Column = 4 Then aOffset = 3Else aOffset = 2End If If IsEmpty(Target.Value) Then With Target .Font.Name = "Wingdings" .Value = Chr(252) End With Target.Offset(0, iOffset).SelectElse Target.Value = "" Target.Offset(0, iOffset).SelectEnd 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 ayuda0diggsdigg0Share 

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 IfEnd If End Sub

El temporizador de Excel VBA0diggsdigg0Share 

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 temporizador2. Tu_Sub – Cualquier instrucción3. 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 DatePublic Const conIntervalo = 60 'un minutoPublic Const conRunMacro = "Tu_Sub" 'tu proced.

Iniciar temporizador

La primera macro inicia el temporizador.

Sub StartTemporizador()datHora = Now + TimeSerial(0, 0, conIntervalo)'iniciar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=TrueEnd Sub

Tu procedimiento

Aquí pones lo que quieres que Excel haga periodicamente.

Sub Tu_Sub()

MsgBox datHora 'o cualquier instrucción'reiniciar el temporizadorStartTemporizadorEnd Sub

Cerrar temporizador

El temporizador hay que cerrarlo ‘manualmente’.

Sub StopTemporizador()On Error Resume Next'desactivar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=FalseEnd Sub

Todo el código

Ahora, el módulo de las macros descritas arriba debe tener el siguiente aspecto.

Public datHora As DatePublic Const conIntervalo = 60 'un minutoPublic Const conRunMacro = "Tu_Sub" 'tu proced.

Sub StartTemporizador()datHora = Now + TimeSerial(0, 0, conIntervalo)'iniciar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=TrueEnd Sub Sub Tu_Sub()MsgBox datHora 'o cualquier instrucción'reiniciar el temporizadorStartTemporizadorEnd Sub Sub StopTemporizador()On Error Resume Next'desactivar el temporizadorApplication.OnTime _Earliesttime:=datHora, _Procedure:=conRunMacro, _Schedule:=FalseEnd SuB

Copiar módulo VBA a otro libro Excel0diggsdigg0Share 

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 nuevoSheets(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 editor VBA:Herramientas – Referencias – Microsoft Visual Basic for Applications Extensibility x.x.

Exportar módulo VBA

'exportar módulo VBADim vbaProyecto As VBIDE.VBProjectDim vbaModulo As VBIDE.VBComponentPublic strRuta as String Set vbaProyecto = ThisWorkbook.VBProjectSet 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 VBADim vbaProyecto As VBIDE.VBProjectDim vbaModulo As VBIDE.VBComponentPublic strRuta as String strRuta = ThisWorkbook.Path & "\modulo1_export.txt"'o strRuta = "c:\modulo1_export.txt"

Set vbaProyecto = ActiveWorkbook.VBProjectvbaProyecto.VBComponents.Import (strRuta) 'suprimir el archivo planoKill strRuta

Calcular los Dígitos de control desde Excel VBA0diggsdigg0Share 

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 0123Oficina 4567Dígitos de control xxCuenta 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 StringDim Office As StringDim DC As StringDim Account As StringDim BankOffice As StringDim Valor1, Valor2, Valor3, Valor4, Valor5DIm Valor6, Valor7, Valor8, Valor9, Valor10Dim TestValue1 As IntegerDim TestValue2 As IntegerDim TestValueDC As Integer'---------------------------------------------------'recoger el número de cuentaBank = Range("B3").TextOffice = Range("C3").TextDC = Range("D3").TextAccount = Range("E3").TextBankOffice = 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 = 1If 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 DCTestValueDC = TestValue1 & TestValue2 'evaluar DC completoIf TestValueDC = DC ThenTest = TrueMsgBox "Correcto."ElseTest = FalseMsgBox "DC no corresponde a esta cuenta." & vbCrLf & _"[en este caso DC sería " & TestValueDC & ".]", vbOKOnly, vbInformationEnd If End Sub

Buscar fragmento de texto en una lista0diggsdigg0Share 

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() 'dimensionesDim lngUltimaFila As LongDim strObjetoBuscar As StringDim lngResultado As LongDim lngColumna As Long, lngFila As LongDim lngPegarColumna As Long, lngPegarFila As LongDim x As Integer, n As Integer 'quitar resultados anterioresRange("G5:H4000").ClearContents 'columna + fila donde empezar/terminar búsquedalngColumna = 2lngFila = 5lngUltimaFila = Columns(lngColumna).Range("A65536").End(xlUp).Row 'columna + fila donde empezar a pegar resultadoslngPegarColumna = 6lngPegarFila = 5 'objeto a buscarstrObjetoBuscar = Range("G2").TextIf strObjetoBuscar = "" Then GoTo 99

'minúsculasstrObjetoBuscar = LCase(strObjetoBuscar) 'bucle: realizar búsquedaFor 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 'aparcarApplication.CutCopyMode = FalseRange("G2").Select 99:End Sub

Sumar rangos variables con VBA Excel0diggsdigg0Share 

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 sumarvarSuma = Range(Cells(8, 3), Cells(13, 3))'sumar el rangoCells(1, 1) = Application.WorksheetFunction.Sum(varSuma) <h2>Escribir la suma (variable)</h2><div class="cb"><pre> 'el rango a sumarvarSuma = Range(Cells(8, 3), Cells(13, 3))'sumar el rangoSUMA = Application.WorksheetFunction.Sum(varSuma)

Ejemplos de macros Excel VBA0diggsdigg1Share 

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 ThenSelection.HorizontalAlignment = xlLeftElseSelection.HorizontalAlignment = xlRightEnd IfEnd Sub

Convertir pesetas a euro

Sub Convertir()Set Area = SelectionFor Each Cell In Areaz = Round(Cell / 166.386, 2)Cell.Value = zCell.NumberFormat = "#,##0.00"Next CellEnd Sub

Pegar formato

Sub PegarFormato()

Selection.PasteSpecial Paste:=xlFormatsApplication.CutCopyMode = FalseEnd Sub

Pegar valor

Sub PegarValor()Selection.PasteSpecial Paste:=xlValuesApplication.CutCopyMode = FalseEnd Sub

Dos decimales

Sub DosDec()Dim Area As RangeSet Area = SelectionFor Each Cell In Areaz = Round(Cell, 2)Cell.Value = zCell.NumberFormat = "#,##0.00"Next CellEnd Sub

Separador de miles

Sub SeparadorMil()Dim Area As RangeSet Area = SelectionIf Area.NumberFormat = "#,##0" ThenArea.NumberFormat = "#,##0.00"ElseSelection.NumberFormat = "#,##0"End IfEnd Sub

Suprimir filas vacías

Sub SuprimirFilasVacias()LastRow = ActiveSheet.UsedRange.Row - 1 + _ActiveSheet.UsedRange.Rows.CountFor r = LastRow To 1 Step -1If Application.CountA(Rows(r)) = 0 ThenRows(r).DeleteEnd IfNext rEnd Sub

Autofilter

Sub FilterExcel()Selection.AutoFilter

End Sub

Grids (Líneas de división)

Sub Grids()If ActiveWindow.DisplayGridlines = True ThenActiveWindow.DisplayGridlines = FalseElseActiveWindow.DisplayGridlines = TrueEnd IfEnd Sub

Cambiar A1 a RC (columnas tiene números en vez de letras)

Sub Rc()If Application.ReferenceStyle = xlR1C1 ThenApplication.ReferenceStyle = xlA1ElseApplication.ReferenceStyle = xlR1C1End IfEnd Sub

Modificar paleta de colores

Sub ModificarPaleta()ActiveWindow.Zoom = 75ActiveWorkbook.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 = WorksheetsFor Each wsHoja In ActiveWorkbook.WorksheetsIf wsHoja.Visible = False ThenwsHoja.Visible = TrueEnd IfNext wsHojaEnd Sub

Sumar rangos variables con VBA Excel

0diggsdigg0Share 

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 sumarvarSuma = Range(Cells(8, 3), Cells(13, 3))'sumar el rangoCells(1, 1) = Application.WorksheetFunction.Sum(varSuma) <h2>Escribir la suma (variable)</h2><div class="cb"><pre> 'el rango a sumarvarSuma = Range(Cells(8, 3), Cells(13, 3))'sumar el rangoSUMA = Application.WorksheetFunction.Sum(varSuma)

Declarar variables0diggsdigg0Share 

¿Porqué declarar variables?

El código saldrá más estructuradoSi no declaras un variable, no sabrás que tipo de datos contendrá.

Es más seguro – evitarás errores tipográficosVBA te ayudará a poner los nombres correctos. Si no, un error tipográfico puede parar el programa.

El código trabajará más eficazVariables no declaradas serán tratatos como Variants, las cuales ocupan mucha más memoria.

Te ayudará a programarVBA 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 StringDim 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 Ubicación Accesible

DimEncima del procedimiento (antes del primer Sub)

Todos los procedimientos del módulo.

DimAntes de un procedimiento específico.

Ese procedimiento .

Dim Dentro de un procedimiento. Resto de ese procedimiento.

PublicEncima del procedimiento (antes del primer Sub)

Todos los procedimientos (de 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 ObjectDim ObjHoja As Object

 

Código fuente a colocar en el formulario

Texto plano Imprimir

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. MsgBox "El archivo xls que especificó no existe. Verifique la ruta", vbCritical 32. 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 del 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. Case Else: MsgBox "No ha seleccionado ninguna opción", _ 53. vbCritical, "Error" 54. Exit Sub

55. 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, vbInformation 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 plano Imprimir

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. 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 = 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 número 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

 

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

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

Texto plano Imprimir

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. "Indicar otro nombre para la nueva hoja", vbCritical 40. 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

 

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 plano Imprimir

1. Call Reemplazar("Ruta del Libro", _ 2. "Nombre de la hoja", _ 3. "Texto a Buscar", _ 4. "Texto a reemplazar", _ 5. "Coincidir mayusculas y minusculas")

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, _

 

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 plano Imprimir

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

Call Reemplazar("Ruta del Libro", _ "Nombre de la hoja", _ "Texto a Buscar", _ "Texto a reemplazar", _ "Coincidir mayusculas y minusculas")

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. 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 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. ' Ejecuta el método Replace, indicando el Sheet, y las _ 49. opciones de búsqueda y reemplazo 50. 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 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

 

Option Explicit

' botón que ejecuta la rutina para buscar y reemplzar en la hoja''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Private Sub Command1_Click() Reemplazar Text1, Text2, Text3, Text4, FalseEnd Sub

' Rutina que busca en la hoja y reemplaza todo