Quiero es buscar texto con la ayuda de truncamiento y remplazar en Windows 98 y Excel 2000

Perdona, cuando escribí la pregunta anterior me expresé mal. Lo que yo quiero es buscar texto (palabra o frase pudiendo usar comodines) y sustituir. En la anterior pregunta obvié lo de sustituir, que es lo más importante para mi. Uso Windows 98 y Excel2000. Gracias y perdona de nuevo por haberte hecho perdeer el tiempo

1 respuesta

Respuesta
1
Claro, tenía que ser más complicado...
OK, supongo que sabrás que MS Excel tiene una función de Buscar y Reemplazar, con la cual se puede realizar lo que solicitas *dentro de un archivo activo*. Pero, a juzgar por la pregunta anterior, quieres que este reemplazo se haga en más de un archivo; o sea que ellos pueden estar cerrados...
Si así fuera, sería necesario desarrollar un procedimiento en Visual Basic que, básicamente, tome una lista de archivos a revisar, abra cada uno de ellos, si encuentra el texto buscado lo reemplazaría en cada hoja, guarda el archivo y repite el proceso con el siguiente hasta agotar la lista.
Como verás sería posible, pero antes de desarrollarlo debería saber si estás de acuerdo en cuanto al proceso. Además, necesitaría algunas precisiones respecto a dónde se buscan los archivos y exactamente cual sería el reemplazo a realizar...
Espero tus comentarios...
Un abrazo!
Fernando
Pues sí, el reemplazo quiero que se haga en cualquier archivo cerrado que se encuentre en mi disco duro. Bien eligiendo yo el path o bien por defecto en todo C (con subdirectorios). Lo ideal sería que yo eligiera la ruta. El reemplazo a realizar en cada caso sería distinto. Bien de una palabra por otra, o por nada, o por una frase.
He encontrado varios programas que sirven para esto, pero ninguno encuentra el texto que se encuentra en excel.
Gracias de nuevo, Fernando
Estoy trabajando en una macro de VBA que haga lo que solicitas, sin embargo esta trabajrá sobre una lista de archivos, cuyos nombres se detallarán en la misma hoja de MS Excel donde está alojada tal macro.
Simplemente porque tu mismo dijiste que cada archivo tendrá su propio modo de reemplazo, por tanto habrá que asociarle a cada uno de ellos el reemplazo correspondiente...
Espera un tiempo que, ronto recibirás el código que necesitas. No cierres esta pregunta hasta que no te lo haya enviado...
Gracias por el interés que muestras. No sabes la falta que me hace y el trabajo que me ahorrará. Espero tu respuesta
Primero disculpa la demora, pero tuve una semana "agitada"
Además, el desarrollo del código se demoró por una serie de controles que el agregué. Verás que es un tanto extenso...
Pero, bueno, aquí está.
Necesitarás, como te adelanté, un archivo auxiliar que contendrá la Macro que hace los reemplazos y una hoja con la lista de directorios y archivos a abrir, el texto a buscar y su reemplazo correspondiente. Algo así como esto:
Directorio| Archivo| Reemplazar| Con|
C:\fjaPROV| tero| ORO| PLATA|
C:\fjaPROV| priulo| BANCO| mingooo|
C:\fjaPROV| caraseca| PRUEBA| XXX|
O sea cuatro columnas contiguas y luego puedes expandir hacia abajo todo lo que quieras.
- Activa el Editor de Visual Basic (con Alt+F11)
- Inserta un Módulo nuevo
- Copia y pega la siguiente rutina en el panel del módulo insertado:
Sub replNxls()
' Variables
Dim PathFile, PathFold, sText, rText As String
Dim StatusCalc As String, StatStatBar As String
Dim cntr As Integer
Dim oTodo, oForm As Boolean
Dim oTodoT, oFormT
'=================
'!!!! DEFINE AQUI SI BUSCA TODA APARICION DEL TEXTO O
' SOLO DONDE ESTE IGUAL:
oTodo = False '<- Reemplaza False con True si quieres que sólo reemplace en donde esté exactamente igual
'!!!! DEFINE AQUI SI BUSCA DENTRO DE FORMULAS O VALORES
oForm = False '<- Reemplaza False con True si quieres que busque dentro de las formulas
'==============
' Setting Environment up
StatStatBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "......... Macro de reemplazos en ejecución..."
Application.ScreenUpdating = False
If oTodo Then oTodoT = xlWhole Else oTodoT = xlPart
If oForm Then oFormT = xlFormulas Else oFormT = xlValues
'/// Inicio de secuencia cíclica de reemplazos.
'/// empieza con el archivo en la celda seleccionada en hoja
Do While Not IsEmpty(ActiveCell) ' .Value <> ""
If ActiveCell.Height <> 0 Then
PathFold = Trim(ActiveCell.Offset(0, 0).Text)
If Right(PathFold, 1) <> "\" Then PathFold = PathFold & "\"
PathFile = Trim(ActiveCell.Offset(0, 1).Text)
If Right(PathFile, 4) <> ".xls" Then PathFile = PathFile & ".xls"
sText = Trim(ActiveCell.Offset(0, 2).Text)
rText = Trim(ActiveCell.Offset(0, 3).Text)
cntr = 0
'Existencia de archivo
Dim x As String
x = Dir(PathFold & PathFile)
If x = "" Then
Application.ScreenUpdating = True
MsgBox "Archivo: " + UCase(PathFile) + Chr(10) + "NO existe en el directorio:" + Chr(10) + PathFold + Chr(10) + "Por favor corrija y reinicie macro REPLNXLS", vbCritical, "---- CARPETA o ARCHIVO ERRONEO ----"
Application.DisplayStatusBar = StatStatBar
Application.StatusBar = False
Exit Sub
Else
'abre archivo
Workbooks.Open PathFold & PathFile, 0, , , , , True
StatusCalc = Application.Calculation
Application.Calculation = xlCalculationManual
'busqueda y reemplazo en cada hoja
For sht = 1 To Sheets.Count
Sheets(sht).Select
If Not Cells.Find(sText, LookIn:=oFormT, LookAt:=oTodoT) Is Nothing Then
Cells.Replace sText, rText, LookAt:=oTodoT
cntr = cntr + 1
End If
Range("A1").Select
Next sht
Application.Calculation = StatusCalc
Sheets(1).Select
If cntr > 0 Then ActiveWorkbook.Save
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
End If
Application.ScreenUpdating = True
ActiveCell.Offset(1).Select
Application.ScreenUpdating = True 'False
End If
Loop
Application.DisplayStatusBar = StatStatBar
Application.StatusBar = False
Application.ScreenUpdating = True
MsgBox "Terminé reemplazos en archivos", vbInformation
End Sub
'--- fin del código
Dentro de lo que pegaste notarás un par de mensajes que tienen que ver con el modo que quieres que se efectúen las búsquedas.
La primera definición es si tiene que buscar un texto completo (Ejemplo: "ORO") tal como está o si está dentro de un texto también debe ser reemplazado (Ejemplo: en mOROso).
Así, si dejas:
oTodo = False
ORO en mOROso será reemplazado
Si lo cambias a True, no reemplazará en esa palabra y sólo lo hará en donde encuentre sólo "ORO".(Creo que no es esto lo que necesitas)
La otra definición es si debe reemplazar también dentro de las fórmulas que tengas o en los Valores (o Textos).
Dejé:
oForm = False
Porque entendí que lo harás en textos. Pero, como ves, es parametrizable.
- Efectúes o no modificaciones, cierra el editor de visual basic y graba el archivo.
Para empezar los reemplazos, controla que tu lista esté bien y selecciona la primer celda de la tabla en la línea donde quieras que inicie la ejecución.
Esto permite que, lances el procedimiento desde cualquier línea, no necesariamente desde la primera. M pareció útil para el caso -probable- de que la macro se interrumpa en algún punto de la tabla.
Elegida la celda (recuerda que es donde figura el nombre del directorio), lanza el macro replNxls() (puedes agregar un botón personalizado y asociarlo con esta macro)
El procedimiento se ejecutará internamente, por tanto no verás los procesos que está realizando. Verás solo el mensaje al pie de la pantalla mientras se ejecuta y un mensaje cuando finalice el trabajo. Eventualmente, tendrías mensajes de error si un archivo no es encontrado.
Fiuuuuu!
Pruébalo y comentame.
Esto debería resolver tu pregunta. Si así fuera, te agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.
Ah! Casi lo olvido, dispongo de un archivo de ejemplo que te mandaré con gusto. Si lo quieres, simplemente escríbeme a:
fejoal(en)hotmail.com
(Reemplaza "(en)" con "@")
Un abrazo!
Fernando
Aún no lo he probado, pero gracias una vez más por tu esfuerzo y dedicación. Ahora mismo te escribo para pedirte el archivo de ejemplo. Excelente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas