Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Eingabe von UserForm an Modul

Forumthread: Eingabe von UserForm an Modul

Eingabe von UserForm an Modul
09.11.2017 10:46:02
UserForm
Liebe Freunde,
eine sehr banale Frage aber ich komm nicht drauf. Ich will über eine Userform über eine TextBox eine Eingabe tätigen. Anschließend soll diese in einem Modul verarbeitet werden und dann ins Tabellenblatt eingetragen werden.
Ich schaffe es das mir das Modul eine msgbox mit dem Wert ausgibt also wird dieser ja wohl übertragen. Wenn ich ihn dann aber eintragen will kommt die Fehlermeldung: "Laufzeitfehler '424': Objekt erforderlich". Muss ich wirklich Objekte definieren oder gibt es einen anderen Weg. Bin noch relativ neu bei VBA und habe mich noch nicht mit objektorienter Programmierung beschäftigt.
Danke für eure Hilfe, hier der Code:
In Userform1(es wird Wert in TextBox1 eingegeben):
Private Sub CommandButton1_Click()
Call Test
End Sub

In Modul:
Public Function Test()
MsgBox (UserForm1.TextBox1.Value)
Dim Variable As String
Variable = UserForm1.TextBox1.Value & " irgendwas"
ActiveSheets.Cells(1, 1).Value = Variable
End Function

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eingabe von UserForm an Modul
09.11.2017 11:18:06
UserForm
Hi Tobi,
da Deine Function ja keinen Wert zurück gibt, genügt ein Sub. Dem kannst Du als Parameter gleich den Text der Textbox mit übergeben.

Private Sub CommandButton1_Click()
'Ich gehe davon aus, dass sich Button und Textbox auf der gleichen Form befinden
Test TextBox1.Text
End Sub
Public Sub Test(strInhalt as string)
MsgBox strInhalt
ActiveSheets.Cells(1, 1).Value = strInhalt & " irgendwas"
End Sub

Anzeige
AW: Eingabe von UserForm an Modul
09.11.2017 14:18:13
UserForm
Grüß dich Ralf,
vielen Dank für deine schnelle Antwort. Leider kommt die Fehlermeldung immer noch :/
Hast du eine Idee woran das liegen kann? Button und TextBox sind natürlich in der gleichen Userform.
Gruß Tobi
AW: Eingabe von UserForm an Modul
09.11.2017 14:29:59
UserForm
Hallo Tobi,
Frage:
Wozu eine Funktion?
Warum schreibst du den Code nicht direkt ins Click-Ereignis deiner Schaltfläche?
Private Sub CommandButton1_Click()
Dim strEintrag As String
strEintrag = UserForm1.TextBox1 & " Hallo"
MsgBox strEintrag
Worksheets("Tabelle1").Cells(1, 1) = strEintrag
End Sub
Gruß Werner
Anzeige
AW: Eingabe von UserForm an Modul
09.11.2017 15:42:11
UserForm
Hi Werner,
bisher habe ich alles in eine Funktion geschrieben. Das Problem ist, dass meine tatsächliche Funktion riesig ist und ich deshalb die Übersicht verliere. :/
Hier mal das Click Ereignis von einer Userform. Davon habe ich ca. 7 Stück.
Private Sub Button_Take_Click()
''Die Anzahl der Anlagen: y bestimmt wie viele Zeilen in der Tabelle erstellt werden. Das  _
Programm geht den Code also
'y mal durch und erstellt dabei y Zeilen. Es wird automatisch jeder Zeile die richtige ID  _
zugewiesen
Dim last As Integer
Dim i As Integer
For i = 1 To y
'Allgemein
'last als Variable für die erste unbeschriebene Zeile in Spalte 1. Da ID in Spalte 1
'und diese jede "Runde" erhöht wird => keine Verschiebungen
last = Sheets("Gutachten").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Sheets("Gutachten").Cells(last, 1).Value = last - 1
Sheets("Gutachten").Cells(last, 2).Value = Gutachten.Projektnummer.Value
Sheets("Gutachten").Cells(last, 3).Value = Gutachten.NameWindpark.Value
Sheets("Gutachten").Cells(last, 4).Value = y
Sheets("Gutachten").Cells(last, 5).Value = Gutachten.KBS.Value
Sheets("Gutachten").Cells(last, 9).Value = Gutachten.Gutachter.Value
Sheets("Gutachten").Cells(last, 10).Value = Gutachten.Dokumentenart.Value
Sheets("Gutachten").Cells(last, 12).Value = Gutachten.DatumdesBerichts.Value
Sheets("Gutachten").Cells(last, 13).Value = Gutachten.Berichtsnummer.Value
Sheets("Gutachten").Cells(last, 14).Value = Gutachten.Link.Value
Sheets("Gutachten").Cells(last, 15).Value = Gutachten.Quelle.Value
Sheets("Gutachten").Cells(last, 17).Value = Gutachten.Vergleichsanlagen.Value
Sheets("Gutachten").Cells(last, 18).Value = Gutachten.Windmessung.Value
Sheets("Gutachten").Cells(last, 16).Value = Gutachten.Kommentar.Value
'Geländemodell IF
Dim Geländemodell As String
If GeländemodellJa = True Then
Geländemodell = "Ja"
Else:
Geländemodell = "Nein"
End If
Sheets("Gutachten").Cells(last, 31).Value = Geländemodell
Sheets("Gutachten").Cells(last, 32).Value = Gutachten.Auflösung.Value
Sheets("Gutachten").Cells(last, 33).Value = Gutachten.GeländemodellLink.Value
'Normkonformität IF
Dim Normkonformität As String
If NormkonformitätJa = True Then
Normkonformität = "Ja"
Else:
Normkonformität = "Nein"
End If
Sheets("Gutachten").Cells(last, 34).Value = Normkonformität
'Grunddaten
Sheets("Gutachten").Cells(last, 11).Value = Gutachten.Controls("Kürzel" & i).Value
Sheets("Gutachten").Cells(last, 6).Value = Gutachten.Controls("XKoordinate" & i).Value
Sheets("Gutachten").Cells(last, 7).Value = Gutachten.Controls("YKoordinate" & i).Value
Sheets("Gutachten").Cells(last, 19).Value = Gutachten.Controls("KommentarzuVarianten" & i). _
Value
'technische Beschreibung
Sheets("Gutachten").Cells(last, 20).Value = Gutachten.Controls("Anlagentyp" & i).Value
Sheets("Gutachten").Cells(last, 21).Value = Gutachten.Controls("LinkAnlagentyp" & i).Value
Sheets("Gutachten").Cells(last, 22).Value = Gutachten.Controls("Nabenhöhe" & i).Value
Sheets("Gutachten").Cells(last, 23).Value = Gutachten.Controls("LinktechnischeBeschreibung"  _
& i).Value
'Wind
Sheets("Gutachten").Cells(last, 24).Value = Gutachten.Controls("VWNH" & i).Value
Sheets("Gutachten").Cells(last, 25).Value = Gutachten.Controls("AWeibull" & i).Value
Sheets("Gutachten").Cells(last, 26).Value = Gutachten.Controls("KWeibull" & i).Value
Sheets("Gutachten").Cells(last, 27).Value = Gutachten.Controls("KommentarWeibull" & i). _
Value
Sheets("Gutachten").Cells(last, 28).Value = Gutachten.Controls("Hauptwindrichtung" & i). _
Value
Sheets("Gutachten").Cells(last, 29).Value = Gutachten.Controls("Hauptenergierichtung" & i). _
Value
Sheets("Gutachten").Cells(last, 30).Value = Gutachten.Controls("KommentarWindverteilung" &  _
i).Value
'Energie
Sheets("Gutachten").Cells(last, 35).Value = Gutachten.Controls("AEPWEA" & i).Value
Sheets("Gutachten").Cells(last, 36).Value = Gutachten.Controls("WirkungsgradWEA" & i).Value
Sheets("Gutachten").Cells(last, 37).Value = Gutachten.AEPPark.Value
Sheets("Gutachten").Cells(last, 38).Value = Gutachten.WirkungsgradPark.Value
Sheets("Gutachten").Cells(last, 39).Value = Gutachten.Controls("KommentarErtrag" & i).Value
'Zusatz
Sheets("Gutachten").Cells(last, 40).Value = ErstellerGutachten
Sheets("Gutachten").Cells(last, 41).Value = Date
Dim Name As String
Name = Gutachten.Gutachter.Value & " " & Gutachten.Dokumentenart.Value & " " & Gutachten.Kü _
rzel1.Value
Sheets("Gutachten").Cells(last, 8).Value = Name
Next i
Call Speichern
End Sub

Anzeige
AW: Eingabe von UserForm an Modul
09.11.2017 15:55:07
UserForm
Hallo Tobi,
dann kannst du das ja ein ein ganz allgemeines Modul auslagern:
Sub Makro1()
Dim strEintrag As String
strEintrag = UserForm1.TextBox1 & " Hallo"
MsgBox strEintrag
Worksheets("Tabelle1").Cells(1, 1) = strEintrag
End Sub
und Aufruf in deinem CommandButton
Private Sub CommandButton1_Click()
Call Makro1
End Sub
Gruß Werner
Anzeige
AW: Eingabe von UserForm an Modul
09.11.2017 18:10:53
UserForm
Merci Werner,
so läufts. Warum bin ich da nicht selber drauf gekommen :D
Gerne u. Danke für die Rückmeldung. o.w.T.
09.11.2017 18:21:37
Werner
AW: Eingabe von UserForm an Modul
09.11.2017 16:00:46
UserForm
Hast du eine Idee woran das liegen kann?
Nö, da musst Du die Ursache woanders suchen. Setz doch (mit F9) mal einen Haltepunkt vor den Aufruf von Test und geh dann mit F8 im Einzelschrittmodus durch. Da kannst Du sehr schön nachverfolgen was passiert...
Anzeige
AW: Eingabe von UserForm an Modul
09.11.2017 15:36:47
UserForm
Grüß dich Ralf,
vielen Dank für deine schnelle Antwort. Leider kommt die Fehlermeldung immer noch :/
Hast du eine Idee woran das liegen kann? Button und TextBox sind natürlich in der gleichen Userform.
Gruß Tobi
;
Anzeige
Anzeige

Infobox / Tutorial

Eingabe von UserForm an Modul in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Erstelle eine UserForm in Excel VBA:

    • Füge eine UserForm in deinem VBA-Editor hinzu.
    • Platziere eine TextBox (z.B. TextBox1) und einen CommandButton (z.B. CommandButton1) auf der UserForm.
  2. Code für den CommandButton:

    • Verwende den folgenden Code, um den Text aus der TextBox zu verarbeiten und in ein Modul zu übertragen:
    Private Sub CommandButton1_Click()
       Call Test(TextBox1.Text)
    End Sub
  3. Modul erstellen:

    • Füge ein neues Modul hinzu und schreibe die folgende Subroutine:
    Public Sub Test(strInhalt As String)
       MsgBox strInhalt
       Worksheets("Tabelle1").Cells(1, 1).Value = strInhalt & " irgendwas"
    End Sub
  4. UserForm ausführen:

    • Starte die UserForm und gib einen Wert in die TextBox ein. Klicke auf den Button, um den Wert zu verarbeiten.

Häufige Fehler und Lösungen

  • Laufzeitfehler '424': Objekt erforderlich:

    • Dieser Fehler tritt auf, wenn du versuchst, auf ein nicht definiertes Objekt zuzugreifen. Stelle sicher, dass du die richtige Syntax verwendest, z.B. Worksheets("Tabelle1") statt ActiveSheets.
  • Fehlende Daten in der TextBox:

    • Vergewissere dich, dass die TextBox den richtigen Namen hat und dass du den Text richtig übergibst.

Alternative Methoden

  • Direkte Verarbeitung im Click-Ereignis:

    • Du kannst den gesamten Code direkt im Click-Ereignis des Buttons ausführen, ohne eine separate Funktion zu verwenden:
    Private Sub CommandButton1_Click()
       Dim strEintrag As String
       strEintrag = TextBox1.Value & " Hallo"
       MsgBox strEintrag
       Worksheets("Tabelle1").Cells(1, 1).Value = strEintrag
    End Sub

Praktische Beispiele

  • Beispiel für die Eingabe mehrerer Werte:

    • Falls du mehrere UserForms hast, kannst du denselben Ansatz für jede UserForm wiederholen, indem du die Logik für jede TextBox anpasst.
  • Verwendung von Schleifen:

    • Wenn du mehrere Eingaben in einer Tabelle speichern möchtest, kannst du eine Schleife verwenden:
    For i = 1 To AnzahlDerEintraege
       Worksheets("Tabelle1").Cells(i, 1).Value = Gutachten.Controls("TextBox" & i).Value
    Next i

Tipps für Profis

  • Debugging:

    • Setze Haltepunkte (mit F9) und gehe Schritt für Schritt durch deinen Code (mit F8), um Fehler zu identifizieren und zu beheben.
  • Modularer Code:

    • Halte deinen Code modular, indem du Funktionen für wiederkehrende Aufgaben erstellst. Dies verbessert die Lesbarkeit und Wartbarkeit deines Codes.

FAQ: Häufige Fragen

1. Warum funktioniert mein Code nicht? Überprüfe, ob alle Objekte (z.B. UserForm, TextBox) korrekt benannt und vorhanden sind.

2. Wie kann ich mehrere Werte gleichzeitig eingeben? Du kannst mehrere TextBoxen in deiner UserForm hinzufügen und die Werte in einer Schleife verarbeiten.

3. Was ist der Unterschied zwischen Sub und Function? Eine Sub führt eine Aktion aus, während eine Function einen Wert zurückgibt. Verwende Sub für einfache Aufgaben ohne Rückgabewert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige