Seite 1 von 1

Suchen in Excel

Verfasst: Sa, 22. Okt 2011 19:53
von Werner_Bayern
Servus,

wer kennt sich mit dem Syntax der find-Methode bei Excel aus? Mein Code funktioniert nicht:

Code: Alles auswählen

      oExcel:Workbooks:Open(aDateien[i], 0, .t.)    // öffnen, aber keine Updatelinks und readOnly
      for i1 := 1 to oExcel:Workbooks:Count
         oExcel:Workbooks(i1):activate
         if oExcel:find:execute(cText, 1, 1, -1, -1)
            ... gefunden
            exit
         endif
      next i1
      oExcel:Workbooks(aDateien[i]):close(.f.)
Das erzeugt ein: "Ungültige Anzahl von Argumenten. Bei Ausführung von: find"

Re: Suchen in Excel

Verfasst: So, 23. Okt 2011 2:28
von AUGE_OHR
Werner_Bayern hat geschrieben:wer kennt sich mit dem Syntax der find-Methode bei Excel aus?
...
Das erzeugt ein: "Ungültige Anzahl von Argumenten. Bei Ausführung von: find"
ich "denke" das du einen String brauchst. Siehe auch RESTRICT

Code: Alles auswählen

   cFilter := "[CreationTime] >='" + cStart + "' and [CreationTime] <= '" + cEnd + "'"
   #IFDEF DEFDAYFIND
         currentAppointment := ::oAppointment:Find( cFilter )
   #ELSE
         currentAppointment := ::oAppointment:Restrict( cFilter )
   #ENDIF

Re: Suchen in Excel

Verfasst: So, 23. Okt 2011 12:16
von Rolf Ramacher
wie wäre es so:

Code: Alles auswählen

   oExcel := CreateObject("Excel.Application")
   IF Empty( oExcel )
    MsgBox( "Excel ist nicht installiert" )
    RETURN Nil
   ENDIF

   oExcel:DisplayAlerts := .F.
   oExcel:visible       := .f.

	oBook := oExcel:Workbooks:Open(cFile)
	oSheetDat := oBook:Sheets(cWork)
	oSheetDat:Select()

	oRange:=oSheetDat:Range(cVonBis)
	oRange:select()
	aExcelWerte:=oRange:Value()
dann aExcelwerte durchlaufen oder mit Ascan durchsuchen

Re: Suchen in Excel

Verfasst: So, 23. Okt 2011 13:38
von Werner_Bayern
Servus Jimmy,

so gehts aber auch nicht:

Code: Alles auswählen

cFilter := "'" + cText + ", 1, 1, -1, -1'"
if oExcel:find:Execute(cFilter)

Re: Suchen in Excel

Verfasst: So, 23. Okt 2011 13:51
von Werner_Bayern
Rolf Ramacher hat geschrieben:wie wäre es so:

dann aExcelwerte durchlaufen oder mit Ascan durchsuchen
Danke, aber mit find müsste es doch auch funktionieren, unter Word hab ich es schon hinbekommen, ist rasend schnell.
Mit Deiner Methode schaufle ich u. U. riesen Datenmengen von Excel in Xbase, das spare ich mir mit der Find-Methode.

Re: Suchen in Excel

Verfasst: So, 23. Okt 2011 18:21
von AUGE_OHR
Werner_Bayern hat geschrieben:so gehts aber auch nicht:

Code: Alles auswählen

cFilter := "'" + cText + ", 1, 1, -1, -1'"
em, äh ... das ergibt aber auch keine "Bedingung", oder ?
ansonsten mal den VBA Macro Editor einschalten und es manuell versuchen und dir dann das Marco ansehen.

Re: Suchen in Excel

Verfasst: So, 23. Okt 2011 20:14
von Werner_Bayern
Servus Jimmy,

der vba-Code eines Makros hilft mir nicht wirklich weiter, ich möchte das aus der Excel-Hilfe verwenden:

Code: Alles auswählen

Objekt.Find(Ziel, Startzeile, Startspalte, Endzeile, Endspalte [, GanzesWort] [, Groß/Klein] [, Mustersuche]) As Boolean
Ein Makro sieht aber so aus:

Code: Alles auswählen

Cells.Find(What:="test", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
Das geht nicht über ActiveX?

Re: Suchen in Excel

Verfasst: Mo, 24. Okt 2011 0:44
von AUGE_OHR
hi,
Werner_Bayern hat geschrieben:

Code: Alles auswählen

Objekt.Find(Ziel, Startzeile, Startspalte, Endzeile, Endspalte [, GanzesWort] [, Groß/Klein] [, Mustersuche]) As Boolean
Ein Makro sieht aber so aus:

Code: Alles auswählen

Cells.Find(What:="test", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
Das geht nicht über ActiveX?
ok ich habe es noch mal verglichen und der FIND() / RESTRICT() Befehl ist bei Outlook anderes als bei Excel.
die Parameter sind laut Hilfe doch konstanten, also genau das was dir das Macro gibt.

wenn du nun die englische Hilfe nimmst und die Syntax

Code: Alles auswählen

.Find(What, After, FindLookIn, FindLookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)
mit den Konstanten deines Macro bestückst solltest du zu einem Ergebniss kommen.

Re: Suchen in Excel

Verfasst: Mo, 24. Okt 2011 21:13
von Werner_Bayern
AUGE_OHR hat geschrieben:hi,
Werner_Bayern hat geschrieben:

Code: Alles auswählen

Objekt.Find(Ziel, Startzeile, Startspalte, Endzeile, Endspalte [, GanzesWort] [, Groß/Klein] [, Mustersuche]) As Boolean
wenn du nun die englische Hilfe nimmst und die Syntax

Code: Alles auswählen

.Find(What, After, FindLookIn, FindLookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)
mit den Konstanten deines Macro bestückst solltest du zu einem Ergebniss kommen.
Was verwende ich aber für After, FindLookin etc.??? Ein ActiveCell habe ich doch über ActiveX nicht, hab ich irgendwo gelesen... Ausserdem was ist mit obiger Methode? Ich bräuchte wirklich nur ein boolean als Rückgabe.

Re: Suchen in Excel

Verfasst: Di, 25. Okt 2011 0:53
von AUGE_OHR
Werner_Bayern hat geschrieben:

Code: Alles auswählen

.Find(What, After, FindLookIn, FindLookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)
Was verwende ich aber für After, FindLookin etc.???
das steht in meinem Help File
After Optionaler Variant-Wert. Gibt eine einzelne Zelle an, hinter der die Suche beginnt. Dies entspricht der Position der aktiven Zelle, wenn eine Suche von der Benutzeroberfläche aus durchgeführt wird. Beachten Sie, dass die Suche nach dieser Zelle beginnt; die angegebene Zelle wird erst durchsucht, wenn die letzte Zelle erreicht ist und die Suche vorn fortgesetzt wird. Wenn Sie dieses Argument nicht festlegen, beginnt die Suche nach der Zelle in der oberen linken Ecke des Bereichs.

FindLookIn Optionaler XlFindLookIn-Wert. Gibt an, ob die Formeln oder die angezeigten Werte durchsucht werden sollen.

XlFindLookIn kann eine der folgenden XlFindLookIn-Konstanten sein:
xlFormulas
xlValues

FindLookAt Optionaler XlFindLookAt-Wert. Setzen Sie dieses Argument auf xlWhole, um eine Übereinstimmung des gesamten Inhalts der Zelle mit dem Inhalt des What-Arguments zu erzwingen.

XlFindLookAt kann eine der folgenden XlFindLookAt-Konstanten sein:
xlPart
xlWhole

SearchOrder Optionaler XlSearchOrder-Wert. Gibt an, ob nach Spalten oder nach Zeilen gesucht werden soll.

XlSearchOrder kann eine der folgenden XlSearchOrder-Konstanten sein:
xlByColumns
xlByRows

SearchDirection Optionaler XlSearchDirection-Wert. Gibt die Suchrichtung an.

XlSearchDirection kann eine der folgenden XlSearchDirection-Konstanten sein:
xlNext
xlPrevious

MatchCase Optionaler Boolescher Wert. True, wenn die Suchoperation Groß-/Kleinschreibung beachten soll. Der Standardwert ist False.

MatchByte Optionaler Variant-Wert. Wird nur verwendet, wenn die Unterstützung für Double-Byte-Sprachen ausgewählt oder installiert wurde. True, wenn Double-Byte-Zeichen ausschließlich mit Double-Byte-Zeichen übereinstimmen sollen. False, wenn Double-Byte-Zeichen mit ihren Single-Byte-Entsprechungen übereinstimmen dürfen.

Werner_Bayern hat geschrieben:Ein ActiveCell habe ich doch über ActiveX nicht, hab ich irgendwo gelesen...
siehe mal unter RANGE nach ActiveCell. das ist "gewöhnlich" die "Cell" oder "Bereich" wo dein Cursor steht.
Werner_Bayern hat geschrieben:Ausserdem was ist mit obiger Methode? Ich bräuchte wirklich nur ein boolean als Rückgabe.
keine Ahnung woher du das hast aber bei mir steht :
Sucht nach spezifischen Informationen innerhalb eines angegebenen Bereichs und gibt ein Range-Objekt zurück, das die erste Zelle darstellt, in der sich die Informationen befinden.
Gibt Nothing zurück, wenn keine Übereinstimmungen gefunden werden.