Listenfeld aus Dialog in Tabellenblatt übertragen

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: Listenfeld aus Dialog in Tabellenblatt übertragen

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Mo, 08.06.2015 13:05

Hallo Ich schon wieder.

Ich hätte da nochmal eine Frage zu...
Nun möchte ich, dass mir die Hersteller in die Datenblätter verteilt werden. Und zwar in die wo auch ein "X" gesetzt ist. Also bei Hersteller 100% sind bei 2015, 2016 und 2017 X gesetzt, dann soll der Hersteller zu Datenblatt 2015, Datenblatt 2016 und Datenblatt 2017 usw.... Mit einer Wenn-Funktion klappt das nicht, weil es dann ziwschen den Herstellern Lücken gibt.



Es gibt 18 der Checkboxen, also:

namenAllerCheckboxen = Array("Name1", "Name2", ...)

For i = 0 To 17
If <die Checkbox namens "namenAllerCheckboxen(i)" aktiv> Then
'tue was zu tun ist
End If
Next i

da gibt es keine Lücken.
Das versteht ich nicht richtig. Irgendwie steh ich heute aufm Schlauch...ich hab versucht mir für dieses Probelm eine andere Lösung zu basteln. Das sieht so aus (ist nur ein Schnipsel)

Code: Alles auswählen

	Ctl_CB2015 = Dlg_Hersteller.GetControl("CB2015")
	if 	Ctl_CB2015.state = 1 then
		mySheet.getCellRangeByName("E" & End_Row ).String = Txt_ALL_Tickboxes_On
		end if
	if 	Ctl_CB2015.state = 0 then
		mySheet.getCellRangeByName("E" & End_Row ).String = Txt_ALL_Tickboxes_Off
		end if
	_______________________________________________________________________________
	'ab hier soll der neu angelegte Hersteller in ein anderes Tabellenblatt geschrieben werden
	if 	mySheet.getCellRangeByName("E" & End_Row ).String = "X" then
		mysheet1.getCellRangeByName("B" & End_Row ).String = mysheet.getCellRangeByName("A" & End_Row ).String
		End If	
Das funzt soweit auch. ABER da der neue Hersteller ja am Ende der Tabelle eingefügt wird. zb. Zeile 914....fügt er auch in dem anderen Tabellenblatt zb. Datenblatt 2015 in der Zeile 914 ein obwohl diese Tabelle nur bis 777 oder so geht. Es soll aber am Ende der Tabelle eingefügt werden. Was muss ich Basic erzählen, damit es das macht, was ich möchte?! :D

Danke schonmal

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Sa, 30.05.2015 19:42

Es geht. Ich danke dir vielmals. :D

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Stephan » Sa, 30.05.2015 19:08

ich sehe in Deinem Code nicht die Stelle wo in der Listbox selektiert werden soll.
Ein Eintrag in der Listbox wird jedoch allgemein so selektiert, z.B. der Eintrag "ACROS":

Code: Alles auswählen

Dlg_Hersteller.getControl("ListBox_Herst").selectItem("ACROS", True)
Gruß
Stephan

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Sa, 30.05.2015 18:18

Nochmal Hallo

Ich habe dein Makro jetzt soweit an meine angepasst. Funzt alles prima. Jetzt hab ich nur noch ein Problem mit einer anderen Listbox in einem anderen Dialog. Wie muss ich das Calc Basic denn begreiflich machen, dass er mir den Eintrag in der Listbox markieren soll, wenn der in der entsprechende Zelle steht.

Hier mal ein Ausschnitt aus diesem Makro.

Code: Alles auswählen

	For i = 1 To 1000
		If ThisComponent.Sheets().GetByName("Datenblatt 2015").getCellByPosition(1,i).String = _
			Dlg_neuer_Eintrag.getControl("ListBox_Herst_Eintrag").SelectedItem Then
			If ThisComponent.Sheets().GetByName("Datenblatt 2015").getCellByPosition(13,i).String <> "" Then
					Dlg_neuer_Eintrag.getControl("ListBox_Pfleger").getSelectedItem = ThisComponent.Sheets().GetByName("Datenblatt 2015").getCellByPosition(13,i).String
				ElseIf ThisComponent.Sheets().GetByName("Datenblatt 2015").getCellByPosition(13,i).String = "" Then
					Dlg_neuer_Eintrag.getControl("ListBox_Pfleger").getSelectedItem = ""
			End If
		End If
	Next i	
Ich bekomme so keine Fehlermeldung. Es wird einfach nur nix in der Listbox markiert.

Vielleicht kannst du mir ja hier nochmal helfen?! :D Ich bin dann auch bald fertig mit meinem "kleinen" Projekt ;)

Danke schon mal

LG

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Sa, 30.05.2015 14:42

Hallo Stephan

Nach längerem drüber nachdenken gestern Abend kam mir die "Idee" auch in den Kopf. Ich dachte nur, dass es da vielleicht einen kürzeren Weg gibt, da das Makro ja schon so lang ist. Aber ich werde es probieren. Ich danke dir.

LG und schönes Wochenende

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Stephan » Fr, 29.05.2015 18:28

Das Schreiben von Werte in den Dialog aus dem Tabellenblatt ist doch nur die Umkehrung des schon erläuterten Schreibens in das Tabellenblatt.

Beispielhaft für die zwei Radiobuttons aktiv/inaktiv also:

Code: Alles auswählen

Sub einlesen()
	For i = 1 To 1000
		If ThisComponent.Sheets().GetByName("Tabelle1").getCellByPosition(0,i).String = _
			Dlg_Hersteller.getControl("ListBox_Herst").SelectedItem Then
			If ThisComponent.Sheets().GetByName("Tabelle1").getCellByPosition(1,i).String = "aktiv" Then
					Dlg_Hersteller.getControl("OBaktiv").State = True
				ElseIf ThisComponent.Sheets().GetByName("Tabelle1").getCellByPosition(1,i).String = "inaktiv" Then
					Dlg_Hersteller.getControl("OBinaktiv").State = True
			End If
		End If
	Next i
End Sub
Dieses Makro muss einem passenden Ereignis der Listbox, hier also beispielsweise dem Ereignis "Status geändert" zugewiesen werden.



Gruß
Stephan
Dateianhänge
Hersteller2c.ods
(32.96 KiB) 127-mal heruntergeladen

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Fr, 29.05.2015 14:25

ah...ok. Ich glaube wir haben aneinander vorbeigeschrieben :D

Mein Gedanke war nicht die Listbox für die Hersteller zu füllen...sondern die ganzen anderen Krontrollfelder (Status, Team, Saisons...) und zwar anhand der Daten, die irgendwann mal in den Zellen drin stehen werden. Also wenn bei Hersteller 100% Status aktiv, Team Parts, Saison 2015 X drin steht, dann müsste das in dem Dialog, der aufgeht, wenn man auf Hersteller bearbeiten (bzw in dieser Datei noch Neuer Hersteller) klickt und den Hersteller 100% auswählt, schon vorausgewählt sein. Damit derjenige, der die Daten des Herstellers mal ändern muss, weiß was schon drin steht und das auch wieder reingeschrieben wird, wenn eine Änderung bzw. "Hinzufügung" vorgenommen wurde.

Ich wollte auch nicht sagen, dass dein Makro falsch ist....ich bin nur einfach zu blöde ;)

LG

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Stephan » Fr, 29.05.2015 12:36

Ich habe dein Makro ausprobiert und da kommt in der Zeile [...]
dazu kann ich nichts sagen, die Funktion ist bei mir einwandfrei, was ich natürlich auch geprüft habe ehe ich meinen Post geschrieben habe.


Gruß
Stephan
Dateianhänge
Hersteller2b.ods
(32.79 KiB) 102-mal heruntergeladen

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Fr, 29.05.2015 10:14

Hallo Stephan

Trotzdem vielen Dank für deine Antwort :) ich hatte mir die Datei zwar schon mal angeschaut. Aber dachte, dass es nicht das richtige ist, da es 1. eine Combobox ist und 2. die Combobox mit den Werten aus B14:B20 gefüllt wird. Meine Listbox ist ja schon "gefüllt". Ich möchte nur, dass es die anderen Kontrollfelder füllt, wenn ich einen Hersteller in der Listbox ausgewählt habe.

Und wenn ich das Makro aus der Datei versuche in meine Datei einzubauen, dann meckert er wegen der "drawpage". Ich habe bei mir keine Drawpage...geschweige denn weiß ich nicht genau was das ist ;)

Ich habe dein Makro ausprobiert und da kommt in der Zeile

Code: Alles auswählen

Dlg_Hersteller.Model.GetByName("ListBox_Herst").StringItemList = liste()

folgender Fehlercode:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.IllegalArgumentException
Message: .

LG

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Stephan » Fr, 29.05.2015 09:40

Ist es möglich, dass ich mir die Eintragungen, die in dem Tabellenblatt Hersteller stehen in dem dazugehörogen Dialog anzeigen lassen kann, wenn ich ihn aufegrufen habe? Und wenn ja...wie?!
Das steht auch in der schon genannten Datei unter:
viewtopic.php?f=18&t=1553

z.B.:

Code: Alles auswählen

Sub Dlg_Hersteller_bearbeiten
	DialogLibraries.loadLibrary("Standard") 
	oForm = DialogLibraries.Standard.Dlg_Hersteller
	Dlg_Hersteller = CreateUnoDialog(oForm)
	Dlg_Hersteller.title = "Hersteller bearbeiten" 
	
	Ctl_Hersteller = Dlg_Hersteller.GetControl("Hersteller")
	'Ctl_Status = Dlg_Hersteller.GetControl("Status")
	'Ctl_Team = Dlg_Hersteller.GetControl("Team")	
	oDoc = ThisComponent
	'-->Listbox füllen---------------------------
	eintraege = ThisComponent.Sheets().GetByName("Tabelle1").getCellRangeByName("A2:A1000").getDataArray()
	Dim liste(UBOUND(eintraege()))
	For i = 0 To UBOUND(eintraege())
		tmp = eintraege(i)
		liste(i) = tmp(0)
	Next i
	Dlg_Hersteller.Model.GetByName("ListBox_Herst").StringItemList = liste()
	'-----------------------------------------<--
	Dlg_Hersteller.execute    
end sub
Gruß
Stephan

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Fr, 29.05.2015 08:52

Hallo Stephan

Danke für deine letzte Antwort. Da muss ich mich erstmal rein lesen...das hab ich bis jetzt noch nicht gemacht.
Ich feil noch an einem anderen Problem, wo ich nicht weiß wie ich es angehen soll. Ist es möglich, dass ich mir die Eintragungen, die in dem Tabellenblatt Hersteller stehen in dem dazugehörogen Dialog anzeigen lassen kann, wenn ich ihn aufegrufen habe? Und wenn ja...wie?! ;) Also sozusagen das ganze umgekehrt. Falls das in einen neuen Thread müsste...dann tut es mir leid.

LG

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Stephan » Do, 28.05.2015 08:55

Das Makro ist laaang und es dauert bis es fertig ausgeführt ist
das kann an den Schleifen in meinem Makro liegen, falls die in Deinem Makro mehrfach durchlaufen werden, wenn das die Ursache ist müsste das Makro anders implementiert werden unter Verwendung der Methode .getDataArray, Beispiel dazu z.B. in der letzten Datei/Link in:
viewtopic.php?f=18&t=1553
Nun möchte ich, dass mir die Hersteller in die Datenblätter verteilt werden. Und zwar in die wo auch ein "X" gesetzt ist. Also bei Hersteller 100% sind bei 2015, 2016 und 2017 X gesetzt, dann soll der Hersteller zu Datenblatt 2015, Datenblatt 2016 und Datenblatt 2017 usw.... Mit einer Wenn-Funktion klappt das nicht, weil es dann ziwschen den Herstellern Lücken gibt.
Es gibt 18 der Checkboxen, also:

namenAllerCheckboxen = Array("Name1", "Name2", ...)

For i = 0 To 17
If <die Checkbox namens "namenAllerCheckboxen(i)" aktiv> Then
'tue was zu tun ist
End If
Next i

da gibt es keine Lücken.
Kann man das Makro denn auch so schreiben, dass der Hersteller alphabetisch eingefügt wird? Bzw. kann man ein Makro schreiben, dass im Nachhinein das ganze Blatt duch sortiert und zwar so, dass alle Spalten berücksichtigt werden?
ich würde erst eintrage und dann sortieren. Eintragen ist klar, für Sortieren ist hier ein Beispiel:
https://sites.google.com/site/satuperai ... sort-sheet


Gruß
Stephan

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Mi, 27.05.2015 17:04

Ich nochmal :)

Ich habe jetzt das Makro soweit bearbeitet, dass es alles macht was ich möchte. Es füllt mir jede Spalte aus in dem Blatt "Hersteller". Das Makro ist laaang und es dauert bis es fertig ausgeführt ist, aber es funzt :D (Wenn es fertig ist, kommt eine Masagebox, dass der Hersteller bearbeitet wurde...)

Nun möchte ich, dass mir die Hersteller in die Datenblätter verteilt werden. Und zwar in die wo auch ein "X" gesetzt ist. Also bei Hersteller 100% sind bei 2015, 2016 und 2017 X gesetzt, dann soll der Hersteller zu Datenblatt 2015, Datenblatt 2016 und Datenblatt 2017 usw.... Mit einer Wenn-Funktion klappt das nicht, weil es dann ziwschen den Herstellern Lücken gibt. Und ich habe keine Ahnung wie is es überhaupt anfangen soll...ob mit Makro oder Funktion...

Ein zweites Problem:
Über den Button "Neuer Hersteller" kann man einen neuen Hersteller hinzufügen. Das macht er bis jetzt ganz am Ende der Tabelle, weil das so im Makro steht. Kann man das Makro denn auch so schreiben, dass der Hersteller alphabetisch eingefügt wird? Bzw. kann man ein Makro schreiben, dass im Nachhinein das ganze Blatt duch sortiert und zwar so, dass alle Spalten berücksichtigt werden?

Zum besseren Verständnis hänge ich die Datei nochmal mit an. Ich hoffe es kann mir wieder so super schnell geholfen werden.

Schon mal Danke im Vorraus :D
Dateianhänge
test2 - Kopie.ods
(48 KiB) 110-mal heruntergeladen

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Katte » Mi, 27.05.2015 10:06

SSSUUUUUUUUPPPPPPERRRRR! Du bist mein Retter :D

Das klappt. Und meine anderen Codes (das war nur ein Auszug aus der eigentlichen Datei) sind viel länger und noch verworrener.

Ich danke Dir wie verrückt.

Re: Listenfeld aus Dialog in Tabellenblatt übertragen

von Stephan » Mi, 27.05.2015 09:36

z.B. für das Merkmal "Status"

Code: Alles auswählen

Sub Eintragen()
  If Dlg_Hersteller.getControl("OBaktiv").State = True Then
      For i = 1 To 1000
        If ThisComponent.Sheets().GetByName("Tabelle1").getCellByPosition(0,i).String = _
          Dlg_Hersteller.getControl("ListBox_Herst").SelectedItem Then
            ThisComponent.Sheets().GetByName("Tabelle1").getCellByPosition(1,i).String = "aktiv"
          Exit Sub
        End If
      Next i
    Else
      For i = 1 To 1000
        If ThisComponent.Sheets().GetByName("Tabelle1").getCellByPosition(0,i).String = _
          Dlg_Hersteller.getControl("ListBox_Herst").SelectedItem Then
            ThisComponent.Sheets().GetByName("Tabelle1").getCellByPosition(1,i).String = "inaktiv"
          Exit Sub
        End If
      Next i
  End If
End Sub
(etwas 'langatmiger' Code, aber so wohl leichter zu verstehen)


Gruß
Stephan
Dateianhänge
Hersteller2a.ods
(32.66 KiB) 120-mal heruntergeladen

Nach oben