Starbasic: Array füllen, dann Werte in Dialog

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

Moderator: Moderatoren

schrödingerkatze
**
Beiträge: 22
Registriert: Do, 03.08.2006 21:10

Starbasic: Array füllen, dann Werte in Dialog

Beitrag von schrödingerkatze »

Hallo mal wieder,
ich stehe auf dem Schlauch und bin wahrscheinlich einfach nur zu blöde.

Folgende Aufgabe: Kundensuche (sind alle in einem Calc-Sheet) nach PLZ. Da mehrere Kunden dieselbe PLZ haben können (max. mal 3 oder 4, viel mehr werden es auch nie werden), sollen alle Kunden mit der entsprechenden PLZ in einen Dialog gepackt werden, wo der Bearbeiter im Versandt dann anklicken kann, welcher Kunde von denen es nun ist.

Code: Alles auswählen

Sub KundenSuche()
	Dim sDateiNamen() As String
	Dim iDateienAnzahl As Integer
	Dim sGefundenerDateiName As String

	oDoc 			= ThisComponent
	oRechnung		        = oDoc.Sheets.getByName("Rechnung")            ' aus dem Tabellenblatt "Rechnung" holt sich das Makro die PLZ
	oZelle			= oRechnung.getCellByPosition(1, 3)                ' die Zelle, in der die PLZ steht
	strPLZ			= oZelle.String                                               ' ist ein String, weil es auch so etwas wie A-8010 (für Kunden in Osterreich) gibt
	
	oKunden 	= oDoc.Sheets.getByName("Kunden")                               ' das Sheet mit den Kundendaten
	oKundenPLZ	= oKunden.getCellRangeByName("E1")                      
	oCursor			= oKunden.createCursorByRange(oKundenPLZ)   
	oCursor.collapseToCurrentRegion
	intZeilen		= oCursor.getRangeAddress().EndRow + 1

	Dim sKunden() As String
	Dim iKundenZahl As Integer
	Dim sGefundenerName As String

	iKundenZahl = 0
	sGefundenerKunde = ""
	
	For i = intZeilen To 0 Step -1		                                                                                                        ' zählt von der letzten belegten Zeile in den Kundendaten rückwärts 
			
	If oKunden.getCellByPosition(4, i).String <> "" And oKunden.getCellByPosition(4, i).String = strPLZ Then		' sucht PLZ, falls gefunden, werden Daten kopiert
		
		Redim sKunden (iKundenZahl) As String
		sGefundenerName = oKunden.getCellByPosition(1, i).String
		msgbox sGefundenerName

		sKunden(iKundenZahl) = sGefundenerName
		msgbox ": " & sKunden(iKundenZahl)                     ' zum Debuggen; zeigt den richtigen Wert
		iKundenZahl = iKundenZahl + 1
		msgbox "zahl: " & iKundenZahl                             ' zum Debuggen, zeigt den richtigen Wert
	End If
		
	Next
	
	For iKunden = 0 To UBOUND(sKunden())
		sGefundenerName = sGefundenerName & Chr(13) & sKunden(iKunden)
		MsgBox "Folgende Kunden haben die PLZ: " & strPLZ & " " & sKunden(iKunden)
		msgbox iKunden                                                                                                  ' zum Debuggen, zeigt nicht den richtigen Wert     <============
	Next
End Sub
Irgendetwas mache ich da so richtig falsch, mein Problem ist beim Pfeil; da habe ich plötzlich keinen String mehr.

Und dann würde mich noch interessieren, wie ich das alles in einen Dialog bekomme, wo per Radio-Button ausgewählt werden kann, welcher Kunde nun genau gemeint ist.

Für Hilfe wäre ich sehr dankbar. Mein Tag ist das heute jedenfalls nicht.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Starbasic: Array füllen, dann Werte in Dialog

Beitrag von DPunch »

Servus

Vermutlich wird das Ändern von

Code: Alles auswählen

Redim sKunden (iKundenZahl) As String
in

Code: Alles auswählen

Redim Preserve sKunden (iKundenZahl) As String
schon ausreichen - ohne das Schlüsselwort Preserve erstellst Du jedesmal ein neues, leeres Array mit iKundenZahl als oberer Grenze und befüllst dann das letzte Element des Arrays mit dem gefundenen Namen.
Und dann würde mich noch interessieren, wie ich das alles in einen Dialog bekomme, wo per Radio-Button ausgewählt werden kann, welcher Kunde nun genau gemeint ist.
Erstell Dir einen simplen Dialog mit einem Listenfeld (ohne Mehrfachselektion) und setze darin StringItemList = sKunden.

Code: Alles auswählen

	oDlg = CreateUnoDialog(DialogLibraries.Standard.meinDialog)
	oResultListboxModel = oDlg.getControl("meineErgebnisListbox").Model
	oResultListboxModel.StringItemList = sKunden
	oDlg.execute
Da Du vorher die Anzal der Ergebnisse nicht kennst, bindest Du Dir mit mit dynamisch erstellten RadioButtons nur mehr Ärger ans Bein, als Dir lieb sein kann.

Grundsätzlich kann ich Dir statt des Iterierens über die Zellen ausserdem noch den SearchDescriptor und die nette Methode .getDataArray ans Herz legen.
Antworten