Seite 2 von 2

Verfasst: Do, 01.12.2005 16:34
von Paule
:)

Ich habe auf dem Tabellenblatt "Ansicht" 2 Listboxen
Die erste bezieht sich auf die Spaltenüberschriften die sich auf die Auswahl davor (über Dialog) bezieht (Deshalb im code T1 und T2),und gibt eine Zahl aus.

Wenn eine Spalte der ersten Box ausgewählt wurde soll die zweite Box die Inhalte der Spalte zeigen. Und die sind ja Variabel. Deshalb das Makro.



Danach soll wenn ein Eintrag ausgewählt wurde die gesamte Zeile ausgegeben werden (nur um den Zweck zu erwähnen...).

grüße Paule

Verfasst: Do, 01.12.2005 17:15
von Toxitom
Hey Paule,

ähmmm, leider noch nicht verstanden.
Also, du hast eine Listbox, die die Zahlen 1-8 drin hat.
Jetzt wählt man eine aus, - diese liefert einen Code (Zahl).
Je nach Zahl soll jetzt in der zweiten Listbox die Inhalte der Spalte aufgeführt werden, deren Nummer der Zahl entspricht.
IN der Spalte können Inhalte in den Zellen stehen, maximal 65565 (wirklich so viel???) , wobei diese jedoch nicht kontinuierlich gefüllt sind. Leere Zellen sollen nicht in die Auswahlbox übernommen werden.
Soweit richtig?
Du hast 8 mögliche Spalten? kannst du die benennen? (als A-H oder so?) und wirklich so viele mögliche Einträge? Da geht die Performance ganz schön in die Knie....
Und was war mit dem T1 und T2? Das habe ich nicht verstanden...

Gruss
Thomas

Verfasst: Fr, 02.12.2005 08:18
von Paule
Morgen Thomas,
Also, du hast eine Listbox, die die Zahlen 1-8 drin hat.
So ähnlich, die Lisbox hat die Spaltenüberschriften drin und gibt die Zahlen 1-8 auf "Ansicht"(Tabelle3), in Zelle B3 aus.

IN der Spalte können Inhalte in den Zellen stehen, maximal 65565 (wirklich so viel???) , wobei diese jedoch nicht kontinuierlich gefüllt sind. Leere Zellen sollen nicht in die Auswahlbox übernommen werden.
Soweit richtig?
Ja richtig, aber die Zellen sind durchgehend gefüllt, also ohne Leerzellen, deswegen sind die 65535 Zeilen auch egal da das Makro bei der ersten leeren Zeile abbricht.
Du hast 8 mögliche Spalten? kannst du die benennen? (als A-H oder so?)
FO bis FV
Und was war mit dem T1 und T2?
:) T1 = Tabelle1, T2 = Tabelle2

Gruß

Paule

Verfasst: Fr, 02.12.2005 08:56
von Toxitom
Morgen Paule,

ok, es kommt noch ein bischen mehr Licht ins Dunkle. Noch ein paar Nachfragen:

Listbox 1 auf Tabelle "Ansicht" enhält Spaltenüberschriften (oder was auch immer). Dort wählt man nun einen speziellen Eintrag, dann soll Listbox 2 die entsprechenden Einträge der zugeordneten Spalte FO bis FV - identifiziert durch die zurückgegebene Nummer - enthalten?
Wozu speicherst du die Nummer in der Zelle B3 ? Brauchst du sie sonst noch irgendwie?
Üblicherweise würdest du doch ein Makro starten in Kombination des Ereignisses "modifiziert" der ersten Listbox. Dann kannst du doch direkt die Auswahl erhalten - wozu zwischenspeichern?

OK, der Code ist nicht so kompliziert, bin aber erst Samstag wieder online. Also bitte bis dahin gedulden.
Gib mir bitte noch den Code für deine T1List - nur der Vollständigkeitshalber.

Gruss
Thomas

Verfasst: Fr, 02.12.2005 09:07
von Paule

Listbox 1 auf Tabelle "Ansicht" enhält Spaltenüberschriften (oder was auch immer). Dort wählt man nun einen speziellen Eintrag, dann soll Listbox 2 die entsprechenden Einträge der zugeordneten Spalte FO bis FV - identifiziert durch die zurückgegebene Nummer - enthalten?
Jep.
Wozu speicherst du die Nummer in der Zelle B3 ? Brauchst du sie sonst noch irgendwie?
Ja ein Paar Formeln beziehen sich darauf.
Gib mir bitte noch den Code für deine T1List - nur der Vollständigkeitshalber.
der einzige unterschied zu T2List ist nur das überall wo T2 steht T1 ins Makro muss, die tabellen haben die gleiche Struktur.

Viele grüße

Paule

Verfasst: Sa, 03.12.2005 11:37
von Toxitom
Hey Paule,

so, hier nun das komplette Makro (oder besser die beiden). Das alles sollte ausreichen :wink:

Code: Alles auswählen

dim oDoc as object   'global definiert

REM dies Makro aufrufen!
Sub Liste2Start   
	dim sTab as string, iSpalte as integer
	oDoc = thisComponent
	osheet = oDoc.sheets.getByName("Ansicht")
	sTab = oSheet.getCellByPosition(17,0).string
	REM ich gehe davon aus, dass in Zelle(1,2) die Zahl als
	REM String (Text) steht!
	iSpalte = CInt(oSheet.getCellByPosition(1,2).string) 
	Liste2Fuellen(sTab, iSpalte)  'Aufruf des nächsten Makros
End Sub

sub Liste2fuellen(sTab as String, iSpalte as integer)
	Dim oListBox2 as Object, oForm as Object
	oForm = oDoc.sheets.getbyname("Ansicht").Drawpage.Forms(0)
	oListBox2 = oForm.getByName("ListBox2") 
	REM Spaltenarray erzeugen
	aSp = array( ,"FO", "FP", "FQ", "FR", "FS", "FT", "FU", "FV")
	REM Tabellenblatt auswählen
	oSheet2 = oDoc.sheets.getByName(sTab)
	for i = 3 to 65535
		oZelle = oSheet2.getCellRangeByName(aSp(iSpalte) & i)
		if oZelle.getType() then
		  sListe = sListe & ";" & oZelle.string  'wenn Zelle nicht leer
		else 
		  exit for  'wenn Zelle leer
		end if
	next
	sListe = right(sListe, len(sListe)-1) 'den führenden Trenner löschen
	aListe2 = split(sListe, ";")          'Umwandlung in Array
	oListbox2.stringItemList = aListe2()  'eintragen in Liste
end sub
Gruss
Thomas

Verfasst: Sa, 03.12.2005 13:08
von Paule
Wow, klappt schnell und sauber!

Brauch wohl noch ein bischen den Code Vollständig zu vertehen..Aber übung macht den Meister :)

Vielen Dank

Paule