Clever-Excel-Forum

Normale Version: UserForm in einer UserForm
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hi ihr Excel- und VBA-Experten,

ich möchte, wie im Betreff beschrieben, eine Userform Inception machen. :19:  Ich benutze excel 2010 und bin eher ein Anfänger in Sachen VBA.

Problem 1:
Ich habe bis jetzt eine UserForm1, die soweit auch das tut, was ich möchte. Da sie aber schon relativ voll mit Buttons und ComboBoxen ist und nicht unübersichtlich werden soll, möchte ich einen Button einbauen, der eine UserForm2 in der UserForm1 erstellt (sofern das überhaupt möglich ist).

Problem 2:
In meiner jetzigen UserForm1 habe ich einen Button, der meine Einträge die ich mache in meiner Exceltabelle speichert. Dabei sucht er die erste freie Zeile). Gebe ich jetzt erneut etwas ein und speichere ich es, wird es in die nächste frei Zeile darunter eingetragen (Es wird also nicht überschrieben).
Ich möchte also in der UserForm1 alles eintragen, die UserForm2 durch den Button öffnen und dort Werte eintragen. Dann auf Speichern drücken und alles soll in der Selben Zeile gespeichert werden. Wiederhole ich das, dann in die nächste freie Zeile usw. 
Ich hänge auch mal meine Aktuelle UserForm an. In der wird auch kurz erklärt was sie macht. Außerdem erstelle ich eine 2. Userform, die dann mit dem Button geöffnet werden soll, damit Ihr wisst, wie sie aussehen soll (Wenn Ihr beim Design andere Vorschläge habt, bin ich gerne für alles offen!)
Ich bedanke mich schon mal für eure Geduld und Hilfe.

Gruß Jan
Hallo!
Erst mal ohne die Datei angesehen zu haben:
Du darfst UF1 nicht per Unload Me aus dem Speicher verbannen, sondern sie nur per Me.Hide "verstecken".
Im Speicher-Button von UF2 kannst Du auf UF1 zugreifen und beide UF erst nach dem Übertrag per
Unload UserForm1
Unload Userform2
schließen.

Gruß Ralf
Hi
Ich glaube ich habe verstanden was du meinst. Ich gebe alles in der UF1 ein, drücke dann auf den Butten der UF2 öffnet (und gleichzeitig wird sozusagen mein Eintrag in UF1 zwischengespeichert). Danngebe ich alles in UF2 ein und speichere es endgültig?!
Und noch dazu, falls das relevant ist: mein Speicherbutton schließt nicht gleichzeitig die UF. Dafür gibt es bei mir einen extra Button.
Gruß Jan
Hallo Jan,

hast Du auch schon an die Möglichkeit gedacht, Multipages zu nehmen und Deine Daten darin aufzuteilen?
Hi schauan,

nein habe ich nicht. Aber das ist eine gute und vorallem sehr einfache Idee, danke !

Gruß Jan
Hi Jan,

(05.11.2015, 08:56)Jan-Lan95 schrieb: [ -> ]nein habe ich nicht. Aber das ist eine gute und vorallem sehr einfache Idee, danke!

wenn es dann funktioniert, kannst du das Ergebnis dann hier zeigen? Das würde mich interessieren.
Ja klar doch. Seite2 der MultiPage ist zwar noch nicht mit codes versehen, aber zum Verständnis ist das denke ich auch nicht notwendig.

Gruß Jan
Hi Jan,

(05.11.2015, 10:07)Jan-Lan95 schrieb: [ -> ]Ja klar doch. Seite2 der MultiPage ist zwar noch nicht mit codes versehen, aber zum Verständnis ist das denke ich auch nicht notwendig.

Die Userform sieht jetzt sehr gut aus!

Ich habe es mal selber mit der Datei von gestern probiert und die Seite 2 der Multipage mit Makros versehen, sowie das Löschen der Eingabefelder vereinfacht:
Code:
Private Sub CommandButton1_Click()
 
  If Trim(CStr(TextBox1.Text)) = "" Then
     MsgBox "Sie müssen mindestens einen Kunden eingeben!", vbCritical + vbOKOnly, "FEHLER!"
     Exit Sub
  End If
 
  Dim ZeileMax As Long
  Dim Zeile As Long
  Dim loSpalte As Long
 
  With Tabelle1
     ZeileMax = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)   'letzte belegte Zeile in Spalte A (1)
     Zeile = ZeileMax + 1
     
     .Range("A" & Zeile).Value = Me.TextBox1.Value
     .Range("B" & Zeile).Value = Me.TextBox2.Value
     .Range("C" & Zeile).Value = Me.TextBox3.Value
     .Range("D" & Zeile).Value = Me.ComboBox3.Value
     .Range("E" & Zeile).Value = Me.TextBox4.Value
     .Range("F" & Zeile).Value = Me.TextBox5.Value
     .Range("G" & Zeile).Value = Me.OptionButton1.Value = "Nein"
     .Range("G" & Zeile).Value = Me.OptionButton2.Value = "Ja"
     .Range("H" & Zeile).Value = Me.ComboBox2.Value
     .Range("I" & Zeile).Value = Me.ComboBox1.Value
     .Range("J" & Zeile).Value = Me.ComboBox4.Value
     .Range("K" & Zeile).Value = Me.TextBox6.Value
     .Range("L" & Zeile).Value = Me.TextBox7.Value
     .Range("M" & Zeile).Value = Me.TextBox8.Value
     .Range("N" & Zeile).Value = Me.TextBox9.Value
     
     .Range("A3:EQ3").Copy
     .Range("A" & Zeile).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
         SkipBlanks:=False, Transpose:=False
     
     'Option um auch Formeln zu kopieren
     '.Range("O3:P3").Copy
     '.Range("O" & Zeile).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
         '    SkipBlanks:=False, Transpose:=False
     
     'Jahr 2016 - 2026: eintragen der Monatsstückzahlen
     For loSpalte = 16 To 147
        .Cells(Zeile, loSpalte) = Me.Controls("TextBox" & loSpalte - 5).Value
     Next loSpalte
     
  End With
End Sub

Private Sub CommandButton5_Click()
  Dim i As Long
  For i = 1 To 142
     Me.Controls("TextBox" & i).Value = ""
  Next i
 
  For i = 1 To 4
     Me.Controls("ComboBox" & i).Value = ""
  Next i
 
  For i = 1 To 2
     Me.Controls("OptionButton" & i).Value = False
  Next i
End Sub

Für die neue Datei muß es dann so heißen:
Code:
'Jahr 2016 - 2026: eintragen der Monatsstückzahlen
      For loSpalte = 17 To 148
         .Cells(Zeile, loSpalte) = Me.Controls("TextBox" & loSpalte - 6).Value
      Next loSpalte
Hallo Ralf,
vielen Dank für deine Hilfe. Du hast mir ne Menge Arbeit erspart... Ich hätte mit meinen Kentnissen jetzt jedes Textfeld kopiert.
Aber was ich noch besser finde: inzwischen kann ich die meißten Codes auch nachvollziehen und sogar auf andere Bsp. anwenden (das Gefühl habe ich zumindest)
Und ich dem Zusammenhang habe ich noch eine Frage zu deinem Code bzgl. des Lösch-Buttons:

Du 'Beschreibst' am anfang "i" als alle ComboBoxen von 1 bis 142

Dann schreibst du  "Next i" um "i" wieder neu zu beschreiben (so habe ich das zumindest verstanden. Korrigier mich, wenn ich falsch liege). In dem Fall beschreibst du anschließend alle KomboBoxen. Dann die OptionButtons und dann schreibst du wieder "Next i"

Wieso muss ganz am Ende wieder "Next i" geschrieben werden, obwohl danach "i" nicht wieder neu beschrieben wird?

Ich hoffe du verstehst was ich meine ;)

Lg Jan
Hi Jan,

(05.11.2015, 11:36)Jan-Lan95 schrieb: [ -> ]Du 'Beschreibst' am anfang "i" als alle ComboBoxen von 1 bis 142

Dann schreibst du  "Next i" um "i" wieder neu zu beschreiben (so habe ich das zumindest verstanden. Korrigier mich, wenn ich falsch liege). In dem Fall beschreibst du anschließend alle KomboBoxen. Dann die OptionButtons und dann schreibst du wieder "Next i"

Wieso muss ganz am Ende wieder "Next i" geschrieben werden, obwohl danach "i" nicht wieder neu beschrieben wird?

Das Next ist Teil einer For-Schleife.

Es wird dann i hochgezählt von 1 bis 147. Wenn das erreicht ist, ist die Schleife fertig. Dann kommt die nächste Schleife wieder von For bis Next und dann die dritte.
Es könnte auch jeweils eine andere Variable (i, j, k, oder sonst einen beliebigen Namen, siehe loSpalte) verwendet werden, dann wäre es einfacher zu verstehen. Aber ich bin davon ausgegangen, daß For-Next-Schleife jedem bekannt ist. Das ist eines der ersten Dinge, die man beim Programmieren lernt. :19:

Das "i" bei "Next i" ist nicht nötig, macht es aber übersichtlicher.
Seiten: 1 2 3