Inhalt aus Textfeld einem array übergeben

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

Moderator: Moderatoren

Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo zusammen.

Ich bin mit meiner Makroprogrammierung schon ein gutes Stück weiter gekommen.
Nun würde ich gerne in meinem Tabellenblatt1 in einem Textfeld (Name Breite) die Werte eingeben und dann an den array "Breite" aus meinem Makro übergeben.
Das Makro wird per Mausklick auf einen Button gestartet, nachdem die Werte eingetragen wurden.

Meine Fragen sind nun, wie kann man die Werte an diesen array übergeben, und muss man die Werte wie bisher im Makro direkt gemacht, mit "Wert1", "Wert2", auch im Textfeld eingeben?
Ich habe versucht den Inhalt des Textfelds direkt im Makro dem array zuzuordnen, jedoch fehlen mir hier sicher einige Befehle.

Gruß

Domenico
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,
ich werde aus deinen Ausführungen nicht schlau.
Ein Textfeld hat einen Eintrag. Du willst aber "die Werte" eintragen. Mehrere? Wie das?
Einen Wert an ein array zu übergeben ist an sich ja nicht das Problem, aber irgendwie glaube ich, das du etwas anderes willst.
Vielleicht kannst du dein bisheriges Makro zum Verständnis hier mal vorstellen?
und muss man die Werte wie bisher im Makro direkt gemacht, mit "Wert1", "Wert2", auch im Textfeld eingeben?
???
Gruß,
mikeleb
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo mikeleb,

ja, ich habe das Ganze etwas undeutlich erklärt.

Bisher habe ich das Makro zur generierung meiner Artikelvarianten manuell ausgeführt.
Zur Generierung der verschiedenen Artikelvarianten habe ich die arrays direkt im Makro gefüllt:

Code: Alles auswählen

Breite = array("25 cm","30 cm","40 cm","50 cm","60 cm","70 cm","80 cm","100 cm")
Farbe = array("Weiß","Rot","Gelb","Grün","Magenta","Ocean","Hellgrau","Gold","Schwarz")
Da man jedoch je nach Artikel andere Breiten oder Farben benötigt, möchte ich auf einem Tabellenblatt Textfelder und Kombinationsfelder anlegen, in welche man z. B. die Artikelnummer, Aufpreise und Werte zur Auswahl der Breiten / Farben eingeben / auswählen kann.
Hierzu müsste ich jedoch wissen, wie man z. B. den Inhalt eines Feldes dem Array Breite zuweisen kann.
Soweit ich das aus den Büchern verstanden habe, kann man ein Kombinationsfeld anlegen und diesem Werte aus einer Tabelle zuordnen.
Dies scheint aber nur für Datenbanke zu funktionieren.
Sicher gibt es auch die Möglichkeit, Daten zwischen Tabellenblättern bereitzustellen.

Nochmals zusammengefasst:
Ich möchte einige Werte in Textfeldern eingebenlassen, welche dann den Konstanten im Makro zugeordnet werden.
Dies habe ich bisher über so realisiert:

Code: Alles auswählen

sku = inputbox ("Bitte Artikelnummer eingeben")
Dann möchte ich Kombinationsfelder bereit stellen, über welche die benötigten Werte für die Arrays ausgewählt und übergeben werden können.
Bisher war dies nur im Makro wie folgt möglich:

Code: Alles auswählen

Breite = array("25 cm","30 cm","40 cm","50 cm","60 cm","70 cm","80 cm","100 cm")
Farbe = array("Weiß","Rot","Gelb","Grün","Magenta","Ocean","Hellgrau","Gold","Schwarz")
Hier ein mal das Makro, welches sich noch im Testmodus befindet, jedoch schon eine Tabelle mit allen möglichen Variantenkombinationen und Artikelnummern generiert:

Code: Alles auswählen

Sub Varianten
'Schreibt alle Kombinationsmöglichkeiten der folgenden Arrayeinträge
'in eine Tabelle
     


DIM art as integer
Breite = array("25 cm","30 cm","40 cm","50 cm","60 cm","70 cm","80 cm","100 cm")

Farbe = array("Weiß","Rot","Gelb","Grün","Magenta","Ocean","Hellgrau","Gold","Schwarz")
Preis = array(0,1,4,5,6,7,8,10)
id = inputbox ("Bitte Prodult-ID eingeben")
sku = inputbox ("Bitte Artikelnummer eingeben")
Attr = "Breite:select:0, Farbe:select:1"
Menge = 100
mMenge = 1


'Reference = sku + "

'k = ermittelt die Anzahl der Kombinationen
k = (ubound(Breite())+1)*(ubound(Farbe())+1)


for n = 1 to k
Bild = b + 1

Reference = sku + "-" + format(art + 1, "000")
aPreis = format(Preis(a) / 119 * 100, "0.00")
Value = "Breite " + Breite(a)+":0, "+ Farbe(b) + ":1"
	' Es werden Werte für den Prestasho Import generiert
	thisComponent.sheets(1).getcellbyposition(1,n).setstring(Attr(b))
	thisComponent.sheets(1).getcellbyposition(2,n).setstring(Value(a))
	thisComponent.sheets(1).getcellbyposition(0,n).setstring(id(n))
    thisComponent.sheets(1).getcellbyposition(4,n).setstring(Reference(n))
    thisComponent.sheets(1).getcellbyposition(8,n).setstring(aPreis(a))
    thisComponent.sheets(1).getcellbyposition(10,n).setstring(Menge())
    thisComponent.sheets(1).getcellbyposition(11,n).setstring(mMenge())
    thisComponent.sheets(1).getcellbyposition(15,n).setstring(Bild(b))
   
   b = b + 1
   art = art + 1
   
   if b > ubound(Farbe()) then : a = a + 1 : b = 0 : end if
next n

End Sub
Einen schönen Sonntag noch,

Domenico
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von F3K Total »

Moin,
wenn du in eine Inputbox z.B. folgenden Text eintippst(keine Leerzeichen vor und nach dem Komma -> ist der Trenner):

Code: Alles auswählen

25 cm,30 cm,40 cm,50 cm,60 cm,70 cm,80 cm,100 cm
dann bekommst du mit

Code: Alles auswählen

sInput = Inputbox("Bitte mögliche Breiten eingeben")
Breite = Split(sInput,",")
genau dein Array.
Gruß R
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo F3K Total

danke erst ein mal für die Lösung mit dem Array.

Da es aber doch einige Daten sind, welche Eingegeben werden müssen, werde ich um die Integration von Kombinationsfeldern nicht herum kommen.
Dann kann ma per Auswahl immer die benötigten Größen, Farben und was es noch so an Varianten gibt auswählen.
Man kommt aber immer ein Stück weiter und vor allem lernt man dazu ;)

Gruß

Domenico
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,

so richtig verstehe ich es immer noch nicht.
Ich versuche es mal nachzuvollziehen:
Du hast gewisse Artikel. Zu jedem Artikel möchtest du nun alle Kombinationen aus einer gewissen Menge an Farben und Breiten zusammenstellen.
Die Farben und Breiten sind aber für jeden Artikel verschieden, sodass sie nicht fest im Makro eingepflegt sein sollen. Soweit richtig?
Da es aber doch einige Daten sind, welche Eingegeben werden müssen, werde ich um die Integration von Kombinationsfeldern nicht herum kommen.
Ich verstehe nach wie vor nicht, was du mit Kombinationsfeldern errreichen willst.
Welche Daten willst du eingeben? (ich lese etwas von Preis, Artikelnummer, Produkt-ID, Reference, Farbe, Breite, ...???)
Was soll mit den Daten geschehen?
Wie soll das Ergebnis aussehen?
Sollen die Daten jeweils neu eingegeben werden? Sollen z. B. die Farben aus einer Gesamtfarbpalette auswählbar sein? ...
Die verschiedenen Farben, Breiten etc. könnten doch auch auf einem extra Tabellenblatt hinterlegt sein oder nicht?
Gruß,
mikeleb
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von F3K Total »

Hi,
ich habe das auch nicht richtig verstanden, daher geraten.
Anbei eine Idee ohne Makro.
Auf der zweiten Tabelle gibt es Breiten- und Farbkombinationen die per Matrixformel kombiniert werden.
In A1 und A2 auswählen auf Tabellenblatt 1 auswählen.

Gruß R
Dateianhänge
Matrixformeln.ods
(10.89 KiB) 67-mal heruntergeladen
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo,

der Fehler liegt bei mir.
Haben Listenfeld mit Kombinationsfeld vertauscht.

Im Listenfeld liegen alle möglichen Werte für die jeweilige Variante vor.
Nun muss ich diese Werte per Code dem Array "Breite" übergeben.
Ich habe da auch eine Art Beispiel in meinem Openoffice.org 3 Buch, jedoch verstehe ich nicht, welche Objecte da verwendet werden.

Anbei ein mal das Beispiel aus dem Buch zum einlesen der Listenwerte, welche per Mouseklick ausgewählt wurden:

Code: Alles auswählen

oDoc = thisComponent   'Referenz auf Document
oForm = oDoc.DrawPage.Forms.GetByName("Form1")    'erstes Formular
oList1 = oForm.GetByName.("fListBox1")   'Listenfeld-Object
t
Bei mir befindet sich das Listenfeld mit Namen "Breite" auf dem Tabellenblatt 1 namens "Eingabe".

Ich denke, dass es nun mit dem richtigen Feld verständlicher ist.

Gruß

Domenico
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,

also du hast für die Farben ein Listenfeld mit allen möglichen Farben. Daraus sollen nun (per Mehrfachauswahl?) alle interessierenden Farben gewählt werden und dann willst du die Kombinationen mit den Breiten ermitteln?
Ist die Frage, wie du die Werte in das Listenfeld bekommst oder wie du die gewählten Einträge ausliest?
Warum willst du es überhaupt per Listenfeld machen?
Du könntest doch auch z. B. auf einem Tabellenblatt alle Farben auflisten und bei den gewünschten wird ein x zur Auswahl daneben gesetzt.
Gruß,
mikeleb
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Ja, ich wollte es so machen, damit man bei bestimmten Artikeln eben nur eine gewisse Anzahlt an Größen und Farben bereit stellt.
Wenn es auch ohne Listenfeld geht, kann mir das auch recht sein.
Es muss aber möglich sein, eine Aswahl zu treffen und diese an die ensprechenden Arrays im Makro zu übergeben.
Ohne Makro geht da nichts.

Gruß

Domenico
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,
man bei bestimmten Artikeln eben nur eine gewisse Anzahlt an Größen und Farben bereit stellt
Wie soll das passieren? Ist es bereits festgelegt bei welchem Artikel welche Größen/Farben möglich sind? Sind die prinzipiell möglichen Werte fest definiert oder soll es durch den Nutzer bei jedem Artikel neu möglich sein? Da werde ich immer noch nicht schlau.
Ohne Makro geht da nichts.
Das hängt davon ab, was herauskommen soll. F3K Total hat in seiner Datei gezeigt, dass das Bilden von Kombinationen auch ohne Makro möglich ist.
Ob es der effizienteste bzw. schnellste Weg ist hängt wie gesagt davon ab, was am Ende herauskommen soll und das habe ich bis jetzt auch noch nicht verstanden.
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,

ich habe mir mal dein Makro etwas genauer angesehen.
In den Zeilen

Code: Alles auswählen

   thisComponent.sheets(1).getcellbyposition(1,n).setstring(Attr(b))
   thisComponent.sheets(1).getcellbyposition(2,n).setstring(Value(a))
   thisComponent.sheets(1).getcellbyposition(0,n).setstring(id(n))
    thisComponent.sheets(1).getcellbyposition(4,n).setstring(Reference(n))
    thisComponent.sheets(1).getcellbyposition(8,n).setstring(aPreis(a))
    thisComponent.sheets(1).getcellbyposition(10,n).setstring(Menge())
    thisComponent.sheets(1).getcellbyposition(11,n).setstring(mMenge())
    thisComponent.sheets(1).getcellbyposition(15,n).setstring(Bild(b))
haben die Ausdrücke Attr(b), id(n), Reference(n), aPreis(a), Menge(), Bild(b) so keinen Sinn, da es sich nicht um Arrays. Was passiert da?
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,

anbei mal eine Lösung, bei der die zum Generieren der Kombinationen notwendigen Daten auf einem Tabellenblatt eingetragen werden und dann per Makro die Kombinationen gebildet werden. Das lässt sich
a) auch ohne Makro lösen
b) noch effizienter programmieren (ist nur mal ein Schnellschuss, um zu verstehen, was du erreichen willst).
Dateianhänge
artikel generieren.ods
(15.67 KiB) 102-mal heruntergeladen
Gruß,
mikeleb
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Ich erläuer hier ein mal die Abläufe:

Code: Alles auswählen

   
   thisComponent.sheets(1).getcellbyposition(1,n).setstring(Attr(b))
   'enthält einen String, welcher die Varianten Breite und Farbe an Stelle 0 und 1 für die Auswahl im Shop plaziert

   thisComponent.sheets(1).getcellbyposition(2,n).setstring(Value(a))
   'hier wird der Wert Value (bestehend aus Breite, Farbe und Position für die Darstellung im Shop ermittelt

   thisComponent.sheets(1).getcellbyposition(0,n).setstring(id(n))
   'id ist der Schlüssel des Vater-Artikels, zu welchem die Varkombis zugeordnet werden.

    thisComponent.sheets(1).getcellbyposition(4,n).setstring(Reference(n))
    'Generiert die Artikelnummern mit dreistelliger, aufsteigender Endnummer
    thisComponent.sheets(1).getcellbyposition(8,n).setstring(aPreis(a))
    'Generiert den Aufpreis für die verschiedenen Breiten, welcher auf den Artikelpreis des Vaters aufgerechnet wird
    thisComponent.sheets(1).getcellbyposition(10,n).setstring(Menge())
    thisComponent.sheets(1).getcellbyposition(11,n).setstring(mMenge())
    'Hier werden Lagerbestand und Mindestabnahme gesetzt
    thisComponent.sheets(1).getcellbyposition(15,n).setstring(Bild(b))
    'Hier wird die Stelle des aufzurufendes Bildes ermittelt, welche zur Farbe passt
Die Angaben (a) (b) (n) können ignoriert werden.
Diese hat jemand so eingefügt, als ein Beispiel erstellt hatte.
Ich gehe davon aus, dass er die dazugehörigen Spalten nennen wollte.

die Lösung ist nicht schlecht.
Die Bilder werden allerdings falsch nummeriert.
Aber das ist sicher leicht zu ändern.
Man hat so viele Wege die zum Ziel führen, dass man sicher immer wieder etwas verändern wird.

Gruß

Domenico
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo,

kann vielleicht jemand sagen, weshalb die Werte aus dem Listenfeld "Breite" nicht ausgelesen werden?
Das Listenfeld beinhaltet Werte, welche eine Mehfachauswahl zulassen.
Die Werte sollen dann als Array bereit stehen.

Code: Alles auswählen

Sub Varianten

DIM oDoc as Object
DIM oForm as Object
DIM oList1 as Object
DIM DrawPage as Object

oDoc = thisComponent.Sheets(0)  'hier befindet sich das Listenfeld "Breite"
oForm = oDoc.DrawPage.Forms.GetByName("Werte")     'hier das Formular "Werte"
oList1 = oForm.GetByName("Breite")
oList1 = Split(sInput,";")  ''trennen der Werte
Breite = oList1
msgBox Breite
Gruß

Domenico
Antworten