Inhalt aus Textfeld einem array übergeben

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: Inhalt aus Textfeld einem array übergeben

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » So, 17.04.2016 11:46

OK, habe es nun hinbekommen.
Musste noch mit der Formattierung etwas üben.

Das mit den ungültigen Klammern hatte ich gar nicht verstanden.
Ich dachte immer, dass diese bei Variabeln mit gesetzt werden müssen, damit die Werte auch aus den Schleifen übernommen würden.

Danke noch ein mal für die ganzen Tipps.

Das ist auch das erste Forum, in welchem ich noch keine unfreundlichen Bemerkungen gelesen habe.
Und das ist wirklich selten der Fall.

Einen schönen Sonntag noch.

Gruß

Domenico

Re: Inhalt aus Textfeld einem array übergeben

von mikeleb » Sa, 16.04.2016 20:58

Hallo,
die Einträge in den Listenfeldern sind Strings (auch die Preise). Zum Rechnen ist es notwendig, diesen String in einen Wert zu wandeln.
Nun kommt es darauf an, wie deine Bruttopreise eingetragen sind:
1) "2,50" dann cdbl(Preis(a))
2) "2.50 €" dann val(Preis(a))
3) "2,50 €" dann val(join(split(Preis(a),","),".")

Mit format() begrenzt du übrigens nicht die Nachkommastellen, sondern wandelst die Zahl wieder in einen String um (nach vorgegebenen Formatcode; dabei wird ggf. eine Rundung vorgenommen).

Kleiner Hinweis: Lass' bitte die ungültigen Klammern bei den Variabalen weg. Menge() suggeriert, dass es sich dabei um ein Array handelt, was es aber definitiv nicht ist. Basic ist hier einfach nett und akzeptiert die falsche Schreibweise trotzdem.

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » Sa, 16.04.2016 19:52

Also es ist zum Verrückt werden.
Wenn ich Preis als DOUBLE oder INTEGER deklariere, werden die Werte nicht mehr richtig indeziert.
Dann kann ich zwar auf 2 Nachkommastellen formattieren, jedoch werden die Items dann nicht mehr richtig ausgegeben.
Anscheinent werden durch das Deklarieren auf DOUBLE mehr Werte im Array generiert als eigentlich vorhanden sind.
Also wieder weiter testen.

Gruß

Domenico

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » Sa, 16.04.2016 17:24

Hallo,

hab es jetzt doch hin bekommen.
Habe

Code: Alles auswählen

DIM Preis as Double 
deklariert.
Und die Nachkommastellen mit
aPreis = format(Preis(a)/ 119 * 100,"0.00")
auf 2 Stellen begrenzt.

Gruß

Domenico

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » Sa, 16.04.2016 17:08

Hallo,

jan hatte es dann Gestern nach unzähligen Tests auch nachvollziehen können.

Jetzt bekommen ich bis auf eine Berechnung des Netto-Preises alles hin.
Beim Auslesen des Listenfelds "Preis" erhalte ich die Bruttopreise der ausgewählten Werte.
Nun muss ich diese jedoch in netto umrechnen.

Code: Alles auswählen

Preis = wert3.StringItemList(wert3.SelectedItems(a))
aPreis = Preis(a)/ 119 * 100 'berechnet netto aus brutto
So erhalte ich allerdings die Fehlermeldung "Datentyp unverträglich"

Kann man vielleicht mit den Werten keine Berechnungen durchführen?

Hier ein mal der complette Code meines Makros:

Code: Alles auswählen

Sub Varianten

oDoc = thisComponent.sheets("Eingabe")
oForm = oDoc.DrawPage.Forms.GetByName("Dateneingabe")     
Wert1 = oForm.GetByName("Breiten")
Wert2 = oForm.GetByName("Farben")
Wert3 = oForm.GetByName("Preis")
id = oForm.GetByName("id")
Nr = id.text
sku = oForm.GetByName("sku")
Ref = sku.text

Attr = "Breite:select:0, Farbe:select:1"
Menge = 100
mMenge = 1

'k = ermittelt die Anzahl der Kombinationen
k = (UBound(Wert1.SelectedItems())+1)*(ubound(Wert2.selecteditems())+1)

for n = 1 to k
Bild = b + 1

Breite = wert1.StringItemList(wert1.SelectedItems(a))
Farbe = wert2.StringItemList(wert2.SelectedItems(b))
Preis = wert3.StringItemList(wert3.SelectedItems(a))
aPreis = Preis(a)/ 119 * 100 'berechnet netto aus brutto
Reference = Ref + "-" + format(art + 1, "000")

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())
	thisComponent.sheets(1).getcellbyposition(2,n).setstring(Value())
	thisComponent.sheets(1).getcellbyposition(0,n).setstring(Nr(n))
    thisComponent.sheets(1).getcellbyposition(4,n).setstring(Reference())
    thisComponent.sheets(1).getcellbyposition(8,n).setstring(aPreis())
    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 + 1
   art = art + 1
   
   if b > ubound(Wert2.selecteditems()) then : a = a + 1 : b = 0 : end if
  next n

End Sub
Gruß

Domenico

Re: Inhalt aus Textfeld einem array übergeben

von mikeleb » Fr, 15.04.2016 16:40

Hallo,
Aber wie kann ich denn diese Werte anstelle der bisher genutzten Array verwenden?
indem du z. B. die einzelnen Elemente ausliest und in ein neues Array steckst:

Code: Alles auswählen

oDoc = thisComponent.sheets("Eingabe")
oForm = oDoc.DrawPage.Forms.GetByName("Dateneingabe")     
Breite = oForm.GetByName("Breiten")
cnt = UBound(Breite.SelectedItems)
aBreiten=DimArray(cnt)
for i=0 to cnt
	aBreiten(i)=Breite.StringItemlist(Breite.SelectedItems(i))
next

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » Do, 14.04.2016 16:56

Hallo,

ich habe jetzt mit folgendem Code erreicht, die einzelnen Werte der ausgewählten Listeneinträge einzeln anzeigen zu lassen:

Code: Alles auswählen

oDoc = thisComponent.sheets("Eingabe")
oForm = oDoc.DrawPage.Forms.GetByName("Dateneingabe")     
Breite = oForm.GetByName("Breiten")
cnt = UBound(Breite.SelectedItems)
Items = UBound(Breite.StringItemList)
MsgBox Breite.StringItemList(3)
Hier wird mir der 4. Wert der ausgewählten Listeneinträge ausgegeben.
Aber wie kann ich denn diese Werte anstelle der bisher genutzten Array

Code: Alles auswählen

Breite = array("25 cm","30 cm","40 cm","50 cm","60 cm","70 cm","80 cm","100 cm")
verwenden?
Ich habe da schon viele Versuche gestartet, jedoch alle ohne Erfolg.
Ich dachte dass es ausreichen würde, "Items" anstelle von "Breite" zu setzen, aber das ist nicht richtig.

Gruß

Domenico

Re: Inhalt aus Textfeld einem array übergeben

von mikeleb » Mi, 13.04.2016 17:11

Hallo,

stimmt, in Formularen gibt es die Methode nicht.
Mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite").SelectedItems
bekommst du eine Array mit den Nummern der gewählten Einträge.

Mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite").getItemText(Nummer des Eintrages)
erhältst du den Text des Eintrages.

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » Mi, 13.04.2016 11:31

Hallo mikelab,

danke für die Antwort.
Ich erhalte so aber die Fehlermeldung: "Eigenschaft oder Methode nicht gefunden: getSelectedItems"

Gruß

Domenico

Re: Inhalt aus Textfeld einem array übergeben

von mikeleb » Di, 12.04.2016 21:58

Hallo,

mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite")
bekommst du Zugriff auf die Listbox (als ganzes). Die gewählten Einträge erhältst du mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite").getSelectedItems()

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » Di, 12.04.2016 20:48

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

Re: Inhalt aus Textfeld einem array übergeben

von Domenico » So, 10.04.2016 22:28

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

Re: Inhalt aus Textfeld einem array übergeben

von mikeleb » So, 10.04.2016 21:22

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) 112-mal heruntergeladen

Re: Inhalt aus Textfeld einem array übergeben

von mikeleb » So, 10.04.2016 20:29

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?

Re: Inhalt aus Textfeld einem array übergeben

von mikeleb » So, 10.04.2016 20:19

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.

Nach oben