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 beverly Experte (3.5k Punkte)
Hi Nick,

dann prüfe mittels If IsNumeric(ZugängeTxb) ob der Inhalt als Zahl interpretiert werden kann.

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

ich habe mich gerade eben an eine Artikellöschung in der Tabelle Artikelliste mit der Userform ArtikelAnlegenUsf herangewagt.
Die Programmierung insoweit funktioniert auch ganz gut aber ich habe mal eine Frage bezüglich der Programmierung. Kann ich es auch erreichen, wenn ich den Command Button (ArtikelLöschenCmd) klicke, dass er nur den betreffenden Artikel löscht und nicht alle freien/bzw. leere Zellen?

Hier ist der Code:


Private Sub ArtikelLöschenCmd_Click()
Dim rngZelle As Range
Dim löschen As Byte

löschen = MsgBox("Möchten Sie wirklich den Artikel löschen?", vbYesNo + vbQuestion, "Artikel löschen")

If löschen = vbYes Then
ProduktgruppeTxb = ""
BezeichnungTxb = ""
BeschreibungTxb = ""
LieferantTxb = ""
EkPreisTxb = ""
VkPreisTxb = ""

With Worksheets("Artikelliste")
Set rngZelle = .Columns(2).Find(ArtikelNrCmb, lookat:=xlWhole) 'beginn der Find Methode: Finde den Wert aus der Combobox
rngZelle.Offset(0, 1) = ProduktgruppeTxb
rngZelle.Offset(0, 2) = BezeichnungTxb
rngZelle.Offset(0, 3) = BeschreibungTxb
rngZelle.Offset(0, 4) = LieferantTxb
rngZelle.Offset(0, 5) = EkPreisTxb
rngZelle.Offset(0, 6) = VkPreisTxb
End With
MsgBox ("Der Artikel wurde gelöscht!"), vbOK + vbInformation
End If


Dim lngLetzte As Long ' Die Variable lngLetzte wird als Typ Long deklariert
Dim lngZeile As Long ' Die Variable lngZeile wird als Typ Long deklariert

Application.ScreenUpdating = False ' Bildschirmaktualisierung Ausschalten (Makro läuft schneller, Bildschirm flackert nicht)
With Worksheets("Artikelliste")
lngLetzte = IIf(IsEmpty(Range("C65536")), Range("C65536").End(xlUp).Row + 1, 65536) ' letzte belegte Zelle in Spalte C plus 1 raussuchen und merken
For lngZeile = lngLetzte To 1 Step -1 ' in einer Schleife von dieser letzten bis Zeile 1 gehen - also von unten nach oben
If Cells(lngZeile, 3) = "" Then ' Wenn die Zelle in der ensprechenden Zeile in Spalte C leer ist
Cells(lngZeile, 3).EntireRow.Delete ' dann lösche die gesamte Zeile
End If ' Ende der Bedingung
Next ' Nächste Zeile mit der Bedingung vergleichen
End With
Application.ScreenUpdating = True ' Bildschirmaktualisierung EINschalten (nicht vergessen)
End Sub


Viele liebe Grüße

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

dieser Code sollte dazu ausreichen:
Dim rngZelle As Range
Dim löschen As Byte
löschen = MsgBox("Möchten Sie wirklich den Artikel löschen?", vbYesNo + vbQuestion, "Artikel löschen")
If löschen = vbYes Then
ProduktgruppeTxb = ""
BezeichnungTxb = ""
BeschreibungTxb = ""
LieferantTxb = ""
EkPreisTxb = ""
VkPreisTxb = ""
With Worksheets("Artikelliste")
Set rngZelle = .Columns(2).Find(ArtikelNrCmb, lookat:=xlWhole)
If Not rngZelle Is Nothing Then .Rows(rngZelle.Row).Delete shift:=xlUp
End With
MsgBox ("Der Artikel wurde gelöscht!"), vbOK + vbInformation
End If

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

kannst du mir bei einem Problem weiterhelfen?

Es geht um folgendes:

Ich möchte gerne eine Überprüfung bei der UserForm "ArtikelanlegenUsf" vornehmen. Hierbei soll, wenn alle Daten eingegeben wurden und auf den Command Button "WerteÜbertragenCmd" geklickt wurde eine Überprüfung erfolgen, ob der Artikel (oder die Artikelnummer) bereits vorhanden ist. Wenn das der Fall ist, soll er eine Msgbox darauf hinweisen.

Die Werte kommen aus der Tabelle "Artikelliste".

der Link der aktuelles Excel- Datei:

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

Ich danke dir bereits jetzt im Voraus. :-)

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

ich hatte bereits einen ähnlichen Code gepostet
With Worksheets("Artikelliste")
Set rngZelle = .Columns(2).Find(ArtikelNrCmb, lookat:=xlWhole)
If Not rngZelle Is Nothing Then '<== Suchbegriff wurde gefunden
ProduktgruppeTxb = rngZelle.Offset(0, 1)
BezeichnungTxb = rngZelle.Offset(0, 2)
BeschreibungTxb = rngZelle.Offset(0, 3)
LieferantTxb = rngZelle.Offset(0, 4)
EkPreisTxb = rngZelle.Offset(0, 5)
VkPreisTxb = rngZelle.Offset(0, 6)
End With
End With

Anstelle des Codes innerhalb der With-Anweisung schreibst du den Code für deine MsgBox.

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

ich bin aber bei der UserForm "ArtikelanlegenUsf". Da habe ich folgenden Code:


Private Sub WerteÜbertragenCmd_Click()
Dim VkPr As Integer
Dim EkPr As Integer

VkPr = IsNumeric(VkPreisTxb.Value)
EkPr = IsNumeric(EkPreisTxb.Value)


If VkPr + EkPr = False Then
MsgBox ("Bitte tragen Sie den EK- u. den VK - Preis ein!"), vbExclamation
ElseIf VkPr = False Then
MsgBox ("Tragen Sie ein Eurowert in den VK- Preis ein!"), vbInformation
ElseIf EkPr = False Then
MsgBox ("Bitte tragen Sie ein Eurowert in den EK - Preis ein!"), vbInformation
Else
VkPreisTxb = Format(VkPreisTxb, "#,##0.00 €")
EkPreisTxb = Format(VkPreisTxb, "#,##0.00 €")

übertragen = Sheets("Artikelliste").Cells(2, 2).End(xlDown).Row + 1

Sheets("Artikelliste").Cells(übertragen, 2) = ArtikelNrTxb
Sheets("Artikelliste").Cells(übertragen, 3) = ProduktgruppeCmb
Sheets("Artikelliste").Cells(übertragen, 4) = BezeichnungTxb
Sheets("Artikelliste").Cells(übertragen, 5) = BeschreibungTxb
Sheets("Artikelliste").Cells(übertragen, 6) = LieferantTxb
Sheets("Artikelliste").Cells(übertragen, 7) = CDbl(EkPreisTxb) ' Textbox wird als Dezimalzahl deklariert
Sheets("Artikelliste").Cells(übertragen, 8) = CDbl(VkPreisTxb) 'Textbox wird als Dezimalzahl deklariert

MsgBox ("Die Daten wurden übertragen"), vbInformation
End If
End Sub


Wo genau, kann ich die Artikelüberprüfung machen?

Also die Artikelnummer muss ich hierbei per Hand in die Textbox "ArtikelNrTxb" eingeben und wenn ich durch ein "Zufall" eine Artikelnummer eintippe und auf den Comand Button "WerteÜbertragenCmd" klicke, soll mich eine Msgbox darauf aufmerksam machen, dass der Artikel schon vorhanden sei. :-S

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

das Prinzip ist immer das selbe und sieht folgender Maßen aus:
Set rngZelle = Sheets("Artikelliste").Columns(2).Find(ArtikelNrCmb, lookat:=xlWhole)
If Not rngZelle Is Nothing Then '<== Suchbegriff wurde gefunden
MsgBox "Der Artikel ist schon vorhanden"
Else
übertragen = Sheets("Artikelliste").Cells(2, 2).End(xlDown).Row + 1
Sheets("Artikelliste").Cells(übertragen, 2) = ArtikelNrTxb
Sheets("Artikelliste").Cells(übertragen, 3) = ProduktgruppeCmb
Sheets("Artikelliste").Cells(übertragen, 4) = BezeichnungTxb
Sheets("Artikelliste").Cells(übertragen, 5) = BeschreibungTxb
Sheets("Artikelliste").Cells(übertragen, 6) = LieferantTxb
Sheets("Artikelliste").Cells(übertragen, 7) = CDbl(EkPreisTxb) ' Textbox wird als Dezimalzahl deklariert
Sheets("Artikelliste").Cells(übertragen, 8) = CDbl(VkPreisTxb) 'Textbox wird als Dezimalzahl deklariert
MsgBox ("Die Daten wurden übertragen"), vbInformation
End If

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

ich habe ein Comboboxenproblem innerhalb einer Tabelle. :-(

Ich habe deinen Code für eine dynamische Artikelliste aus der Artikelliste einer Combobox in einer Tabelle zuordnen wollen. Grundsätzlich funktioniert das auch super gut aber es kommt, wenn ich eine Auswahl eines Artikels treffe, die Laufzeitfehlermeldung '13' - Typen unverträglich. Hier ist der Code:


Private Sub artikelnrcmb_click()
Dim objDictionary As Object
Dim Bereich As Variant
Dim lngZaehler As Long
Set objDictionary = CreateObject("Scripting.Dictionary")
With Worksheets("Artikelliste")
Bereich = .Range("B4", .Range("B4").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
ArtikelNrCmb.ListFillRange = objDictionary.keys
End With
End Sub


Makieren tut er die Zeile ArtikelNrCmb.ListFillRanfe =objDictionary.keys

Ich habe es auch mit dieser Zeile ausprobiert aber da listet er das Gleiche Problem. :-(

ArtikelNrCmb.List = objDictionary.keys


Ich danke dir jetzt schon! :-)

Viele liebe Grüße
Nick2507
0 Punkte
Beantwortet von nick2507 Mitglied (231 Punkte)
Hallo Karin,

ich habe das Problem mit dem Laufzeitfehler in Eigenregie hinbekommen. :-)

Das einzige wo ich mich noch schwer tuhe ist, dass wenn ich einen Artikel anlege, dass er die Combobox, die auf der Tabelle liegt, noch nicht aktualisiert. :-S

Hoffe, du kannst mir noch mal helfen?

Viele liebe Grüße

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

dann solltest du die aktuelle Arbeitsmappe hochladen und genau erklären wo, wann und wie das Problem auftritt.

Bis später,
Karin
...