Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Button, User Form
#1
Guten Morgen,

ich bin absolute Anfängerin mit VBA. (Noch nie zuvor verwendet)

Ich habe euch extra von allem Bilder gemacht, weil ich denke, dass viele von euch die Datei erst garnicht runter laden werden.
Ich möchte auch keines Wegs die fertige Datei vor die Nase gesetzt bekommen. (auch wenn das der einfache Weg wäre)
Ich suche eher Hilfestellung und Richtungsangaben. Ich versuche das ganze zu verstehen. (Bin im Januar 2018 in einem VBA Wochenendkurs angemeldet, was ja noch ewig dauert :D)
Ich würde mich auch riesig über entsprechende Internetseiten freuen, wo ich mir die Lösungen selber erlesen kann. Ich weiß einfach oft nicht, was genau ich als Suchbegriffe eingeben soll, damit ich wirklich auf Ergebnisse komme, die zu meiner Problemstellung passen. 
Ich glaube nicht und erwarte es auch nicht, das einer/eine von euch lust hat mir das ganze Schritt für Schritt zu erklären :)
Für mich ist es immer am einfachsten etwas zu lernen und zu behalten, wenn ich es an so einer Datei erprobe. Diese Datei soll auch wirklich zum einsatz kommen.
Mit einer Beispieldatei, wo ich keinen Bezug zu habe, kann ich einfach nichts Anfangen. 

Ziel:
"Eingabe" Über Buttons Formulare (UserForm) öffnen, nach der Eingabe und Auswahl im Formular soll in einem Extra Tabellenblatt "Lieferscheine" die nächste freie Zeile entsprechend ausgefüllt werden.

In der "Übersicht" sollen dann die Lieferscheine und Auslagerungen mit einander verrechnet werden. (Das dürfte ich selber hin bekommen)


Bisherige Umsetzung:

Buttons erstellt
User Form erstellt (bisslang nur für Lieferscheine, geht ja dann nach dem gleichen Prinzip)
Button öffnet User From.



Frage:

1. Tabellenblatt "Lieferscheine"
Button Lieferschein soll in Spalte A-F jeweils die nächste freie Zeile Beschriften
Button Auslagerung soll in Spalte I - L jeweils die nächste freie Zeile Beschriften

Ist dies so Problemlos möglich, oder sollte ich jeweils ein Tabellenblatt machen? Also eins für Lieferscheine und eins für Auslagerung?


2. User Form
a) wie ändere ich die Überschrift? Da soll dann natürlich Lieferschein oder Auslagerung stehen

b) wie ich mir das vorstelle:
Lieferschein Nr - eingabe - Textbox
Lieferdatum - eingabe - Textbox
Kühlhaus - auswahl ( Kühlhaus 1 oder Kühlhaus 2) - Listbox
Artikel Nr. - auswahl (die Artikel befinden sich im Tabellenblatt "Artikel") - Combobox
Artikel - da soll der entsprechende Artikel dann stehen, je nachdem welche Nr man auswählt - Textbox (wird denke ich falsch sein)
Menge - eingabe - Textbox

Button Ok = entsprechende neue Zeile beschriften
Button Abbrechen = Formular Schließen


c) zusätzliche Funktion User From
Ist es möglich, wenn ich  Artikel Nr., Artikel und Menge 5x wiederhole in der Userform, dass beim Abschließen Excel jedes mal Lieferschein Nr, Lieferdatum und Kühlhaus wiederholt?
Bsp.
UserForm Eingabe:

Lieferschein Nr       666
Lieferdatum           05-09
Kühlhaus                2
1Artikel Nr.                10
1Artikel                    Schläfen
1Menge                    2000
2Artikel Nr.               2
2Artikel                    Bäckchen
2Menge                    3000
3Artikel Nr.               35
3Artikel                    Köpfe
3Menge                   5000
4Artikel Nr.             
4Artikel                   
4Menge                  
5Artikel Nr.              
5Artikel                   
5Menge                  

Ausgabe:
Lieferschein Nr.      Lieferdatum     Kühlhaus     Nr     Artikel       Menge
666                       05.09.2017     2                 10     Schläfen      2000
666                       05.09.2017     2                  2      Bäckchen   3000
666                       05.09.2017     2                  35    Köpfe         5000
666                       05.09.2017     2
[s]666                       05.09.2017     2[/s]

Excel soll natürlich nicht für Artikel 4 und 5 (wo nichts eingetragen ist) Lieferschein Nr, Lieferdatum oder Kühlhaus einfügen (daher im Beispiel durchgestrochen).


d) Wenn ich auf die Box doppelklicke, öffnet er mir ja das UserForm code Fenster und setzt den Curser an die richige stelle (der Codeteil, der diese Box betrifft).
bei den Textboxen muss ich doch eigentlich kein Code hinterlegen, oder?

Den abschließenden Code, damit er das in die Zeilen einträgt, muss ich doch beim OK Button hinterlegen?



Bei der Listbox bin ich aktuell dabei mich schlau zu lesen und zu Probieren.

Ich danke euch für eure Zeit, die Ihr euch genommen habt, dies erst einmal alles zu lesen. Ich habe versucht alles so gut wie möglich zu beschreiben.
Ich bin auch für jede folgende Hilfestellung und Richtungsweisung sehr dankbar.


Angehängte Dateien Thumbnail(s)
                       


.xlsm   Lieferschein Makro.xlsm (Größe: 29,06 KB / Downloads: 10)
Antworten Top
#2
Update:

Listbox habe ich nun hin bekommen und funktioniert auch.


Code:
Private Sub UserForm_Initialize()
ListBox1.AddItem "1"
ListBox1.AddItem "2"
End Sub


Dann lese ich mich mal zu Combobox schlau.
Antworten Top
#3
Hi Izzy,

um den Einstieg hierbei zu finden, gibt es hier eine tolles Beispiel und sehr gut beschrieben:
https://www.online-vba.de/vba_tutorialuserform.php

Bei fragen, kannst dich gerne nochmal melden ;)

Grüße
silcono
Antworten Top
#4
Hallo silcono,

danke, aber sowas ist genau das, was ich schlecht verstehe.


Ich brauche für mein Verständnis sogesehen Baustein für Baustein.
Ich denke aber, das es dabei vorallem auch um das Ausfüllen der nächsten Freien Zeile geht. und werde mir das nochmal intensiver anschauen, wenn ich bei dem Punkt bin


Aktuell sieht mein Code für die Listbox (Kühlhaus) und die Combobox (Artikel Nr) so aus.



Code:
Private Sub UserForm_Initialize()
ListBox1.AddItem "1"
ListBox1.AddItem "2"
ComboBox1.RowSource = "Artikel!A2:A55"
End Sub


Ich weiß, ich habe nur Artikel bis A28. Aber ich möchte die möglichkeit haben an den Artikeln was zu verändern, oder diese zu erweitern, ohne in den Code gehen zu müssen.
Daher habe ich bis A55 eingegeben. Es gibt da bestimmt eine elegantere Lösung, aber auf die bin ich bislang noch nicht gestoßen.

Nun bin ich auf der suche, wie ich das Textfeld (Artikel) anhand der Auswahl in der Combobox automatisch befüllen lassen kann.
Antworten Top
#5
Da wird dir dieser Code, leider nicht reichen. Hierfür benötigst du eine Schleife, um den Code später nicht immer anpassen zu müssen.
Auf der genannten Seite, kannst du dir auch ein Beispiel runterladen. Anhand von diesem würde ich einfach mal ausprobieren, wie die einzelnen Sachen reagieren. Ggf. kannst du das Beispiel nach deinen Bedürfnissen anpassen bzw. umbenennen.

Grüße silcono
Antworten Top
#6
So nun habe ich ein Problem entdeckt.

Ich kann die Eingabe in der Combobox über den Pfeil machen und klicken, oder direkt mit Pfeil runter, aber wenn ich die Artikelnummer mit zahlen eingebe, Akzeptiert das Textfeld da drunter die Eingabe nicht, da steht dann halt "Artikel" und nicht die Artikelbezeichnung.


Code:
Private Sub ComboBox1_DropButtonClick()
ComboBox1.RowSource = "Artikel!$A$2:" & _
       Worksheets("Artikel").Cells(Worksheets("Artikel").Rows.Count, 1).End(xlUp).Address
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
ComboBox1.RowSource = "Artikel!$A$2:" & _
       Worksheets("Artikel").Cells(Worksheets("Artikel").Rows.Count, 1).End(xlUp).Address
End Sub

Private Sub ComboBox1_Change()
If ComboBox1 Then
TextBox3 = Worksheets("Artikel").Cells(ComboBox1.ListIndex + 2, 2)
End If
End Sub


Ich habe versucht das mit "click" zu lösen, funktioniert aber nur bedingt und zeigt trotzdem häufig "Artikel" an

Code:
Private Sub ComboBox1_Click()
ComboBox1.RowSource = "Artikel!$A$2:" & _
       Worksheets("Artikel").Cells(Worksheets("Artikel").Rows.Count, 1).End(xlUp).Address
End Sub
Antworten Top
#7
Ich habe jetzt mal versucht das Eintragen von der Seite zu übernehmen. Da kommt immer die angehängte Fehlermeldung.

Allerdings für die Auslagerungen, da die etwas einfacher gestaltet sind.


Code:
Private Sub CommandButton1_Click()
 Dim lZeile As Long
 
If ComboBox1.ListIndex = -1 Then
Exit Sub

If Trim(CStr(TextBox1.Text)) = "" Then
     MsgBox "Datum fehlt", vbCritical + vbOKOnly, "FEHLER!"
     Exit Sub
     End If
If Trim(CStr(TextBox2.Text)) = "" Then
    MsgBox "Artikel auswählen", vbCritical + vbOKOnly, "FEHLER!"
    Exit Sub
    End If
If Trim(CStr(TextBox3.Text)) = "" Then
    MsgBox "Menge eingeben", vbCritical + vbOKOnly, "FEHLER!"
    Exit Sub
    End If
     
     lZeile = 2
     Do While Trim(CStr(Tabelle2.Cells(lZeile, 1).Value)) <> ""
        
         If ComboBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
             Tabelle2.Cells(lZeile, "H").Value = Trim(CStr(TextBox1.Text))
             Tabelle2.Cells(lZeile, "I").Value = ListBox1.Text
             Tabelle2.Cells(lZeile, "J").Value = ComboBox1.Text
             Tabelle2.Cells(lZeile, "K").Value = TextBox2.Text
             Tabelle2.Cells(lZeile, "L").Value = TextBox3.Text
         End If
    
         lZeile = lZeile + 1
     Loop

ActiveWorkbook.Save
Unload Me
End Sub


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#8
Ok fehler gefunden ::D

Er nimmt a nicht zeile 2 (die am anfang leer ist) sondern Zeile 3
Und beim wiederholten eingeben in die maske trägt er garnix mehr ein
Antworten Top
#9
Ich bin mittlerweile ein gutes Stück weiter gekommen

Ich habe mich nun dem Button Auslagerung gewitmet, da dieser etwas einfacher beim übertragen in die Tabelle ist. Da es dort immer nur einen Artikel gibt.
So funktioniert das auch ganz gut.
Ich weiß nur noch nicht ganz, wie ich eine Fehlermeldung ausgeben kann, wenn bei Kühlhaus (ListBox) nichts ausgewählt ist.
Und der Abbrechen Button hat aktuell noch keine Funktion, der ist sogesehen deko :D


Code:
Private Sub CommandButton1_Click()
Dim X As Long

If Trim(CStr(TextBox1.Text)) = "" Then
    MsgBox "Datum fehlt", vbCritical + vbOKOnly, "FEHLER!"
    Exit Sub
    End If
If Trim(CStr(TextBox2.Text)) = "" Then
   MsgBox "Artikel auswählen", vbCritical + vbOKOnly, "FEHLER!"
   Exit Sub
   End If
If Trim(CStr(TextBox3.Text)) = "" Then
   MsgBox "Menge eingeben", vbCritical + vbOKOnly, "FEHLER!"
   Exit Sub
   End If
   
X = Sheets("Lieferscheine").Range("H65536").End(xlUp).Row

Sheets("Lieferscheine").Cells(X + 1, 8) = TextBox1.Text
Sheets("Lieferscheine").Cells(X + 1, 9) = ListBox1.Text
Sheets("Lieferscheine").Cells(X + 1, 10) = ComboBox1.Text
Sheets("Lieferscheine").Cells(X + 1, 11) = TextBox2.Text
Sheets("Lieferscheine").Cells(X + 1, 12) = TextBox3.Text
 

ActiveWorkbook.Save
Unload Me
End Sub


Private Sub UserForm_Initialize()
ListBox1.AddItem "1"
ListBox1.AddItem "2"

End Sub

Private Sub ComboBox1_DropButtonClick()
ComboBox1.RowSource = "Artikel!$A$2:" & _
       Worksheets("Artikel").Cells(Worksheets("Artikel").Rows.Count, 1).End(xlUp).Address
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
ComboBox1.RowSource = "Artikel!$A$2:" & _
       Worksheets("Artikel").Cells(Worksheets("Artikel").Rows.Count, 1).End(xlUp).Address
End Sub

Private Sub ComboBox1_Change()
If ComboBox1 Then
TextBox2 = Worksheets("Artikel").Cells(ComboBox1.ListIndex + 2, 2)
End If
End Sub


Angehängte Dateien
.xlsm   Lieferschein Makro - 1.xlsm (Größe: 41,65 KB / Downloads: 3)
Antworten Top
#10
Hallo Izzy,

Du prüfst ja schon an verschiedenen Stellen die Inhalte von TextBoxen mit If ... Text = "" Then
Das gleiche Prinzip brauchst Du doch nur bei der Listbox anwenden.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste