suchen spezial

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: suchen spezial

Re: suchen spezial

von clag » Do, 12.03.2009 15:12

Hallo Charly,

prima,
jetzt funktioniert das Makro genau wie gewünscht

nochmal Danke! für die Unterstützung

auch an Turtle47 der ja die Basis geschaffen hat !

Re: suchen spezial

von Charly » Do, 12.03.2009 14:48

Hallo Clag!

Die letzte Zeile der Tabelle ist eine schwierige Geburt. Ich hänge jetzt an den Suchbereich noch eine leere Zeile an. Jetzt sollte er den Kreis auch dann machen, wenn der vorherige Treffer in der letzten beschriebenen Zeile steht. Ich spare mir dadurch auch die If-Abfragen.

Code: Alles auswählen

Global RegSearch as variant
   
     Sub Suche()
       myDoc = thisComponent
       myView = myDoc.CurrentController
       mySheet = myView.ActiveSheet
       
       Cursor = mySheet.createCursor
       Cursor.goToEndOfUsedArea(0)
       Endzeile = Cursor.getRangeAddress().EndRow + 1
       oSelect=ThisComponent.CurrentSelection.getRangeAddress
       StartSpalte=oSelect.StartColumn
       EndSpalte=oSelect.EndColumn

       StartZeile =oSelect.StartRow + 1
         
       Bereich = mySheet.getCellRangeByPosition(Startspalte,Startzeile,Endspalte,Endzeile)
       
       RegSearch = InputBox("Suchbegriff eingeben", "Input Suchen", RegSearch)
       
       For I= 1 to 2
       SearchDesc = Bereich.createSearchDescriptor
       SearchDesc.SearchString = RegSearch
       SearchDesc.SearchCaseSensitive = false
       SearchDesc.SearchRegularExpression = True
       Found = Bereich.findFirst(SearchDesc)
       
       If Not isnull(Found) then
       myView.Select(found)
       exit sub
       end if
      
       Bereich = mySheet.getCellRangeByPosition(Startspalte,11,Endspalte,Startzeile-1)
       next I
       MSGBOX ("Der Suchbegriff wurde nicht gefunden")
    End Sub
Gruß
Charly

Re: suchen spezial

von clag » Do, 12.03.2009 13:38

Hi Charly,

ok die Fehlemeldung ist weg aber .....
die Suche wird leider trotzdem nicht fortgesetzt

vielleicht schaust nochmal genau :wink:

Re: suchen spezial

von Charly » Do, 12.03.2009 13:18

Hallo Clag!
Clag hat geschrieben: wenn der Treffer in der letzten Zeile des DatenBereich liegt
und man will dann das Makro erneute aufrufen, gibt es folgende Fehlermeldung

BASIC-Laufzeitfehler...
Da war noch ein Bug. Den habe ich jetzt mit einer Abfrage beseitigt.

Code: Alles auswählen

 Global RegSearch as variant

     Sub Suche()
       myDoc = thisComponent
       myView = myDoc.CurrentController
       mySheet = myView.ActiveSheet
       
       Cursor = mySheet.createCursor
       Cursor.goToEndOfUsedArea(0)
       Endzeile = Cursor.getRangeAddress().EndRow
       oSelect=ThisComponent.CurrentSelection.getRangeAddress
       StartSpalte=oSelect.StartColumn
       EndSpalte=oSelect.EndColumn
   
       StartZeile =oSelect.StartRow+1
       
       If StartZeile = Endzeile+1 then
       Startzeile = Endzeile
       end if
       
       Bereich = mySheet.getCellRangeByPosition(Startspalte,Startzeile,Endspalte,Endzeile)
       
       RegSearch = InputBox("Suchbegriff eingeben", "Input Suchen", RegSearch)
       
       For I= 1 to 2
       SearchDesc = Bereich.createSearchDescriptor
       SearchDesc.SearchString = RegSearch
       SearchDesc.SearchCaseSensitive = false
       SearchDesc.SearchRegularExpression = True
       Found = Bereich.findFirst(SearchDesc)
       
       If Not isnull(Found) then
       myView.Select(found)
       exit sub
       end if
       If Startzeile < Endzeile then
       Startzeile = Startzeile-1
       end if
       Bereich = mySheet.getCellRangeByPosition(Startspalte,11,Endspalte,Startzeile)
       next I
       MSGBOX ("Der Suchbegriff wurde nicht gefunden")
    End Sub

Re: suchen spezial

von clag » Do, 12.03.2009 13:02

Hallo Charly,

jetzt läuft das Makro wunderbar "rund" oder im Kreis oder wie jetzt nun :D

allerdings ist da noch immer ein kleines Problem,
war vorher schon, aber ich hatte gehofft mit der Änderung würde es verschwinden, aber leider nicht

wenn der Treffer in der letzten Zeile des DatenBereich liegt
und man will dann das Makro erneute aufrufen, gibt es folgende Fehlermeldung

BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten
Type: com.sun.starlang.IndexOutOfBondsException
Message: .


und diese CodeZeile wird mit dem Pfeil markiert

Code: Alles auswählen

 Bereich = mySheet.getCellRangeByPosition(Startspalte,Startzeile,Endspalte,Endzeile)
(*.jpg gehen ja gerade nicht hochzuladen)

Re: suchen spezial

von Charly » Do, 12.03.2009 11:41

Hallo Clag!

Teste mal das:

Code: Alles auswählen

 Sub Suche()
       Global RegSearch as variant
       myDoc = thisComponent
       myView = myDoc.CurrentController
       mySheet = myView.ActiveSheet
       
       Cursor = mySheet.createCursor
       Cursor.goToEndOfUsedArea(0)
       Endzeile = Cursor.getRangeAddress().EndRow
       oSelect=ThisComponent.CurrentSelection.getRangeAddress
       StartSpalte=oSelect.StartColumn
       EndSpalte=oSelect.EndColumn
       StartZeile =oSelect.StartRow+1
       Bereich = mySheet.getCellRangeByPosition(Startspalte,Startzeile,Endspalte,Endzeile)
       
       RegSearch = InputBox("Suchbegriff eingeben", "Input Suchen", RegSearch)
       
       For I= 1 to 2
       SearchDesc = Bereich.createSearchDescriptor
       SearchDesc.SearchString = RegSearch
       SearchDesc.SearchCaseSensitive = false
       SearchDesc.SearchRegularExpression = True
       Found = Bereich.findFirst(SearchDesc)
       
       If Not isnull(Found) then
       myView.Select(found)
       exit sub
       end if
       Bereich = mySheet.getCellRangeByPosition(Startspalte,11,Endspalte,Startzeile-1)
       next I
       MSGBOX ("Der Suchbegriff wurde nicht gefunden")
    End Sub
Gruß
Charly

Re: suchen spezial

von clag » Do, 12.03.2009 11:15

Hallo Leutz, Hallo Charly,

das Tuning hat sich gelohnt der komplette Durchgang: Suchstart in Z11 bis Treffer in Z20.000 unter 1 Sek !!

das ist Spitze !

einen Wunsch habe ich aber noch
zZ wird scheinbar von der aktuellen Zeile nur abwärts gesucht ?

kann man die Suche im Kreis laufen lassen, also wenn letzte Zeile ereicht ist sprung nach (oben)Z11 und weiter suchen ?
(ohne Treffer könnte das natürlich in eine endlos Schleife führen hm...)

also dann vielleicht noch so etwas dazu:

Suche>
BereichsEnde ereicht
sprung nach Oben Z11
auf "SprungFlag" prüfen:
wenn vorhaden: Meldung "keine Treffer", SprungFlag löschen, Makro beenden
Sonst "SprungFlag" setzen
weiter suchen
Treffer: Sprungflag löschen, TrefferZelle zeigen

oder so :D

Re: suchen spezial

von Charly » Do, 12.03.2009 09:52

Hallo Clag!

Ich habe mal versucht, das Makro von Turtle zu verkürzen. Es scheint zu funktionieren. Aber teste du auch mal.

Code: Alles auswählen

Global RegSearch as variant
Sub Suche1()
       myDoc = thisComponent
       myView = myDoc.CurrentController
       mySheet = myView.ActiveSheet
       
       Cursor = mySheet.createCursor
       Cursor.goToEndOfUsedArea(0)
       Endzeile = Cursor.getRangeAddress().EndRow
       oSelect=ThisComponent.CurrentSelection.getRangeAddress
       StartSpalte=oSelect.StartColumn
       EndSpalte=oSelect.EndColumn
       StartZeile =oSelect.StartRow+1
       Bereich = mySheet.getCellRangeByPosition(Startspalte,Startzeile,Endspalte,Endzeile)
       
       RegSearch = InputBox("Suchbegriff eingeben", "Input Suchen", RegSearch)
       SearchDesc = Bereich.createSearchDescriptor
       SearchDesc.SearchString = RegSearch
       SearchDesc.SearchCaseSensitive = True
       SearchDesc.SearchRegularExpression = True
       Found = Bereich.findFirst(SearchDesc)
       
       myView.Select(found)
       
    End Sub
Für das Suchen in Formeln habe ich allerdings auch keine Lösung gefunden.

Gruß
Charly

Ich habe nachträglich noch die Globale Deklaration von RegSearch eingetragen und das +1 bei der EndSpalte entfernt.

Re: suchen spezial

von clag » Do, 12.03.2009 08:55

Moin moin liebe Leutz,

ich habe noch so 2-.... Fragen zu dem Makro, die aus meinem Unwissen resultieren

sind RegSearch und RegSearch1 beides Variablen ?

könnte

Code: Alles auswählen

If RegSearch <> "" then
   RegSearch1 = RegSearch
   end if
nicht auch einfach

Code: Alles auswählen

RegSearch = RegSearch
sein

bzw könnte man nicht ganz darauf verzichtem, und gleich diese Zeile

Code: Alles auswählen

RegSearch = InputBox("Suchbegriff eingeben", "Input Suchen", RegSearch1)
in

Code: Alles auswählen

RegSearch = InputBox("Suchbegriff eingeben", "Input Suchen", RegSearch)
ändern

mein Gedanke dabei ist wenn das Makro erstmals aufgerufen wird ist "RegSearch" leer,
wird ein String in der InputBox eingegeben dann RegSearch mit "String" belegt
bis bei bei einem erneuten Makro aufruf ein neuerString eingegeben wird,
wenn nicht dann bleibt RegSearch unverändert ?

wenn das Makro im Angezeigten Bereich eine passende Zelle findet geht's fast ohne delay
aber wenn der nächste treffer ein paar Hundert Zellen weiter ist dauert es einige Sekunden
bis die Zeile/Zelle angezeigt wird

das

Code: Alles auswählen

for i = Start_Row to 500 ' bis Zeile 501 suchen
sieht irgendwie nach einer Schleife aus
aus meiner ExcelVB zeit kann ich mich entsinnen Schleifen machen Makros lahm
könnte man nicht einen Bereich bzw gleich die ganze Spalte benennen um die Schleife zu vermeiden?
auch weil die Tabelle in der ich das Makro anwenden will über 20.000 Zeilen hat
zZ habe ich die 500 erstmal durch 20.000 ersetz.


diese Xray liste von Turtle47 zeigt mögliche Optionen die an Search übergeben werden können ?
aber da seh ich nichts was der Einstellung in "Werten" oder "Formeln" suchen entsprechen könnte oder ?

ich hoffe, ich habe euch jetzt mit der Fragerei nicht vergrault
und könnt mein VerständnisDunkel etwas aufhellen :)

Re: suchen spezial

von turtle47 » Mi, 11.03.2009 10:11

Hallo Zusammen,

es scheint wiklich so, dass man die Suchoptionen extra noch einstellen muss.
Mit der Formel ist mir gestern nicht aufgefallen.

Ich habe jetzt leider keine Zeit mehr zum testen.
Xray zeigt mir folgende möglichen Suchoptionen an:

Code: Alles auswählen

SearchDesc.SearchBackwards
SearchDesc.SearchByRow
SearchDesc.SearchCaseSensitive
SearchDesc.SearchRegularExpression
SearchDesc.SearchSimilarity
SearchDesc.SearchSimilarityAdd
SearchDesc.SearchSimilarityExchange
SearchDesc.SearchSimilarityRelax
SearchDesc.SearchSimilarityRemove
SearchDesc.SearchString
SearchDesc.SearchStyles
SearchDesc.SearchType
SearchDesc.SearchWords
Jürgen

Re: suchen spezial

von Charly » Mi, 11.03.2009 10:01

Hallo Clag!

Ich werde dir heute abend die Datei hochladen. Vorher kannst du noch probieren, ob der Suchdescriptors zu fein eingestellt ist. Bei mir hat er nämlich auch nichts gesucht, wenn ich nach Großbuchstaben gesucht habe und in der Spalte waren nur Kleinbuchstaben.

setze folgenden Befehl:

Code: Alles auswählen

SearchDesc.SearchCaseSensitive = true
auf

Code: Alles auswählen

SearchDesc.SearchCaseSensitive = false
Ansonsten bis abend.

Gruss
Charly

Re: suchen spezial

von clag » Mi, 11.03.2009 09:34

Hallo,

jetzt hab ich erkannt wo das Problem liegt.... (zumindest teilweise zwischen meine Ohren) :lol:
nach dem ich das Makro in die "Testdatei" eingebaut habe funktioniert es auch hier.

da wo es nicht funktionierte war der Inhalt der Zelle das Ergebniss einer Formel,
aber auch da müsste es doch eigentlich funktionieren !?
jedenfalls die normale Suche tut es, wenn man suchen in Werten einstellt.

Re: suchen spezial

von clag » Mi, 11.03.2009 08:28

Hallo Charly,

erst "Ahhh" :)
Charly hat geschrieben:Bei mir funktioniert das Makro einwandfrei. Meinen Dank dafür für Jürgen.
und dann doch "och nö" :(
Charly hat geschrieben:Ich habe sie in unsere Testdatei eingebaut. Leider merke ich gerade, dass ich sie vom Büro aus nicht mehr hochladen kann. Ein neuer Virenscanner verhindert das.
na da muss ich mich dann wohl bis Feierabend gedulden :D

Re: suchen spezial

von Charly » Mi, 11.03.2009 08:08

Hallo Clag!

Bei mir funktioniert das Makro einwandfrei. Meinen Dank dafür für Jürgen.

Ich habe sie in unsere Testdatei eingebaut. Leider merke ich gerade, dass ich sie vom Büro aus nicht mehr hochladen kann. Ein neuer Virenscanner verhindert das.



Gruß
Charly

Re: suchen spezial

von clag » Mi, 11.03.2009 07:41

Hallo Jürgen,

erst einmal danke für deine "Action" :D

leider rührt sich hier bei mir die Markierung nicht von der Stelle wenn ich das Makro aufrufe,
egal was für einen Suchstring ich in die "InputBox" eingebe :(

was könnte da schief laufen ?


edit: habe gerade bemerkt, in einer Spalte mit Zahlen funktioniert es doch,
aber bei Text tut sich nix

Nach oben