¿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".
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é ????
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".
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
Set localizador = .FindNext(localizador)
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
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado