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

ich bin seit einigen Tagen an einer VBA Programmierung (Excel 2003) und komme einfach nicht mehr weiter. :-(

Das Problem:

Ich habe ein Tabellenblatt (Artikelliste) und ein Tabellenblatt (Zugänge). Zudem habe ich eine Userform mit zwei Comboboxen. Die eine soll die Produktgruppen aus der Artikelliste lesen. Nach dem eine ausgewählt wurde, sollen alle dazugehörigen Artikelnummer in der zweiter Combobox angezeigt werden.

Beispiel:

Combobox1 = Löffel
Combobox2= 12345 und 45697b und so weiter.

Falls ihr nicht so ganz wisst, was ich meine, würde ich die Datei auch per Mail senden. (ich weiß leider nicht, wie man hier eine Datei hochladen kann).

VG

20 Antworten

0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Hallo Karin,

kannst du mir vlt. noch bei einem anderen Problem helfen, dass mit der Combobox1 und einem Label "Bezeichnung2Lbl" zusammenhängt?

Ich möchte gerne, dass wenn ich ein Artikel ausgewählt habe und auf den CommandButton1 klicke, dass er mir den dazugehörigen Wert aus der Artikelliste Spalte D in das Label hineinträgt. Ist das überhaupt möglich?

Vielen Dank

Gruß
Nick2507
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nick,

verwende die Find-Methode - nach diesem Prinzip:
Dim rngZelle As Range
With Worksheets("Artikelliste")
Set rngZelle = .Columns(2).Find(ComboBox1, lookat:=xlWhole)
Label = rngZelle.Offset(0, 2)
End With

Bis später,
Karin
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Und wieder hast du mich beeindruck. Es funktioniert wirklich alles perfekt! :-D

Dummerweise hapert es jetzt wieder an einer ganz anderen Stelle.

Wenn ich in der UserForm "Zugänge" auf dem CommandButton "WerteLöschenCmd" klicke, kommt eine Fehlermeldung, dass
Fehler beim Kompilieren:

Methode oder Datenobejkt nicht gefunden


Heißt das jetzt, dass ich den Wert aus dem Label "EkPreis2Lbl" nicht übertragen kann? Ich wollte vorher eine Überprüfung starten, wo er nur Zahlenwerte zulässt und anschließend als Euro ausgibt. Mit der Textbox hatte es im Vorfeld funktioniert gehabt. :-(

Ich danke dir wieder einmal.

Gruß

Nick2507
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nick,

dann solltest du veilleicht deine Arbeitsmappe noch einmal hochladen, denn 1. hast du ja inzwischen verschiedene Codes verändert und 2. kann man sie von dem anderen Link nicht mehr herunterladen.

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

stimmt, das ist mir gar nicht aufgefallen, dass der Link nicht mehr funktioniert... habe die aktuelle Datei noch mal hochgeladen.

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

Die Fehlermeldung ist weiterhin existent. :-(

Gruß
Nick2507
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Nick,

ich habe das UserForm ZugangUsf gestartet, in der ComboBox ProduktgruppeCmb etwas ausgewählt und in der ComboBox1 ebenfalls und anschließend den Button WerteLöschenCmd gedrückt - ich erhalte keine Fehlermeldung.

Welche Codezeile wird denn markiert wenn die Fehlermeldung kommt?

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

ich habe mich verschrieben. :-S

Ich meinte natürlich, dass er die Werte nicht in die Tabelle Zugänge überträgt (CommandButton "WerteÜbertragenCmd").

Also die Zeile, wo das Problem ist, lautet:

=> Private Sub WerteÜbertragenCmd_Click()
Dim euro As Integer

euro = IsNumeric(EkPreis2Lbl.Value)

Kann es sein, dass man den Wert des Labels EkPreis2Lbl nicht als Zahlenwert bzw. Eurowert definieren kann?

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

ein Label besitzt keine Eigenschaft Value, sondern Caption. Die Zeile müsste also so heißen
euro = IsNumeric(EkPreis2Lbl.Caption)

Gibt man die Eigenschaft nicht an, sucht sich Excel praktischerweise die korrekte Eigenschaft selbst aus - es reicht also:
euro = IsNumeric(EkPreis2Lbl)

Bis später,
Karin
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Dankeschäöööööööööööööönnnn :-D
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Guten Morgen Karin,

nach langer Zeit habe ich wieder ein Problem mit der Abhängigkeit der Comboboxen bei der Userform Zugänge. :-(

Du hast mir vor einiger Zeit eine Combobox programmiert, wo die ArtikelNr. (Combobox1) von der Produktgruppe(ProdukgruppeCmb) abhängig ist. Gibt es auch die Möglichkeit, dass die ArtikelNr. weiterhin von der Produktgruppe abhängig ist aber auch andersherum? Bisher kann ich immer nur eine "Richtung" auswählen. :-(

Ich habe mir diesbezüglich folgende Gedanken gemacht:

Private Sub ProduktgruppeCmb_Change() 'ArtikelNr wird abhängig von der Produktgruppe
Dim lngZeile As Long
Dim rngZelle As Range
ComboBox1.Clear
On Error GoTo Fehler:
With Worksheets("Artikelliste")
Set rngZelle = .Columns(3).Find(ProduktgruppeCmb, lookat:=xlWhole)
lngZeile = rngZelle.Row
Do
ComboBox1.AddItem rngZelle.Offset(0, -1)
Set rngZelle = .Columns(3).FindNext(rngZelle)
If rngZelle.Row = lngZeile Then Exit Do
Loop
End With
Fehler:
End Sub

Private Sub ComboBox1_Change() 'Produktgruppe wird abhängig von der ArtikelNr
Dim lngZeile2 As Long
Dim rngZelle2 As Range
ProduktgruppeCmb.Clear
On Error GoTo Fehler:
With Worksheets("Artikelliste")
Set rngZelle2 = .Columns(3).Find(ComboBox1, lookat:=xlWhole)
lngZeile2 = rngZelle2.Row
Do
ProduktgruppeCmb.AddItem rngZelle2.Offset(0, 1)
Set rngZelle2 = .Columns(3).FindNext(rngZelle2)
If rngZelle2.Row = lngZeile2 Then Exit Do
Loop
End With
Fehler:
End Sub


und

Private Sub UserForm_initialize()
Dim objDictionary As Object 'dynamische Produktgruppe für Zugänge
Dim Bereich As Variant
Dim lngZaehler As Long
Set objDictionary = CreateObject("Scripting.Dictionary")
With Worksheets("Artikelliste")
Bereich = .Range("C4", .Range("C4").End(xlDown))
'Schleife über alle Werte des 1. Bereichs
For lngZaehler = LBound(Bereich) To UBound(Bereich)
objDictionary(Bereich(lngZaehler, 1)) = 0 ' Eintrag wird nur übernommen, wenn er im DictionaryObject noch nicht enthalten ist
Next
ProduktgruppeCmb.List = objDictionary.keys
End With

Dim objDictionary3 As Object 'dynamische ArtikelNr für Zugänge
Dim Bereich3 As Variant
Dim lngZaehler3 As Long
Set objDictionary3 = CreateObject("Scripting.Dictionary")
With Worksheets("Artikelliste")
Bereich3 = .Range("B4", .Range("B4").End(xlDown))
' Schleife über alle Werte des 1. Bereichs
For lngZaehler3 = LBound(Bereich3) To UBound(Bereich3)
objDictionary3(Bereich3(lngZaehler3, 1)) = 0 ' Eintrag wird nur übernommen, wenn er im DictionaryObject noch nicht enthalten ist
Next
ComboBox1.List = objDictionary3.keys
End With
end sub


Zur Verdeutlichung meine Datei:
www.file-upload.net/download-3855484/Lagerverwaltung2---ge-nderte-Version.xls.html

Ich danke dir schon jetzt für deine Hilfe. :-)

Liebe Grüße
Nick
...