7.2k Aufrufe
Gefragt in Tabellenkalkulation von nick2507 Mitglied (231 Punkte)
Hallo ihr Lieben,

ich brauche wieder einmal eure Hilfe. :-)

Das Problem:

Ich habe eine UserForm "ZugängeUsf", wo sich 2 Comboboxen befinden. Wenn ich diese ausgewählt habe, möchte ich über den "ComandButton1" die entsprechenden Werte in die Labels "Bezeichnung2Lbl, Beschreibung2Lbl und EkPreis2Lbl anzeigen lassen.

Ist das überhaupt möglich oder muss ich mir da etwas anderes einfallen lassen?

Die Datei:
www.file-upload.net/download-3701066/Lagerbestand4.xls.html

Gruß
Nick2507

34 Antworten

0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Guten Morgen Karin,

das ist die aktuellste Datei:

www.file-upload.net/download-3722224/Lagerbestand4.xls.html

Das Problem ensteht in der Tabelle Lagerbestand. Da habe ich eine Combobox (also keine Combo in der UserForm). Die habe ich mittlerweile mit Daten aus der Artikelliste (B4:B70) mittels deinen Code bestücken können. Jedoch aktualisiert die Combobox vom Tabellenblatt Lagerbestand, wenn ich einen weiteren Artikel eintippe, nicht die Liste. :-(

Viele liebe Grüße
Nick2507
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nick,

lösche den ListFillRange der ComboBox und schreibe stattdessen folgenden Code ins Codemodul des Tabellenblattes:
Private Sub ArtikelNrCmb_GotFocus()
With Worksheets("Artikelliste")
ArtikelNrCmb.ListFillRange = "Artikelliste!B4:B" & IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count)
End With
End Sub

Bis später,
Karin
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Cool, danke es funktioniert! :-D
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Cool, danke es funktioniert! :-D

Gruß
Nick2507
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Hallo Karin, :-)

mich plagt seit nunmehr das ganze Wochenende ein Pivottabellenproblem und ich kenne niemanden, die solch gute Programmierfähigkeiten hat und mir weiter helfen könnte. :-(

Zudem interessiert mich, wie du die Programmierung in VBA erlernt hast. Hast du da ein paar Tipps für mich? (Habe deine tolle Seite im Internet gefunden). :-)

Ich habe die Herausforderung bereits in ein anderen Thread geschrieben aber mir scheind niemand helfen zu können. Von daher möchte in den Link dahingend mit anfügen.

die aktuellste Datei

der Thread

Ich hoffe, dass du mir weiterhelfen kannst.

Viele liebe Grüße
Nick2507
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nick,

bei Pivot kann ich dir leider nicht helfen - ist nicht mein Gebiet.

Ich habe die VBA-Programmierung autodidaktisch gelernt und habe dabei folgende Erfahrung gemacht: wenn man versucht, die Beispiele aus dem Forum nachzuvollziehen und selbst eine Lösung zu finden, lernt man am meisten.

Bis später,
Karin
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Hallo Karin, :-)

danke dir, dass du zumindest bereit warst, dir das Problem anzunehmen. :-)

Das ist wirklich bemerkenswert, dass du dir das alles selber beigebracht hast. :-) Ich persönlich programmiere in Excel erst seit kurzem und hoffe, dass ich auch irgendwann so ein Expertise werde wie du. :-)

Ich habe jetzt aber noch eine Frage:

Du hast mir doch letztens eine Combobox in der Tabelle "Lagerbestand" programmiert. Wenn ich aber nun eine "Wenn, Dann, Sonst" Abfrage drauf legen möchte, habe ich erkannt, dass er die Combobox selber nicht ansprechen kann. :-(
Meines Erachtens nach muss ich die Combobox als Variable deklarieren und seperat in die Zelle C2 schreiben lassen oder? Weist du was ich meine?

Hier mein Code:


Private Sub ProgrammStartCmd_Click()
Dim ka As String

ArtikelNrCmb.Value = ka
ka = Sheets("Lagerbestand").Range("C2")

Cells(3, 3).FormulaR1C1 = _
"=IF(ISBLANK(R[-1]C),"""",VLOOKUP(R2C,Artikelliste!R3C2:R700C9,3,0))" '=WENN(ISTLEER(C2);"";SVERWEIS(C$2;Artikelliste!$B$3:$I$700;3;0))
Cells(4, 3).FormulaR1C1 = _
"=IF(ISBLANK(R[-2]C),"""",VLOOKUP(R2C,Artikelliste!R3C2:R700C9,4,0))" '=WENN(ISTLEER(C2);"";SVERWEIS(C$2;Artikelliste!$B$3:$I$700;4;0))

MsgBox "Formelübertragung hat geklappt!", vbInformation, "Formelübertragung" 'Dient derzeit nur der Kontrolle, dass er auch die Formeln übertragen hat

End Sub


Download

Falls die Beschreibung noch nicht ausreicht erkläre ich noch mal mein Problem:

Ich habe in Zelle C2 in der Tabelle "Lagerbestand" eine Combobox "ArtikelNrCmb". Nachdem ich eine Artikelauswahl getroffen habe, möchte ich, dass (entweder gleich mit der Auswahlder Combobox oder durch das betätigen des Command Button "ProgrammStartCmd") in Zelle C3 + C4 die bereits prgrammierten Formeln geschrieben werden:


Cells(3, 3).FormulaR1C1 = _
"=IF(ISBLANK(R[-1]C),"""",VLOOKUP(R2C,Artikelliste!R3C2:R700C9,3,0))" '=WENN(ISTLEER(C2);"";SVERWEIS(C$2;Artikelliste!$B$3:$I$700;3;0))
Cells(4, 3).FormulaR1C1 = _
"=IF(ISBLANK(R[-2]C),"""",VLOOKUP(R2C,Artikelliste!R3C2:R700C9,4,0))" '=WENN(ISTLEER(C2);"";SVERWEIS(C$2;Artikelliste!$B$3:$I$700;4;0))


Ich bedanke mich für die Hilfe schon im Voraus!!! :-)

Viele liebe Grüße
Nick
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nick,

weshalb sollen die bereits vorhandenen Formeln noch einmal per VBA eingetragen werden? Formeln sind doch dazu da, dass sie - ohne VBA zu verwenden - ein Ergebnis ermitteln. Um den Eintrag der ComboBox in die Zelle zu bekommen, musst du nur unter der Eigenschaft LinkedCell C2 eintragen.

Die Formeln in C3, C4 usw. musst du noch nach diesem Prinzip ändern:

=WENN(ISTLEER(C$2);"";WENN(ISTZAHL(C$2*1);SVERWEIS(C$2*1;Artikelliste!$B$3:$J$698;8;0);SVERWEIS(C$2;Artikelliste!$B$3:$J$698;8;0)))

da in Spalte B sowohl Zahlen als auch Text vorkommen.


Natürlich kann man das Ganze auch komplett mit VBA machen - der prinzipielle Code sähe dann so aus:
Private Sub ArtikelNrCmb_Change()
Dim rngZelle As Range
With Worksheets("Artikelliste")
If IsNumeric(ArtikelNrCmb) Then
Set rngZelle = .Columns(2).Find(CLng(ArtikelNrCmb), lookat:=xlWhole)
Else
Set rngZelle = .Columns(2).Find(ArtikelNrCmb, lookat:=xlWhole)
End If
Range("C3") = rngZelle.Offset(0, 2)
Range("C4") = rngZelle.Offset(0, 3)
End With
End Sub

Der Code macht auch nichts anderes, als dass er in Spalte B den entweder den in eine Zahl umgewandelten Inhalt oder den Text der ComboBox in der Artikelliste Spalte B sucht und dann in der gefundenen Zeile von Spalte B aus nach rechts geht und den Wert aus der jeweiligen Spalte überträgt - also genau wie die Funktion SVERWEIS(). Dennoch würde ich es hier nicht per VBA sondern per Formel lösen - wozu einen aufwändigen Code schreiben, wenn es auch viel einfacher per Formel lösbar ist.

Nur als Tipp am Rande: in der Tabelle "Artikelliste" kannst du die fortlaufende Nummerierung in Spalte A wesentlich einfacher mit der folgenden Formel erstellen =WENN(B4<>"";ZEILE()-3; ""), wobei natürlich deine Lösung auch nicht falsch ist. ;-)))

Bis später,
Karin
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Hallo Karin,

ich hatte gedacht, dass wenn ich mal "ausversehen" eine Formel lösche, dass mir diese nicht verloren gehen. Deine Version ist mir jedoch bedeutend lieber, da ich hier keine Formeln mehr brauche - kann ich also auch die Verknüpfungen nicht mehr löschen. :-)

Kann man die fortlaufende Nummerierung auch ohne diese Wenn-Formel als VBA schreiben? Also wenn per Makro die Werte in die Tabelle übertragen werden, auch gleichzeitig die fortlaufende Nummer in die Spalte A geschrieben wird? Das wäre die genialste Lösung. xD

Mir ist auch aufgefallen, wenn ich einen Blattschutz einrichte, um die vorhandenen Formenl zu schützen, dass die Makros der Userformen nicht mehr oder nur teilsweise funktieren. Hast du da auch noch eine interessante Idee? Oh man ich bin soooooooooooooo unwissend. :-S

Viele liebe Grüße
Nick
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nick,

die Nummerierung kannst du gleichzeitig mit dem Übertragen der Werte in die Tabelle fortführen - entweder du verwendest dazu die ermittelte erste freie Zeile (minus die Startzeile), oder du verwendest Application.Max(Colums(1)) + 1, um die nächste Nummer zu ermitteln.

Den Blattschutz musst du per Code aufheben, wenn du etwas in eine geschützte Tabelle schreibst - anschließend nicht vergessen, den Blattschutz wieder zu setzen.

Bis später,
Karin
...