Seite 1 von 1

[GELÖST] findfirst() abfangen

Verfasst: Do, 28.03.2013 13:04
von rbernhardt
Hallo,

ich beschäftige mich erst seit kurzem mit Basic-Programmierung in OOo. Mir ist bisher noch nichts eingefallen wie ich ein Findfirst programmtechnisch abfangen kann, oder anders gesagt, wenn ein Findfirst zu keinem Ergebnis kommt bekomme ich, völlig richtig, eine Fehlermeldung.

Die Meldung, die ich bei der Ausführung erhalte ist: BASIC-Laufzeitfehler. Objektvariable nicht belegt.
Markiert ist die Zeile "If not oCell2 = null then"

Mein bisheriger Code sieht so aus:

Code: Alles auswählen

Sub Test
	Dim oDoc as Object
	Dim oSheet as Object
	Dim oCell as Object
	Dim oSheet2 as Object
	Dim oCell2 as Object
	Dim oCell3 as Object
	Dim oSearchDescriptor as Object
	Dim iAnzahl as Integer
	Dim i as Integer
	
	oDoc = ThisComponent
	If oDoc.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) then
		oSheet = oDoc.Sheets.getByName("Sendungssummen")
		oSheet2 = oDoc.Sheets.getByName("Daten")
		for i=1 to 20000
			oCell = oSheet.getCellByPosition(3,i)
			oSearchDescriptor = oSheet2.createSearchDescriptor
			oSearchDescriptor.SearchString = ocell.string
			oCell2 = oSheet2.FindFirst(oSearchDescriptor)
			If not oCell2 = null then
				oCell3 = oSheet2.getCellByPosition(oCell2.row,oCell2.Column + 11)
				msgbox oCell3.string
			EndIf 
		next i 
		
	End If

end Sub
Der Teil innerhalb der zweiten if-Abfrage ist erstmal nicht so wichtig. Ist nur ein Test

Wenn es Verbesserungsvorschläge gibt bitte immer her damit.

Gruß
René

Re: findfirst() abfangen

Verfasst: Do, 28.03.2013 13:37
von juetho
rbernhardt hat geschrieben:Mein bisheriger Code sieht so aus:

Code: Alles auswählen

			oCell2 = oSheet2.FindFirst(oSearchDescriptor)
			If not oCell2 = null then
				oCell3 = oSheet2.getCellByPosition(oCell2.row,oCell2.Column + 11)
				msgbox oCell3.string
			EndIf 
Du musst einfach die Art der Abfrage benutzen, die OO-Basic dafür vorgesehen hat:

Code: Alles auswählen

			If not isNull(oCell2) then
			EndIf 
Gruß Jürgen

Re: findfirst() abfangen

Verfasst: Do, 28.03.2013 13:53
von Karolus
Hallo

Ich bezweifele ob in dem Kontext ein ..SearchDescriptor die sinnvollste Methode ist? -Vor allem solltest du die einmalige Initialisierung von dem Ding vor der Schleife tätigen und nicht 20000 mal in der Schleife.

Kannst du erstmal detailliert erläutern was am Ende rauskommen soll ?

Karolus

Re: findfirst() abfangen

Verfasst: Do, 28.03.2013 14:06
von rbernhardt
Das isNull kannte ich nicht, wird eingesetzt, und die Zuweisung verschiebe ich auch.

Sinn und Zweck des Makros ist es, in einer bestehenden Calc-Datei ein paar Daten aus einer SQL-Datenbank einzufügen und dann zwei Tabellen in der Calc-Datei zusammenzuführen. Dann muss noch eine bedingte Formatierung rein und ich bin fertig.

Diejenige, die damit arbeiten muss, hat nicht wirklich Ahnung wie man mit dem Programm umgeht und da wurde mir gesagt, bau mal was :?