2 abhängige Comboboxen außerhalb Userform

  • Excel

Es gibt 64 Antworten in diesem Thema. Der letzte Beitrag () ist von Patrick.

    petaod schrieb:

    Du kannst aber in der Artikeltabelle eine neue Größe eintragen, dann kannst du sie sofort auswählen.Wenn du dann Mengen dafür einträgst, wird sie angelegt.


    @petaod
    Das dachte ich mir schon irgendwie.
    Nun habe ich es geschafft neue Artikel über eine UF einzufügen.
    Das klappt wunderbar (auch wenn der Code sicher wieder viel einfacher hätte gestaltet werden können).
    Leider gehen dabei einige deiner Funktionen verloren, weil meine UF die Artikel gleich mit den Größen sortiert in den Spalten A und B anlegt. Dein Code guckt natürlich ob der Eintrag vorhanden ist und unternimmt dann logischer Weise nichts. :/

    Nun fehlt noch die Verknüpfung im ersten Tabellenblatt.

    petaod schrieb:

    Du musst dir halt einen Algorithmus der Aufteilung ausdenken.Die Zellverknüpfungen lassen sich dann schon automatisieren.


    Der Ausgedachte Algorithmus lautet wie folgt:
    Konfektionsgrößen Zeilen 01 - 10
    US- & Konfektionsgrößen Zeilen 11 - 26
    US-Größen Zeilen 27 - 33
    Schuhe Zeilen 34 - 45

    Ich habe schon herausgefunden das die richtige Funktion "Paste Link:=True" ist.
    Nur habe ich keinen Plan wie ich diese anwenden soll.
    Es muss ja erst wieder für Konfektionsgrößen die erste freie Spalte in Zeile 1 ermittelt werden.
    Dann die Verknüpfungen in der ersten freien Spalte anlegen.
    Also im UF wenn OptionbuttonKonf=True dann ermittle in Sheet Arbeitskleidung Übersicht in Zeile 1 die letzte beschriebene Spalte +1 und füge die Angaben aus UF Textfeld und OptionbuttonKonf als Verknüpfung ein???

    Die Datei habe ich wieder angehängt.

    Gruß Patrick
    Dateien
    • Bestand34.zip

      (60,35 kB, 109 mal heruntergeladen, zuletzt: )
    auch wenn der Code sicher wieder viel einfacher hätte gestaltet werden können

    So ist es (siehe Anhang)

    Der Ausgedachte Algorithmus lautet wie folgt...

    Dein Verfahren bedeutet aber, dass du genau 4 statische Größengruppen hast.
    Dateien
    • Bestand4.zip

      (62,58 kB, 96 mal heruntergeladen, zuletzt: )
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Vielen Dank für deine Mühe.
    Den Anhang sehe ich mir später zu Hause an.

    petaod schrieb:

    Dein Verfahren bedeutet aber, dass du genau 4 statische Größengruppen hast.

    Das ist auch richtig so.
    Gesonderte Größen z.B. Konfektionsgröße 90 werden in der Liste nicht erfasst, da diese so bestellt werden wie sie gebraucht werden, wenn sie geliefert wurden, werden sie direkt an den Mitarbeiter weitergegeben.

    Bei den gesonderten 4 Gruppen handelt es sich ja nur um die Größen.
    Also kann ich Gummistiefel hinzufügen und habe sie unter Schuhe weil als Größenangabe Schuhe gewählt wurde.
    Gleiches gilt für die US-, Konfektions- und US- und Konfektionsgrößen. Da es sich bei der Liste um Berufskleidung handelt werden Kleidungsstücke wie BH´s nicht an die Mitarbeiter ausgegeben. Das wäre ja dann wieder ein neuer Größenbereich.

    Edit: Ich habe nun doch die Zeit gefunden mir die Datei anzusehen.
    Dein Code ist in der Tat viel übersichtlicher ;) .
    Jetzt klappt das Artikel hinzufügen super vielen Dank auch dafür, das du die Msg-Boxen mit eingerichtet hast.

    Nun zur Frage: Nachdem ich einen neuen Artikel angelegt habe, wird er erst dann in Ein-Auslagerung angezeigt, wenn der
    entsprechende Artikel das erste Mal eingelagert wird. Besteht die Möglichkeit das in diesem Moment gleich alle Größen aufgelistet
    werden?
    Das macht es doch sicher später auch leichter, die Verlinkung in "Arbeitskleidung Übersicht" zu realisieren und die Größen wären dann auch in der "richtigen" Reihenfolge?

    Oder man baut die Übersichtsseite völlig anders auf. Z.B. könnte man ein Textfeld anlegen in dem ich "Bundhose grau" anklicke darauf hin wird mir dann im selben Tabellenblatt nur dieser eine Artikel mit all seinen Größen und die im Lager befindliche Anzahl angezeigt... :huh:
    Dabei würde aber wieder der Gedanke der Übersicht vernachlässigt. Denn es soll so sein das ich auf einen Blick sehen kann was ich nachbestellen muss. 8|
    Kleine Anmerkung am Rande, die Formatierung in Ein-Auslagerung ist egal, da die Zellen A bis C ausgeblendet werden und die Arbeitsmappe geschützt wird.
    Das Format spielt also nur in der Übersicht eine Rolle.

    Liebe Grüße Patrick

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Patrick“ ()

    Patrick schrieb:

    Besteht die Möglichkeit das in diesem Moment gleich alle Größen aufgelistet werden?
    Das macht es doch sicher später auch leichter, die Verlinkung in "Arbeitskleidung Übersicht" zu realisieren und die Größen wären dann auch in der "richtigen" Reihenfolge?
    Es ist sogar notwendig, um die Übersicht sauber realisieren zu können.
    Ich bin mir nur nicht sicher, ob ich in naher Zukunft Zeit und Lust finde, mich daran zu verkünsteln.
    Du machst das Projekt doch sicher für eine Firma. Gibt's da niemanden, der dir unter die Arme greifen kann?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Du hast Recht. Das ganze ist von einer Firma. Aber dient in erster Linie dazu mir und meinen Kollegen die Arbeit etwas zu erleichtern. Unsere IT-Abteilung hat kein Interesse daran uns dabei zu unterstützen.
    Sicherlich gibt es auch fertige Lösungen. Nur wird leider jede Anfrage nach neuer Software kategorisch abgelehnt.
    Wenn ich die IT beauftragen würde mir solch eine Liste anzufertigen würde das den finanziellen Rahmen der KST sprengen.

    Leider wird in der Firma, in der ich tätig bin nur mit Geld gerechnet.

    Das ich aber Zeit mit solcher Art listen / Programme Spare weil ich eben nicht jedes mal ins Lager fahren muss um zu gucken was noch da ist, und dann wieder zurück ins Büro um die Bestellung fertig zu machen, interessiert niemanden.

    Wir haben leider auch nicht die Möglichkeit uns selbst Programme auf den Rechnern zu installieren (macht ja auch Sinn) des wegen mit Excel.

    Ich habe was dieses Projekt angeht keinen Zeitdruck. Also wenn du mal Lust dazu haben solltest wäre ich für deine Unterstützung weiterhin sehr dankbar.


    Gruß Patrick

    Patrick schrieb:

    Leider wird in der Firma, in der ich tätig bin nur mit Geld gerechnet.
    Das ist nun mal die Grundlage der Betriebswirtschaft.
    Auch Zeitersparnis lässt sich in Geld ausdrücken.
    Wenn es sich rechnet, lässt sich auch ein Budget begründen.
    Dann musst du deinen Abteilungsleiter überzeugen und der muss es in die Budgetplanung aufnehmen.

    Dass eure IT-Abteilung kein Interesse daran hat, das nebenbei und kostenlos zu machen ist auch logisch.
    Auch die müssen rechnen.
    Gute Programmierer sind teurer und wollen auch bezahlt werden.

    Patrick schrieb:

    Ich habe was dieses Projekt angeht keinen Zeitdruck
    Das ist ja optimal.
    Dann kannst du ja mal versuchen, beim Anlegen der Artikel die Grundbefüllung durchzuführen, so dass alle Größen mit Anzahl 0 in der Einlagerungsliste angelegt werden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ja. So ähnlich.
    Du musst einfach mal debuggen, was jeweils passiert.
    Das Problem wird sein, dass momentan beim Einlagern grundsätzlich der Wert aus den Comboboxen verwendet werden (ArticleSelection.Text und SizeSelection.Text).
    Diese musst du anstatt fix zu nehmen, als Parameter übergeben.

    So in etwa:
    Erzeuge eine Property ArticleRange mit dem Parameter ArticleName und packe dort die modifizierte Funktionalität von CurrentArticleRange rein.
    Die Property CurrentArticleRange ruft dann nur noch die neue Property auf:

    Visual Basic-Quellcode

    1. ​Property Get CurrentArticleRange() As Range
    2. Set CurrentArticleRange = ArticleRange(ArticleSelection.Text)
    3. End Property
    Jetzt kannst du ArticleRange auch von woanders mit dem entsprechenden Parameter aufrufen.
    Zum Beispiel aus einer neuen Routine SizeCell, die du aus CurrentSizeCell nach dem selben Verfahren erzeugt hast.
    Mach mal einen Vorschlag, dann schaue ich ihn an.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo @petaod

    ich habe mir das ganze mal angesehen und versucht deinen VBA Code nachzuvollziehen.

    Irgendwie steige ich dabei nicht durch. ich verstehe zwar was Resize, CopyRange usw. macht, aber bei dem Umfang der Propertys bin ich völlig raus.

    Ich kann auch nicht nachvollziehen wo die Bezüge zu den Tabellenblättern zu finden sind, komme nicht dabei mit, woher Excel jetzt weiß welcher Wert auf welches Tabellenblatt geschrieben werden soll.
    Bei CreateArticle = Articles.AddArticle(tbxName.Text, SizeList_US) ist das Articles der Bezug. SizeList_US wurde mit Const SizeList_US = "S,M,L,XL,XXL,XXXL" erstellt. Auch das verstehe ich noch.
    Das war es dann auch schon :(

    Bin wie gesagt ein blutiger Anfänger was VBA angeht.

    Für mich (Blutigen Anfänger) ;) ist es nur logisch, das alle Werte und Verknüpfungen in allen Tabellenblättern geschrieben werden wenn ein neuer Artikel angelegt wird.
    Das sich werte verändern sobald etwas ein oder ausgelagert werden soll.

    Könntest du mir sagen aus welchem Grund das nicht so gemacht werden sollte?

    Gruß Patrick

    Patrick schrieb:

    das alle Werte und Verknüpfungen in allen Tabellenblättern geschrieben werden wenn ein neuer Artikel angelegt wird.
    Das sich werte verändern sobald etwas ein oder ausgelagert werden soll.

    Könntest du mir sagen aus welchem Grund das nicht so gemacht werden sollte?


    Patrick schrieb:

    wo die Bezüge zu den Tabellenblättern zu finden sind
    Da wo nichts angegeben ist, wird immer Bezug auf das Objekt genommen, in dem der Code steht.

    Nenne mal einen konkreten Codeausschnitt, den du nicht verstehst.

    Patrick schrieb:

    das alle Werte und Verknüpfungen in allen Tabellenblättern geschrieben werden wenn ein neuer Artikel angelegt wird.
    Könntest du mir sagen aus welchem Grund das nicht so gemacht werden sollte?
    Es gibt keinen Grund.
    Die jetzige Implementierung war nur aus der Not geboren, weil das Artikeleinfügen das Event war, wo der Artikel spätestens in der Liste stehen musste.
    Deshalb wurde er da angelegt, wenn er noch nicht existierte.
    Ansonsten hätte man alle Cell-Change-Events in Articles auswerten müssen. Das war mir zuviel Overhead.

    Da du die Artikel inzwischen über eine Form anlegst, kannst du ebenso da auch die Liste erweitern.

    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    @petaod Vielen Dank für deine Geduld, Heute hatte ich mal etwas Zeit mich der Sache anzunehmen.

    Bei dieser Sache sehe ich nicht durch.

    VB.NET-Quellcode

    1. Private Function CreateArticle() As Boolean
    2. If tbxName.Text Like "z.B.*" Then 'contains init value
    3. MsgBox "bitte gültige Bezeichnung angeben"
    4. ElseIf OptionButtonUS Then
    5. CreateArticle = Articles.AddArticle(tbxName.Text, SizeList_US)
    6. ElseIf OptionButtonKonf Then
    7. CreateArticle = Articles.AddArticle(tbxName.Text, SizeList_D)
    8. ElseIf OptionButtonUsKonf Then
    9. CreateArticle = Articles.AddArticle(tbxName.Text, SizeList_US_D)
    10. ElseIf OptionButtonShoe Then
    11. CreateArticle = Articles.AddArticle(tbxName.Text, SizeList_S)
    12. Else
    13. MsgBox "keine Größengruppe ausgewählt"
    14. End If
    15. End Function


    Ich nehme an das, CreateArticle vorher irgendwo als Funktion angegeben wurde...
    Articles ist denke ich das Arbeitsblatt...
    AddArticle wird auch irgendwo als Funktion angegeben sein...
    tbxName.Text ist der Text der in der Textbox eingegeben wurde...
    SizeList_US_D ist die Constante die unter Option Explizit angelegt wurde...

    Soweit ist es klar.

    Was ich jetzt nicht verstehe. Woher weiß Excel an welche Stelle (letzte freie Zeile in "Artikel") die Werte geschrieben werden sollen?
    Das die Tabelle Artikel notwendig ist weil von dort aus Die Comboboxen gefüllt werden leuchtet ein.

    Ich habe keinen Plan wo ich ansetzten soll, um die neuen Artikel in Ein-Auslagerung gleich beim erstellen aufzulisten.

    mit

    VB.NET-Quellcode

    1. If OptionButtonUS.Value = True Then Worksheets("Ein-Auslagerung").Cells(Last1 + 1, 2).Value = "S"
    ist es ja viel zu umständlich. Ich müsste diesen Code für jedes Tabellenblatt anlegen und dann noch das gleiche für die Übersichtsseite + Format übertragen und nicht Zellen von Ein-Auslagerung kopieren sondern als Verknüpfung anlegen :S

    Gruß Patrick

    Patrick schrieb:

    Woher weiß Excel an welche Stelle (letzte freie Zeile in "Artikel") die Werte geschrieben werden sollen?
    Das passiert doch automatisch in Articles.AddArticle.
    Warum willst du da etwas ändern?

    Patrick schrieb:

    Ich habe keinen Plan wo ich ansetzten soll, um die neuen Artikel in Ein-Auslagerung gleich beim erstellen aufzulisten.
    In AddArticle hast du Artikelname und Größenliste.
    Hier einfach für jede Größe die Menge 0 setzen und alles ist gut.
    Dann werden die Einträge schon automatisch angelegt.

    Ich hab's mal umgebaut (siehe Anhang).
    Ist ein Schnellschuss und hoffentlich ohne Bugs.
    Getestet habe ich es nicht ausgiebig.
    Wenn du einen Fehler findest, gib Bescheid.

    Du solltest übrigens dringend das Debuggen erlernen.
    Einfach Breakpoints setzen und mit F8 durchsteppen, dann siehst du, wie der Workflow abläuft und was welche Objekte bedeuten und was in den Variablen drin steht.
    Zugegeben ist mein Programmierstil sehr objektorientiert und möglicherweise nicht immer auf Anhieb zu verstehen.
    Aber dafür unschlagbar kurz.
    Ich kann will nicht anders, sorry.
    Dateien
    • Bestand5.zip

      (64,44 kB, 90 mal heruntergeladen, zuletzt: )
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Warum willst du da etwas ändern?


    Hallo @petaod

    ich möchte dort nichts ändern sonder wollte mir abgucken wie du vorgegangen bist.
    ich hatte vor, mit der gleichen Methode, die Verknüpfungen und das Format in der Übersicht anzulegen.

    petaod schrieb:

    Ich kann will nicht anders, sorry.


    Das finde ich völlig in Ordnung, nur ist es für einen Anfänger wie ich es einer bin schwerer nachzuvollziehen.
    Hallo @petaod und alle anderen ;)
    hatte mal wieder etwas Zeit mich der Sache anzunehmen.
    Mit dem Code kopiere ich nun das Format für die Größenvariante US&Konf.
    Das funktioniert auch super.
    Nun muss das ganze natürlich noch in das bestehende Objekt eingebaut werden.

    VB.NET-Quellcode

    1. Sub Format()
    2. ' Format übertragen
    3. Sheets("Arbeitskleidung Übersicht").Select
    4. Range("E11:F26").Copy
    5. Cells(11, Columns.Count).End(xlToLeft).Offset(0, 2).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    6. SkipBlanks:=False, Transpose:=False
    7. Application.CutCopyMode = False
    8. End Sub


    Mit diesem Code Lege ich in Artikelübersicht eine Verknüpfung an so das bei Änderungen in Ein-Auslagerung die Werte auch entsprechend in Artikelübersicht geändert werden.

    VB.NET-Quellcode

    1. Sub Verknuepfung()
    2. '
    3. ' Verknüpfungen anlegen
    4. '
    5. '
    6. Sheets("Ein-Auslagerung").Select
    7. Cells(Cells(Rows.Count, 1).End(xlUp).Row + 0, 1).Copy
    8. Sheets("Arbeitskleidung Übersicht").Select
    9. Cells(11, Columns.Count).End(xlToLeft).Offset(0, 2).Select
    10. ActiveSheet.Paste Link:=True
    11. End Sub


    Das funktioniert so auch aber nur für die Artikelbezeichnung ( z.B. T-Shirt)

    Wie kann ich ab der Letzten Zelle einen Bereich (Range) kopieren? Letzter Eintrag ist in B167 nun muss ich bei US&Konf den Bereich B167 bis C153 kopieren und dann in Artikelübersicht als verknüpfung einfügen.

    Gruß Patrick

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Patrick“ ()

    petaod schrieb:

    Ich hab's mal umgebaut (siehe Anhang).
    Ist ein Schnellschuss und hoffentlich ohne Bugs.
    Getestet habe ich es nicht ausgiebig.
    Wenn du einen Fehler findest, gib Bescheid.


    Hallo @petaod

    eine Kleinigkeit ist mir aufgefallen,

    wenn bei der letzten aufgelisteten Größe zum ersten mal ein Artikel hinzugefügt wird, wird die Größe neu angelegt. Z.B. Bundhose grau Größe 60 ein hinzufügen wird Größe 60 unter der vorhandenen ein zweites mal hinzugefügt. Das mit dem Format kopieren und Verknüpfungen in der Übersicht habe ich mittlerweile hinbekommen.

    Patrick schrieb:

    wird Größe 60 unter der vorhandenen ein zweites mal hinzugefügt
    Sollte eigentlich nicht sein.
    Da habe ich wohl bei meinem Schnellschuss nicht ausreichend getestet.

    Kannst es ja nochmals hochladen, dann schau ich gelegentlich mal rein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod
    Danke sehr, das ist wirklich nett von dir...

    Verknüpfungen anlegen:
    ich habe erst versucht den Code in den von dir geschriebenen zu integrieren, das hat nicht besonders gut funktioniert, also habe ich Macros angefertigt und lasse diese dann in deinem Code aufrufen wenn ein neuer Artikel angelegt wird.
    Das ist aber in der Hochgeladenen Datei noch nicht eingebaut. Bekomme ich sicher auch noch anders gelöst. Aber dazu später ;)
    Dateien
    • Bestand5.zip

      (64,44 kB, 76 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Patrick“ ()