Suchen/Ersetzen - findfirst/findnext - Fragen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

herrdeh
*
Beiträge: 13
Registriert: Di, 19.10.2010 11:31

Suchen/Ersetzen - findfirst/findnext - Fragen

Beitrag von herrdeh »

Hallowelt,

langsam nehmen meine ersten Schritte in OOO Basic Gestalt an: Ziel ist ein Makro, das in einer Liste von Haltestellen alle mit dem Namen "- Bahnhof" findet, dann schaut, ob drunter oder drüber eine bestimmte andere Haltestelle steht (in diesem Falle "- Zündholzfabrik") und dann den gefundenen "- Bahnhof" durch eine eindeutige Bezeichnung (hier zum Beispiel "Ebermannstadt Bahnhof" ersetzt.

Nun habe ich wohl zwei Probleme mit der suche/ersetze-Funktion:

1. Mein Gedanke war, zuerst den Suchbegriff zu finden, die Bedingung (Zündholzfabrik drüber oder drunter) zu prüfen, dann den Suchbereich auf die gefundene Zelle einzugrenzen und hier den Suchbegriff zu ersetzen:

Code: Alles auswählen

oSuchen = oBlatt.createReplaceDescriptor()
oSuchen.setSearchString suchbegr
oTrefferZelle = oBlatt.findfirst (oSuchen)

Fundzeile = oTrefferZelle.CellAddress.row

drueZelle = oBlatt.getCellByPosition(0, Fundzeile-1)

if druezelle.string = druedru then 
oSuchen = oTrefferZelle.createReplaceDescriptor()
oSuchen.setSearchString suchbegr
oSuchen.setreplaceString ersdurch

end if 

druZelle = oBlatt.getCellByPosition(0, Fundzeile+1)

if druzelle.string = druedru then 
oSuchen = oTrefferZelle.createReplaceDescriptor()
oSuchen.setSearchString suchbegr
oSuchen.setreplaceString ersdurch

end if 
Klappt aber nicht - es wird einfach gar nichts ersetzt. Was mache ich falsch?

Zweite Frage
  • * Vewende ich innerhalb der Suchschleife ".findFirst, wird immer nur das erste Auftreten des Suchbegriffs gefunden,
    * vewende ich innerhalb der Suchschleife ".findNext, gibt es eine Fehlermeldung, und
    * vewende ich außerhalb der Suchschleife ".findFirst, und innerhalb der Suchschleife ".findNext", kriege ich auch eine Fehlermeldung.
Daher
  • * Muß ich wirklich zwei Suchprozeduren schreiben (einmal mit findfirst und einmal mit findnext, oder gibt es nicht doch eine einfachere Lösung, und
    * falls ja, was mache ich falsch, daß immer ein Laufzeitfehler (s. Anhang) bei findnext auftritt?
Sorry, wenn das ziemlich viel Holz ist - aber es ist mein allererster VB-Code, und ich habe schon zwei komplette Tage hingehängt… (-;
Dank und herzliche Grüße,

herrdeh

NB.: Hier der komplette Code - und im Anhang die Arbeitsdatei.

Code: Alles auswählen

Sub Hst_suchen()

Dim oDok As Object          
Dim oBlatt As Object        
Dim oZelle As Object
Dim oSuchen as Object
Dim oSuchen2 as Object
Dim suchbegr as string
Dim ersdurch as string
Dim druedru as string
Dim fundinhalt as string
dim Fundzeile as Integer
dim drueZelle as Object
dim oTrefferZelle as object

suchbegr = "- Bahnhof"
ersdurch = "Ebermannstadt Bf"
druedru = "- Zündholzfabrik"

' Xray ThisComponent

'  Aktualisierung freigeben
' ThisComponent.unlockControllers()

oDok = ThisComponent      ' hole Dokumentreferenz
oBlatt = oDok.Sheets(0)   ' adressiere Tabellenblatt
oZelle = oBlatt.getCellByPosition(0,0)  ' Zellreferenz

ThisComponent.UnlockControllers()


' oBer = oBlatt.getCellRangeByName("A1:A12000") 

oSuchen = oBlatt.createReplaceDescriptor()
oSuchen.setSearchString suchbegr
oTrefferZelle = oBlatt.findfirst (oSuchen)

Fundzeile = oTrefferZelle.CellAddress.row

drueZelle = oBlatt.getCellByPosition(0, Fundzeile-1)

if druezelle.string = druedru then 
oSuchen = oTrefferZelle.createReplaceDescriptor()
oSuchen.setSearchString suchbegr
oSuchen.setreplaceString ersdurch

end if 

druZelle = oBlatt.getCellByPosition(0, Fundzeile+1)

if druzelle.string = druedru then 
oSuchen = oTrefferZelle.createReplaceDescriptor()
oSuchen.setSearchString suchbegr
oSuchen.setreplaceString ersdurch

end if 

do

oSuchen = oBlatt.createReplaceDescriptor()
oSuchen.setSearchString suchbegr
oTrefferZelle = oBlatt.findnext (oSuchen)

Fundzeile = oTrefferZelle.CellAddress.row

fundinhalt = oTrefferZelle.string

drueZelle = oBlatt.getCellByPosition(0, Fundzeile-1)

if druezelle.string = druedru then
oSuchen = oTrefferZelle.createReplaceDescriptor()
oSuchen.oTrefferZelle.setSearchString suchbegr
oSuchen.setreplaceString ersdurch

end if 

drueZelle = oBlatt.getCellByPosition(0, Fundzeile+1)

if druezelle.string = druedru then
oSuchen = oTrefferZelle.createReplaceDescriptor()
oSuchen.oTrefferZelle.setSearchString suchbegr
oSuchen.setreplaceString ersdurch

end if 


loop While Not IsNull ( oTrefferZelle ) 

Msgbox "Fäddich !!!!!!!!!"

end sub

Dateianhänge
Bild 2.pdf
(17.43 KiB) 71-mal heruntergeladen
Testfahrpläne Hst-Suche.ods
(40.77 KiB) 383-mal heruntergeladen