[Resuelto] Buscar la letra "p" y escribir la letra "x"
[Resuelto] Buscar la letra "p" y escribir la letra "x"
Necesito una ayuda con la macro que funcionaba perfecto en Vba de Excel.
Necesito convertir esta macro al código BASIC de LibreOffice.
la macro vba en Excel hacía lo siguiente:
Buscar la letra "p" en la columna T de la hoja de cálculo ("2.2Ped Fat"), al encontrar la letra "p" en la columna T, desplazar el cursor 7 posiciones hacia la izquierda y escribir la letra "x".
es necesario hacer la búsqueda en la columna T (Loop), hasta que no encuentre ninguna letra "p".
En el caso de que no sea así,
=============================================================================================
Sub Buscar_x()
Dim localizador As Range
Worksheets("2.2Ped Fat").Activate
Range("M50:M20000").ClearContents
With Plan1.Range("T:T")
Set localizador = .Find("p", LookIn:=xlValues, LookAt:=xlWhole) 'procura exata
If localizador = 0 Then Exit Sub
If Not localizador Is Nothing Then
ENDERECO = localizador.Address
Do
Range(localizador.Address).Select
Range(localizador.Address).Offset(0, -7) = "x"
Set localizador = .FindNext(localizador)
Loop While Not localizador Is Nothing And localizador.Address <> ENDERECO
End If
End With
End Sub
=================================================================================================
abrazos.
Necesito convertir esta macro al código BASIC de LibreOffice.
la macro vba en Excel hacía lo siguiente:
Buscar la letra "p" en la columna T de la hoja de cálculo ("2.2Ped Fat"), al encontrar la letra "p" en la columna T, desplazar el cursor 7 posiciones hacia la izquierda y escribir la letra "x".
es necesario hacer la búsqueda en la columna T (Loop), hasta que no encuentre ninguna letra "p".
En el caso de que no sea así,
=============================================================================================
Sub Buscar_x()
Dim localizador As Range
Worksheets("2.2Ped Fat").Activate
Range("M50:M20000").ClearContents
With Plan1.Range("T:T")
Set localizador = .Find("p", LookIn:=xlValues, LookAt:=xlWhole) 'procura exata
If localizador = 0 Then Exit Sub
If Not localizador Is Nothing Then
ENDERECO = localizador.Address
Do
Range(localizador.Address).Select
Range(localizador.Address).Offset(0, -7) = "x"
Set localizador = .FindNext(localizador)
Loop While Not localizador Is Nothing And localizador.Address <> ENDERECO
End If
End With
End Sub
=================================================================================================
abrazos.
Última edición por physic el Vie Nov 16, 2018 7:52 pm, editado 2 veces en total.
LibreOffice 5.4.4.2 >>> Windows 7
Re: Buscar la letra "p" y escribir la letra "x"
La consulta parece clara, aunque también parece que no es así en tu macro.
¿A que le haríamos caso, a esto:?
¿Que es en tu código Plan1? ¿Es otra hoja?, ¿si es otro hoja entonces los datos no están en 2.2Ped Fat o cómo?
¿A que le haríamos caso, a esto:?
¿o a esto:?Buscar la letra "p" en la columna T de la hoja de cálculo ("2.2Ped Fat"), al encontrar la letra "p" en la columna T, desplazar el cursor 7 posiciones hacia la izquierda y escribir la letra "x".
¿Que es en tu código Plan1? ¿Es otra hoja?, ¿si es otro hoja entonces los datos no están en 2.2Ped Fat o cómo?
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Re: Buscar la letra "p" y escribir la letra "x"
sr. Federico ,
los datos están en la hoja "2.2Ped Fat", es decir, la búsqueda de la letra "p" debe ser en la columna T de la hoja "2.2Ped Fat"
al encontrar letra "p" debe mover 7 posición a la izquierda y escribir "x"
todo ello en la columna T de la hoja "2.2Ped Fat"
he utilizado LibreOffice para ejecutar la macro vba
se produjo un error en la línea de comandos siguiente>
Set de búsqueda = .Find ("p", LookIn: = xlValues, LookAt: = xlWhole)
no puedo entender por qué ????
abrazos
los datos están en la hoja "2.2Ped Fat", es decir, la búsqueda de la letra "p" debe ser en la columna T de la hoja "2.2Ped Fat"
al encontrar letra "p" debe mover 7 posición a la izquierda y escribir "x"
todo ello en la columna T de la hoja "2.2Ped Fat"
he utilizado LibreOffice para ejecutar la macro vba
se produjo un error en la línea de comandos siguiente>
Set de búsqueda = .Find ("p", LookIn: = xlValues, LookAt: = xlWhole)
no puedo entender por qué ????
abrazos
LibreOffice 5.4.4.2 >>> Windows 7
Re: Buscar la letra "p" y escribir la letra "x"
Porqué LibreOffice tiene un soporte limitado para VBA, siempre es recomendable migrar el código VBA.physic escribió:he utilizado LibreOffice para ejecutar la macro vba, se produjo un error en la línea de comandos siguiente. no puedo entender por qué ????
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Buscar la letra "p" y escribir la letra "x"
Así es, VBA no está completamente soportado en Libre/Open Office. Concretamente parece que no soporta FindNext en está instrucción:
Aquí una posible traducción en base a:
Código: Seleccionar todo
Set localizador = .FindNext(localizador)
Buscar la letra "p" en la columna T de la hoja de cálculo ("2.2Ped Fat"), al encontrar la letra "p" en la columna T, desplazar el cursor 7 posiciones hacia la izquierda y escribir la letra "x".
Código: Seleccionar todo
Sub oSearchSheet
actual = ThisComponent.getCurrentSelection().AbsoluteName
oSheet = ThisComponent.Sheets.getByName("2.2Ped Fat")
eMe = oSheet.getCellRangeByName("M50:M20000")
rango = oSheet.getCellRangeByName("T1:T1048576")
eMe.clearContents(23)
oSearch = rango.createReplaceDescriptor()
With oSearch
.SearchString = "p"
.SearchWords = true
.SearchCaseSensitive = false
End With
oDisp = rango.findAll(oSearch)
celdas = oDisp.createEnumeration()
Do While celdas.hasMoreElements()
oDoc = celdas.nextElement()
columna = Replace(oDoc.AbsoluteName, "$T$", "M")
oSheet.getCellRangeByName(columna).ArrayFormula = """x"""
loop
ThisComponent.currentController.Select(eme)
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:PasteOnlyText", "", 0, Array())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = actual
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
dispatcher.executeDispatch(document, ".uno:TerminateInplaceActivation", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Cancel", "", 0, Array())
End Sub
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Re: Buscar la letra "p" y escribir la letra "x"
He encontrado dos modelos que usan el comando "Find"
quizá en el futuro puede ser útil :
https://opensourceforu.com/2009/05/auto ... rg-macros/
http://document-foundation-mail-archive ... 96513.html
abrazos.
quizá en el futuro puede ser útil :
https://opensourceforu.com/2009/05/auto ... rg-macros/
http://document-foundation-mail-archive ... 96513.html
abrazos.
LibreOffice 5.4.4.2 >>> Windows 7
Re: Buscar la letra "p" y escribir la letra "x"
y yo voy a probar su código y daré noticias de los resultados.
abrazos.
abrazos.
LibreOffice 5.4.4.2 >>> Windows 7
Re: Buscar la letra "p" y escribir la letra "x"
Ok gracias por el link, la verdad esta interesante.
Reitero, si queremos usar VBA en LibreOffice el objeto "origen" de tu código no soporta la instrucción FindNext cómo ya lo habia dicho lineas arriba.
FindNext esta perfectamente soportado si usamos código propio de LibreOffice (como claramente lo dice el vinculo enviado)
Reitero, si queremos usar VBA en LibreOffice el objeto "origen" de tu código no soporta la instrucción FindNext cómo ya lo habia dicho lineas arriba.
Código: Seleccionar todo
Set localizador = .FindNext(localizador)
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Re: Buscar la letra "p" y escribir la letra "x"
sr. Federico ,
yo haré pruebas con el código corregido. cuando tenga los resultados de la prueba voy a informar a usted.
gracias por la ayuda
yo haré pruebas con el código corregido. cuando tenga los resultados de la prueba voy a informar a usted.
gracias por la ayuda
LibreOffice 5.4.4.2 >>> Windows 7
Re: Buscar la letra "p" y escribir la letra "x"
sr. Federico
se produce un Error en la definición de variable
probablemente no estoy declarando correctamente las variables (celdas, ....) ....
Dim celdas As Object
Dim ....
Dim ....
Dim ....
* ver la imagen adjunta
abrazos
se produce un Error en la definición de variable
probablemente no estoy declarando correctamente las variables (celdas, ....) ....
Dim celdas As Object
Dim ....
Dim ....
Dim ....
* ver la imagen adjunta
abrazos
LibreOffice 5.4.4.2 >>> Windows 7
Re: Buscar la letra "p" y escribir la letra "x"
A mi no me marca error, verifica si no en otra parte a nivel módulos hayas ya definido previamente dicha variable.
El error es claro:
Variable de objeto no definida
Es correcto definirla cómo
Dim celdas As Object
El error es claro:
Variable de objeto no definida
Es correcto definirla cómo
Dim celdas As Object
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Re: Buscar la letra "p" y escribir la letra "x"
Buenas!
Siento meterme en medio de la 'pelea', y además sin controlar nada de nada (yo solo intento hacer algo en base, pero calc siempre fue algo más lejano para mi).
Por otra parte, entiendo que hay que escribir una "X" en una columna 7 puestos a la izquierda de la de trabajo (Columna T), así que he montado una macro, que entiendo es muy rudimentaria, pero aparentemente, y según entendí parece que funciona:
Hacemos un ciclo que recorra las columnas de trabajo (en este caso solo la situada en posición 19). Dentro, hacemos otro ciclo que recorra cada fila (por lo que estamos yendo celda por celda). Dentro, a su vez, hacemos un ciclo que recorra cada letra del texto que tiene en su interior, y en cuanto detecta una "p", la cambiamos por "", es decir, por nada, y va a otra columna 7 puestos antes y ponemos una "X", salimos del ciclo y vamos a la siguiente celda.
Es decir, detecta la primera "p" del texto y ya no se lo piensa más.
No sé si es exactamente lo planteado, pero si es así, parece que funciona.
Solamente le puse hasta la celda 300, seguro que si las celdas son muchas se enlentecerá todo un montón, pero lo siento!, no doy para más.
Ya diréis.
Un saludo!
Siento meterme en medio de la 'pelea', y además sin controlar nada de nada (yo solo intento hacer algo en base, pero calc siempre fue algo más lejano para mi).
Por otra parte, entiendo que hay que escribir una "X" en una columna 7 puestos a la izquierda de la de trabajo (Columna T), así que he montado una macro, que entiendo es muy rudimentaria, pero aparentemente, y según entendí parece que funciona:
Hacemos un ciclo que recorra las columnas de trabajo (en este caso solo la situada en posición 19). Dentro, hacemos otro ciclo que recorra cada fila (por lo que estamos yendo celda por celda). Dentro, a su vez, hacemos un ciclo que recorra cada letra del texto que tiene en su interior, y en cuanto detecta una "p", la cambiamos por "", es decir, por nada, y va a otra columna 7 puestos antes y ponemos una "X", salimos del ciclo y vamos a la siguiente celda.
Es decir, detecta la primera "p" del texto y ya no se lo piensa más.
No sé si es exactamente lo planteado, pero si es así, parece que funciona.
Solamente le puse hasta la celda 300, seguro que si las celdas son muchas se enlentecerá todo un montón, pero lo siento!, no doy para más.
Código: Seleccionar todo
Sub quitar_p
dim c as integer, r as integer
oSheet = ThisComponent.getSheets().getByIndex(0)
for c=19 to 19 ' Columna T
for r= 0 to 300 ' Ciclo para los 300 primeros registros
oCell = oSheet.getCellByPosition(c,r) ' Celda de cada momento
oText = oCell.getText ' Texto en la celda
oCursor = oText.createTextCursorByRange(oText.getStart) ' Cursor de rango
oCursor.gotoEnd(True) ' Va hasta el final del texto
L=len(oCursor.String) ' Longitud del texto
oCursor.gotoStart(False) ' Cursor al principio del texto sin fijarse en cual es el texto
'-------------------------------------------
' Buscamos la primera "p" en el texto de la celda, la anulamos y ponemos la "X" en una columna 7 puestos anteriores
for i=0 to L-1 ' Ciclo que recorre todas las letras del texto de cada celda
oCursor.goRight(1,False) ' Vamos un hueco o letra a la derecha, pero no fijamos de qué letra se trata
oCursor.goLeft(1,True) ' Vamos un hueco a la izquierda, fijando la letra en la que estamos
if oCursor.String="p" Then ' si la letra es una p (en este caso minúscula)
oCursor.String="" ' La substituimos por nada, es decir, la borramos
oCell = oSheet.getCellByPosition(c-7,r) ' Nos situamos en una celda 7 columnas antes
oText = oCell.Text ' Texto en el interior de la celda
oCurs = oText.createTextCursor() ' Generamos un cursor de texto
oCurs.gotoEND(True) ' Vamos hasta el final del texto, indicando que las acciones se aplican a todo el texto de la celda
oCurs.String="X" ' Ponemos una X
Exit for ' Salimos del ciclo de letras
End if ' Acabamos la condición de que sea una p
Next ' Vamos a la siguiente letra
next ' Vamos a la siguiente fila
next ' Vamos a la siguiente columna
End Sub
Un saludo!
- Adjuntos
-
- Macro.7z
- (10.51 KiB) Descargado 239 veces
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Libreoffice 6.4.2, en Windows 10
Re: Buscar la letra "p" y escribir la letra "x"
Hola Longi, para mi tu macro cumple correctamente con una batería de datos suficiente, me parece buena opción a lo ya previamente planteado.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Re: Buscar la letra "p" y escribir la letra "x"
sr. Federico y sr. Longi ,
Muchas gracias por la ayuda, saludos para ustedes
las macros ya están funcionando muy bien
abrazos
Muchas gracias por la ayuda, saludos para ustedes
las macros ya están funcionando muy bien
abrazos
LibreOffice 5.4.4.2 >>> Windows 7