Seite 1 von 1
Suchefunktion durch Makro gestalten
Verfasst: Mi, 06.12.2006 10:25
von Loewelutz
In einem Calc-Dokument soll die Suchefunktion komfortabler gestaltet werden, da die übliche Eingabemaske (Strg + „G“) zu viel vom Dokument verdeckt.
Vorgesehen ist die Zelle „D6“ als Suchfeld. Mit einem Button soll die Suche in dem geöffneten Dokument gestartet werden. Mit einem zweiten Button soll weiter gesucht werden.
Wie ich Schaltflächen erstelle, ist mir bekannt. Allerdings fehlen mir die Kenntnisse zur erforderlichen Makroprogrammierung.
Wie lässt sich dieses Problem am geschmeidigsten lösen? (Open Office 1.1)
Herzlichen Dank ... Lutz
Verfasst: Mi, 06.12.2006 14:06
von Karolus
Hallo Lutz
Wie lässt sich dieses Problem am geschmeidigsten lösen? (Open Office 1.1)
Mit kreativer Nutzung von ->Extras->Makros aufzeichnen.
Da ich nicht sicher bin, wie gut das in OOo1.1 funktioniert, bin ich für dich mal kreativ geworden :
Code: Alles auswählen
sub sucheanfang
suchdok = thisComponent
suchtab = suchdok.sheets(0) '0→erstes Tabellenblatt
suchtext = suchtab.getcellbyPosition(3,5).string '-->D6
suchen(suchtext,0)
end sub
sub weitersuchen
suchdok = thisComponent
suchtab = suchdok.sheets(0) 'erstes Tabellenblatt
suchtext = suchtab.getcellbyPosition(3,5).string '-->D6
suchen(suchtext,1)
end sub
sub suchen(suchtext,w)
rem aufgezeichneter Code von->su&ersetzen-'suchen', nachträglich sind-
rem - die Variblen 'suchtext' und 'w' eingefügt.
rem define variables
dim document as object
dim dispatcher as object
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(17) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false 'hier true, falls alle Blätter durchsucht werden sollen
args1(4).Name = "SearchItem.Backward"
args1(4).Value = false
args1(5).Name = "SearchItem.Pattern"
args1(5).Value = false
args1(6).Name = "SearchItem.Content"
args1(6).Value = false
args1(7).Name = "SearchItem.AsianOptions"
args1(7).Value = false
args1(8).Name = "SearchItem.AlgorithmType"
args1(8).Value = 0 '1→'regulärer Ausdruck'
args1(9).Name = "SearchItem.SearchFlags"
args1(9).Value = 65536
args1(10).Name = "SearchItem.SearchString"
args1(10).Value = suchtext '←da ist die Variable
args1(11).Name = "SearchItem.ReplaceString"
args1(11).Value = ""
args1(12).Name = "SearchItem.Locale"
args1(12).Value = 255
args1(13).Name = "SearchItem.ChangedChars"
args1(13).Value = 2
args1(14).Name = "SearchItem.DeletedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.InsertedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.TransliterateFlags"
args1(16).Value = 1280
args1(17).Name = "SearchItem.Command"
args1(17).Value = w 'w=0→suchen,w=1→weitersuchen
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
end sub
Speichere den Code in der Standardbiliothek
deines Dokuments, und verknüpfe die schaltflächen mit den Subs 'sucheanfang' und 'weitersuchen'.
Gruß Karo
Makro - Suchen
Verfasst: Mi, 06.12.2006 16:10
von Loewelutz
Super Karo, da ziehe ich den Hut!
Durch Dein Makro bin ich kurz vor dem Ziel. Ob Du mir noch bei der Feinabstimmung helfen könntest?
Ich habe beide Schaltflächen „suchen“ und „weitersuchen“ mit dem entsprechenden Makros verknüpft. Beim Auslösen des ersten Makro erhalte ich die Fehlermeldung:
„BASIC-Laufzeitfehler. Argument ist nicht optional“
Danach die Schaltfläche „Weitersuchen“ betätigt und der Suchbegriff im Calc-Dokument wird schwarz hinterlegt (auch Mehrfachtreffer). Allerdings springt das Programm noch nicht automatisch zur entsprechenden Stelle im Dokument (Datei wird später einmal mehrere tausend Zeilen umfassen).
Nun müssen es natürlich nicht unbedingt zwei Schaltflächen sein. Ich habe mir dies bisher nur aus der ursprünglichen `Suchefunktion` abgeschaut.
Ließe sich die Sache auch so lösen, dass nach Aktivierung einer einzelnen Schaltfläche die Markierung zunächst zum ersten Treffer wechselt, nach einer erneuten Aktivierung zur zweiten u.s.w.? Das wäre genial
Herzlicher Gruß ... Lutz
Verfasst: Mi, 06.12.2006 17:58
von Karolus
Hallo Lutz
Ich kann leider nicht die Fehlermeldung nachvollziehen, die du beim Auslösen von 'sucheanfang' erhälst. Bei mir tut dieses Makro genau das was du :
Ließe sich die Sache auch so lösen, dass nach Aktivierung einer einzelnen Schaltfläche die Markierung zunächst zum ersten Treffer wechselt, nach einer erneuten Aktivierung zur zweiten u.s.w.? Das wäre genial.
-hier wünscht, nämlich bei jedem Tastendruck zum nächsten Treffer wechseln.
Was passiert bei dir wenn du die Schaltfläche mehrmals betätigst ?
Falls nur die andere Schaltfläche funktioniert, hast du evtl. irrtümlich die erste Schaltfläche mit mit der Sub 'suchen(.,.,.)' verknüpft, statt mit 'sucheanfang' ?
Gruß
Makro für Suchefunktion
Verfasst: Do, 07.12.2006 07:42
von Loewelutz
Hey Karo,
Du hast natürlich absolut Recht. Ich hatte irrtümlich die erste Schaltfläche mit der Sub 'suchen' verknüpft, statt mit 'sucheanfang' ?
Nun funktioniert alles perfekt! Ich hatte nicht damit gerechnet, dass sich mein Idealwunsch verwirklichen lässt.
Tausend Dank !!! Lutz
Sorry
Verfasst: Sa, 14.04.2007 16:52
von funnyzocker
Sorry das ich das alte Thema nochmals hochhole.
Aber ich habe das gerade dank der Suche im Forum gefunden.
Ich kann genau das Makro sehr gut gebrauchen nur leider habe ich das Problem das nicht alle Tabellen durchsucht werden.
Ich habe eine Hauptübersicht und je Monat 1 Tabelle.
Nun soll in der Hauptübersicht in Suchformular wo ich einen Auftragsnummer eingeben kann (Die ja unique) ist. Nach Klick sollen alle Tabellen in Durchsucht werden. Leider findet das Makro immer keine Einträge.
Habe ein Textfeld und eine Schaltfläche. Die Schaltfläche Funktioniert (Also es wird die suche ausgeführt) Aber er sucht nicht nach dem eintrag in dem Textfeld. Muss ich die beiden Verknüpfen oder wie?
Verfasst: Sa, 14.04.2007 17:40
von Karolus
Hallo
Du möchtest alle Tabellen durchsuchen, dafür hatte ich an entsprechender Stelle einen Kommentar eingetragen:
Code: Alles auswählen
...
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false 'hier true, falls alle Blätter durchsucht werden sollen
...
ändere die Zeile auf:
Gruß Karo
Verfasst: Sa, 14.04.2007 17:46
von turtle47
Hallo Funnyzocker,
Habe ein Textfeld und eine Schaltfläche.
Wer hat denn was von einem Textfeld geschrieben.
Der zu suchende Text steht in Zelle D6!
Vorgesehen ist die Zelle „D6“ als Suchfeld
Code: Alles auswählen
suchtext = suchtab.getcellbyPosition(3,5).string '-->D6
Viel Erfolg.
Jürgen
TExtfeld
Verfasst: Sa, 14.04.2007 18:58
von funnyzocker
Kann ich das irgendwie ändern das es über das Textfeld läuft?
Sieht besser aus
Verfasst: Sa, 14.04.2007 19:51
von Karolus
Hallo
Gib doch in den Einstellungen des Textfeldes unter 'Daten'-->'Verknüpfte Zelle'
die Zelle D6 ein.
Gruß Karo
Geht ja nicht
Verfasst: Sa, 14.04.2007 20:01
von funnyzocker
Wenn ich das Textfeld mit der Zelle Verknüpfe, wird wenn ich in das Textfeld was eingebe das selbe in der Zelle eingegeben und er findet als erstes das.
Er soll aber nur das Finden was wirklich da ist und nicht was ich als Suche eingegeben habe.
Verfasst: Sa, 14.04.2007 21:36
von Karolus
Hallo
Tausch mal die ersten beiden Makros gegen:
Code: Alles auswählen
sub sucheanfang
suchdok = thisComponent
suchtab = suchdok.sheets(0) '0→erstes Tabellenblatt
odraw1= suchtab.drawpage
form1=odraw1.forms.getbyIndex(0)
oContr=form1.getbyname("TextBox")
suchtext = oContr.Text
'suchtext = suchtab.getcellbyPosition(3,5).string '-->D6
suchen(suchtext,0)
end sub
sub weitersuchen
suchdok = thisComponent
suchtab = suchdok.sheets(0) 'erstes Tabellenblatt
odraw1= suchtab.drawpage
form1=odraw1.forms.getbyIndex(0)
oContr=form1.getbyname("TextBox")
suchtext = oContr.Text
'suchtext = suchtab.getcellbyPosition(3,5).string '-->D6
suchen(suchtext,1)
end sub
Gruß Karo
Danke
Verfasst: So, 15.04.2007 12:29
von funnyzocker
Ja Danke nun Funktioniert es so wie ich es mit vorgestellt habe.
Vielen Dank