Contador en una macro de remplazos

Hola experto
Tengo una duda
Deseo poner un contador para saber cuantas celdas remplazo
Este es el código completo que tengo
Este programa
Remplaza los valores de una columna tomando valores de otras hojas de excel y pasándola
A una hoja principal
fecha1 = InputBox("Fecha que desea sustituir?", "ORIGEN", Now())
If fecha1 = Empty Then Exit Sub 'mejorar con revisión validez fecha
fecha2 = InputBox("Fecha nueva?", "DESTINO", Now())
If fecha2 = Empty Then Exit Sub 'mejorar con revisión fecha
'Le preguntarás al usuario por las fechas a sustituir y la nueva, y
If fecha1 < fecha2 Then
On Error Resume Next
Application.DisplayAlerts = False
MsgBox ("La Fecha que desea actualizar no se encontro")
MsgBox ("Se actualizaran incorrectamente los datos")
Selection.Replace What:="[BALANCE " & Format(fecha1, "ddmmyy"), Replacement:="[BALANCE " & Format(fecha2, "ddmmyy"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[MORELOS_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[MORELOS_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[servicios_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[servicios_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[rp" & Format(fecha1, "dd"), Replacement:="[rp" & Format(fecha2, "dd"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[DIARIO " & Format(fecha1, "dd"), Replacement:="[DIARIO " & Format(fecha2, "dd"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[CAPTURA_" & UCase(Format(fecha1, "yyyy")) & "_" & Format(fecha1, "MMMM") & "_" & Format(fecha1, "dd"), Replacement:="[CAPTURA_" & UCase(Format(fecha2, "yyyy")) & "_" & Format(fecha2, "MMMM") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[Rep_Subd_Prod_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[Rep_Subd_Prod_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[MARZO-" & UCase(Format(fecha1, "ddmmyy")), Replacement:="[MARZO-" & UCase(Format(fecha2, "ddmmyy"))
Selection.Replace What:="[FAX_CPI_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "dd"), Replacement:="[FAX_CPI_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "dd")
MsgBox ("Los Datos se han actualizado correctamente")
Else
MsgBox ("Las Fechan estan incorrectas")
End If
Donde colocarle el contador
Para que me indique cuantas celdas remplazo y mostrarlas en un msgbox
Espero me puedas ayudar
De antemano gracias

2 respuestas

Respuesta
1
Espero que estés de lo mejor. Cuando utilizamos el método Replace no tenemos ninguna propiedad que nos permita saber directamente cuantas celdas fueron actualizadas. Pero la solución a tu problema es la siguiente:
1. En las declaraciones de la hoja donde vayas a hacer los reemplazos, declara una variable publica que se llame CONTAR_REEMP de tipo Integer
          PUBLIC CONT_REEMP AS INTEGER
2. En el evento Change de la hoja(s) en las cual(es) haces el/los reemplazo(s) escribe el siguiente código:
          private sub worksheet_Change(ByVal target As Range)
                     x=Target.count
          end sub
3. y en tu codigo vas a declarar una variable de tipo integer:
        dim REEMPLAZOS as integer
   una linea antes del End Sub de tu codigo escribes esta linea:
       reemplazos = CONTAR_REEMP
4. Te voy a explicar cual es la idea . Corres tu código así como esta, haciendo los reemplazos correspondientes. Cuando el método replace cambia el valor de cada una de las celdas va a activar el evento Change de la hoja activa. Entonces por cada reemplazo hay una entrada a ese evento. La variable por va a ir aumentando cada vez que haya un cambio de valores. Cuando llegues al final de tu código, la variable REEMPLAZOS tomara el valor de la variable publica CONTAR_REEMP, que en ese momento contendrá la cantidad de veces que hiciste reemplazos en la hoja.
Para que lo veas con mayor claridad, hazle seguimiento al código con la tecla F8, para que puedas observar el funcionamiento del código.
Estaré pendiente a cualquier inquietud.
Hola experto
Estuvo muy buena la respuesta
Pero no lo pude hacer
Sera que te puedo mandar mi hoja de excel
Para que lo cheques
Capaz y estoy omitiendo algo
Pero lo cheque varias veces y no encontré el error
Mandame tu correo
Para que te mande mis hojas por fas
Saludos cordiales
Gracias por tu tiempo
Mi mail es [email protected], envía la información y te colaboro.
Hola experto
Ya te mande las hojas de excel
Con la explicación
Espero me puedas apoyar
Gracias
Saludos cordiales
Te lo agradeceré mucho
Ya envié a tu correo el archivo con la modificación en la macro .
Utilice una función instr para saber si la celda tenia la fórmula vinculada, después dividí la cadena en tres partes, le asigne la nueva fecha, y le coloque el valor en la celda directamente. Eso fue todo, ahora ya puedes saber cuantos reemplazos se hicieron totalmente.
Te recomiendo dos cosas que te van a ser muy útiles a la hora de programar:
1.Siempre declara las variables
2. Si vas a modificar fórmulas en celdas desde el código, debes utilizar las funciones de extracción de cadena como left, right, instr, etc.
Espero que esta modificación te sea muy útil.
Mil saludos desde Colombia
Excelmaster
Hola experto
En verdad agradezco por tu ayuda
Es una excelente respuesta
Me ayudo en mi macro
Felicidades
Gracias por apoyarme
Y por dedicar tiempo a mi problema
Saludos
Y cuando tenga dudas no dudare en buscar tu opinión
Saludos desde mexico
grax por todoo
me sirviooo
saludos cordialesssss
Respuesta
1
Pienso que tiene que cambiar la codificación e introducir un lazo de repita (Do ... Loop), e introducir el contador (I=I+1) y las celdas trabajarlas con Cell(i, j), donde i y j son las posiciones de la celda, hasta próxima, cjcv2008

Añade tu respuesta

Haz clic para o