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

Forumthread: Variablendef. und Variablen an Userform übergeben

Variablendef. und Variablen an Userform übergeben
20.06.2014 22:41:06
Ben
Hallo liebes Forum,
ich habe mein Problem von vor ein paar Tagen nun weiterprogrammiert und es sind nun neue Fragen aufgetaucht =/
Also ich habe eine Userform mit einem Textfeld (in der ich eine Kundennumer eingeben)... in der Excel Tabelle "kundendaten" soll nun nach der Kundennummer gesucht werden. Wie schaffe ich es das nun, dass die Zeile in der sich die Kundennummer befindet, als Variable gesetzt wird? Also wenn sich in der Zeile 5 die gesuchte Kundennummer befindet , die Variable D nun 5 wird.
Nachdem die Variable definiert wurde soll diese nun in die Userform Kundendaten_bearbeiten übernommen werden. Kann ich es dann irgendwie für die ganze Userformn gelten lassen? Also das ich gleich in allen Textfelder und Commandbuttons mit der Variable weiterarbeiten kann?
  • 
    Private Sub Weiter_Kundennummer_Click()
    Dim ws As Worksheet
    Set ws = Worksheets("Kundendaten")
    Dim D As Integer
    letztezeile = ws.Cells(Rows.Count, 1).End(xlUp).Row
    With ws.Range("A4:A" & letztezeile)
    Set C = .Find(Kundennummer_suchen.Text, LookIn:=xlValues, LookAt:=xlWhole)
    If Not C Is Nothing Then
    hier fehlt ein Befehl  für Variable D = Zeilennummer                                  _
    Else: MsgBox "Konnte den Eintrag nicht finden"
    End If
    End With
    Unload Me
    Kundendaten_bearbeiten(D).Show     Stimmt das mit dem "(D)"? 
    End Sub
    

  • Vielen Dank :)
    mit freundlichen Grüßen,
    Ben

    Anzeige

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

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Variablendef. und Variablen an Userform übergeben
    21.06.2014 00:24:30
    Mullit
    Hallo,
    wenn Du zwei Userforms hast, dann so:
    Option Explicit
    
    Private Sub Weiter_Kundennummer_Click()
    Dim D As Long
    Dim ws As Worksheet
    Dim C As Range
    Dim letztezeile As Long
    
    Set ws = Worksheets("Kundendaten")
    
    letztezeile = ws.Cells(Rows.Count, 1).End(xlUp).Row
    With ws.Range("A4:A" & letztezeile)
        Set C = .Find(Kundennummer_suchen.Text, LookIn:=xlValues, LookAt:=xlWhole)
        If Not C Is Nothing Then
    
          D = C.Row '''hier fehlt ein Befehl  für Variable D = Zeilennummer 
    
    
        Else: MsgBox "Konnte den Eintrag nicht finden"
    
        End If
    End With
    
    Unload Me
    
    With Kundendaten_bearbeiten
        .Tag = D
        .Show     ''Stimmt das mit dem "(D)"? 
    End With
    End Sub


    VBA/HTML - CodeConverter für Office-Foren
    AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
    Projektbetreuung durch mumpel



    Code erstellt und getestet in Office 12

    An die Tag-Eigenschaft kommst Du dann so in der 2. Form:
    Option Explicit
    
    Private Sub CommandButton1_Click()
    Dim lngVariable As Long
    lngVariable = Tag
    MsgBox lngVariable
    End Sub


    VBA/HTML - CodeConverter für Office-Foren
    AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
    Projektbetreuung durch mumpel



    Code erstellt und getestet in Office 12

    Gruß,

    Anzeige
    AW: Variablendef. und Variablen an Userform übergeben
    21.06.2014 22:57:05
    Ben
    Hi danke das mit dem C.Row klappt super!
    Das mit dem Tag klappt bei mir allerdings nicht ganz. Ich habe in der zweiten Userform mehrere Textfelder die bei dem öffnen der zweiten Userform automatisch mit einem Wert aus einer Excel befüllt werden sollen. Dazu brauche ich die Variable für die Zeihlenreihe, die ich eben übergeben will aus der vorherigen Userform.
    @ Mullit das mit dem Klick des nächsten Commandbuttons wird nicht klappen da die Variable ja schon am Anfang in der ganzen Userform gültig sein muss.
    Wenn ich es allerdings so mache gitb er mir Laufzeitfehler 13 Typen unverträglich ( bezogen auf lngVariable = Tag)

  • Option Explicit
    Dim lngVariable As Long
    Sub Speichern1_Click()
    lngVariable = Tag
    MsgBox lngVariable
    End Sub
    

  • Anzeige
    Falscher Datentyp !!!
    22.06.2014 07:41:20
    Nepumuk
    Hallo,
    die Tag-Eigenschaft ist ein String.
    Gruß
    Nepumuk

    AW: Falscher Datentyp !!!
    22.06.2014 08:10:23
    Mullit
    Hallo Nepumuk,
    das ist natürlich richtig, allerdings
    möchte der TO einen Long-Wert als Übergabewert
    für den Tag haben.
    Der steht zwar in der Tag Eigenschaft als String, aber wird
    wieder einer Long Variablen zugewiesen;
    Das läuft bei mir (in XL 2010) auch ohne Typ-Konvertierung ohne Fehler ab... ?!
    Schreibe ich einen String in den Tag und weise ihn der Longvariablen zu,
    bekomme ich den Typenfehler.
    Gruß, Mullit

    Anzeige
    AW: Falscher Datentyp !!!
    22.06.2014 08:43:38
    Nepumuk
    Hallo,
    schon richtig, aber wenn nichts oder keine Zahl drin steht läufst du in einen Fehler. Du musst also entweder ersteres ausschließen oder im nachhinein prüfen ob da auch wirklich eine Zahl drin steht. Alles andere funktioniert nur zufällig und ist nicht professionell.
    Gruß
    Nepumuk

    Anzeige
    AW: Falscher Datentyp !!!
    22.06.2014 09:34:39
    Mullit
    Hallo Nepumuk,
    ah okay, gut zu wissen...Danke für den Hinweis!
    Dann sollte dies bei Ben funktionieren und den Fehler verhindern:
    Option Explicit
    Private lngVariable As Long
    Private Sub CommandButton1_Click()
    If IsNumeric(Tag) Then
    lngVariable = Tag
    MsgBox lngVariable
    Else
    MsgBox "Es wurde kein gültiger Wert übergeben.", vbExclamation
    End If
    End Sub
    

    Gruß, Mullit

    Anzeige
    AW: Falscher Datentyp !!!
    22.06.2014 11:09:29
    Ben
    Hi danke für die vielen Antworten!
    @Mullit meinst du mit Command Button den in der zweiten Userform?
    Weil ich stehe jetzt vor dem Problem das wenn sich die zweite Userform öffnet das sich die Textbosen automatisch mit einem Wert aus der Excel "Kundendaten" Tabelle füllen sollen.
    Habe mir das mal so gedacht: (kundendaten_bearbeiten ist die zweite Userform)

  • Private Sub Kundendaten_bearbeiten_Initialize()
    dim ws as Worksheets "Kundendaten"
    If IsNumeric(Tag) Then
    lngVariable = Tag
    Else
    MsgBox "Es wurde kein gültiger Wert übergeben.", vbExclamation
    End If
    Textbox1.Text = ws.cells(IngVariable, 2).Value
    Textbox2.Text = ws.cells(IngVariable, 3).Value

  • Aber eines verstehe ich nicht ... ich habe die zweite Userform bei Name in "Kundendaten_bearbeiten" umbenannt aber wenn ich dann "Kundendaten_bearbeiten_Initialize" schreibe erkennt er es mir nicht
    Wenn ich doppelklick auf die Userform mache erscheint dann: "Userform_Click()" aber nicht "Kundendaten_bearbeiten_Click"

    Anzeige
    AW: Falscher Datentyp !!!
    22.06.2014 18:08:01
    Mullit
    Hallo Ben,
    u.a. deswegen sollte man sich mit dem Umbenennen der Objecte etwas zurückhalten:
    Mit einem Blick in den Objectkatalog stellt man fest:
    Die Events des Userforms gehören nicht zur jeweils unterschiedlichen Klasse des erstellten Userforms('Userform1'), sondern (teilweise) zur Userform-Klasse(Class Userform), die wiederum eine Schnittstelle darstellt.
    Die Name-Eigenschaft ist allerdings eine Eigenschaft der unterschiedlichen Klassen der verschiedenen erstellten Userform-Objecte(Class Userform1).
    Die Problematik hat Nepumuk hier sehr gut beschrieben und er könnte Dir das mit Sicherheit noch deutlich besser erklären .
    http://www.office-loesung.de/ftopic516038_0_0_asc.php
    Das Umbenennen ist natürlich trotzdem möglich, aber die Event-Prozeduren enthalten immer
    den Namen der Userform-Klasse und dürfen nicht verändert werden.
    Somit solltest Du hiermit in der 2. Form Zugriff auf Deinen Übergabewert bekommen:
    Option Explicit
    Private lngVariable As Long
    Private Sub UserForm_Initialize()
    Dim ws As Worksheets '''"Kundendaten"
    Set ws = Worksheets("Kundendaten")
    If IsNumeric(Tag) Then
    lngVariable = Tag
    Else
    MsgBox "Es wurde kein gültiger Wert übergeben.", vbExclamation
    End If
    TextBox1.Text = ws.Cells(lngVariable, 2).Value
    TextBox2.Text = ws.Cells(lngVariable, 3).Value
    End Sub
    
    Wenn Du den Tag-Wert nicht weiter bearbeiten willst,
    benötigst Du eigentlich auch keine Variable und kannst überall in der Form direkt
    auf ihn zugreifen.
    Du hattest übrigens lngVariable unterschiedlich geschrieben:
    Kleines 'l' statt großes 'I' ....
    Gruß, Mullit

    Anzeige
    AW: Falscher Datentyp !!!
    22.06.2014 23:32:26
    Mullit
    Hallo Ben,
    da muß nochmals nachkorrigiert werden, sonst läufst Du in zwei neue Fehler:
    Das Objekt heißt natürlich Worksheet und die Textboxen müssen in die If-Anweisung;
    zudem ist die Tag Eigenschaft im Initialize-Event noch nicht gesetzt:
    Code in Userform1:
    Option Explicit
    
    Private Sub Weiter_Kundennummer_Click()
    Dim D As Long
    Dim ws As Worksheet
    Dim C As Range
    Dim letztezeile As Long
    
    Set ws = Worksheets("Kundendaten")
    
    letztezeile = ws.Cells(Rows.Count, 1).End(xlUp).Row
    With ws.Range("A4:A" & letztezeile)
        Set C = .Find("rr", LookIn:=xlValues, LookAt:=xlWhole) '''Kundennummer_suchen.Text 
        If Not C Is Nothing Then
    
          D = C.Row '''hier fehlt ein Befehl  für Variable D = Zeilennummer 
    
    
        Else: MsgBox "Konnte den Eintrag nicht finden"
    
        End If
    End With
    
    Unload Me
    
    With Kundendaten_bearbeiten
        If Not C Is Nothing Then _
          .Tag = D
        .Show     ''Stimmt das mit dem "(D)"? 
    End With
    End Sub


    VBA/HTML - CodeConverter für Office-Foren
    AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
    Projektbetreuung durch mumpel



    Code erstellt und getestet in Office 12

    Code in Userform2:
    Option Explicit
    
    Private lngVariable As Long
    
    Private Sub UserForm_Activate()
    Dim wksSheet As Worksheet '''"Kundendaten" 
    Set wksSheet = Worksheets("Kundendaten")
    If IsNumeric(Tag) Then
      lngVariable = Tag
      With wksSheet
          TextBox1.Text = .Cells(lngVariable, 2).Value
          TextBox2.Text = .Cells(lngVariable, 3).Value
      End With
    End If
    End Sub


    VBA/HTML - CodeConverter für Office-Foren
    AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
    Projektbetreuung durch mumpel



    Code erstellt und getestet in Office 12

    Hoffentlich klappt's jetzt...
    Gruß, Mullit
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige
    Anzeige

    Infobox / Tutorial

    Variablen in UserForms übergeben und verwenden


    Schritt-für-Schritt-Anleitung

    1. Definiere die UserForms
      Stelle sicher, dass du zwei UserForms hast: Die erste für die Eingabe der Kundennummer und die zweite für die Anzeige und Bearbeitung der Kundendaten.

    2. Füge den Code in die erste UserForm ein
      Im Click-Ereignis des CommandButtons, der die Kundennummer verarbeitet, solltest du den folgenden Code verwenden:

      Private Sub Weiter_Kundennummer_Click()
         Dim ws As Worksheet
         Set ws = Worksheets("Kundendaten")
         Dim D As Long
         Dim C As Range
         Dim letztezeile As Long
      
         letztezeile = ws.Cells(Rows.Count, 1).End(xlUp).Row
         With ws.Range("A4:A" & letztezeile)
             Set C = .Find(Kundennummer_suchen.Text, LookIn:=xlValues, LookAt:=xlWhole)
             If Not C Is Nothing Then
                 D = C.Row
             Else
                 MsgBox "Konnte den Eintrag nicht finden"
             End If
         End With
      
         Unload Me
         With Kundendaten_bearbeiten
             .Tag = D
             .Show
         End With
      End Sub
    3. Code für die zweite UserForm hinzufügen
      In der UserForm_Initialize-Prozedur der zweiten UserForm fügst du folgenden Code hinzu:

      Private Sub UserForm_Initialize()
         Dim ws As Worksheet
         Set ws = Worksheets("Kundendaten")
         If IsNumeric(Tag) Then
             lngVariable = Tag
             TextBox1.Text = ws.Cells(lngVariable, 2).Value
             TextBox2.Text = ws.Cells(lngVariable, 3).Value
         Else
             MsgBox "Es wurde kein gültiger Wert übergeben.", vbExclamation
         End If
      End Sub

    Häufige Fehler und Lösungen

    • Laufzeitfehler 13: Typen unverträglich
      Dieser Fehler tritt auf, wenn du versuchst, einen nicht-numerischen Wert einer Long-Variable zuzuweisen. Stelle sicher, dass der Wert in der Tag-Eigenschaft tatsächlich eine Zahl ist. Verwende If IsNumeric(Tag) Then, um dies zu überprüfen.

    • UserForm-Initialize wird nicht erkannt
      Achte darauf, dass du die richtige Syntax für die Initialisierungsprozedur verwendest. Sie sollte Private Sub UserForm_Initialize() sein. Wenn du die UserForm umbenannt hast, überprüfe, ob die Event-Prozeduren korrekt benannt sind.


    Alternative Methoden

    • Verwendung von Properties
      Anstatt die Tag-Eigenschaft zu verwenden, kannst du auch benutzerdefinierte Properties für die UserForm erstellen. Damit kannst du Werte zwischen UserForms übergeben, ohne die Tag-Eigenschaft zu verwenden.

    • Globale Variablen
      Eine andere Möglichkeit, Daten zwischen UserForms zu teilen, ist die Verwendung globaler Variablen. Definiere eine globale Variable in einem Modul und greife von beiden UserForms darauf zu.


    Praktische Beispiele

    • Beispiel für das Finden einer Kundennummer
      Verwende den Find-Befehl, um die Zeile mit der gesuchten Kundennummer zu finden und in einer Variable zu speichern:

      D = C.Row
    • Automatisches Füllen von Textboxen
      Wenn du die zweite UserForm öffnest, kannst du die Textboxen mit Werten aus der Excel-Tabelle befüllen:

      TextBox1.Text = ws.Cells(lngVariable, 2).Value
      TextBox2.Text = ws.Cells(lngVariable, 3).Value

    Tipps für Profis

    • Fehlerbehandlung implementieren
      Verwende On Error Resume Next und On Error GoTo 0, um mögliche Laufzeitfehler zu ignorieren und sinnvoll zu behandeln.

    • Code sauber halten
      Kommentiere deinen Code und halte ihn strukturiert, damit du ihn später leichter verstehen und anpassen kannst.


    FAQ: Häufige Fragen

    1. Frage
    Wie kann ich die Variable D in der gesamten UserForm verwenden?
    Antwort
    Definiere die Variable D als Modul- oder Klassenvariable, sodass sie in der gesamten UserForm verfügbar ist.

    2. Frage
    Warum funktioniert die Tag-Eigenschaft nicht bei mir?
    Antwort
    Stelle sicher, dass du die Tag-Eigenschaft korrekt gesetzt hast und dass der Wert, den du übergibst, den richtigen Datentyp hat. Verwende IsNumeric, um sicherzustellen, dass es sich um eine Zahl handelt.

    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