Clever-Excel-Forum

Normale Version: UserForm in Excel-Datei
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4
Tschüss und schöne Weihnachten.   Xmas22
mit weiter meinte ich, dass der schon vorhandene Code weitergeht.

Also so steht der Code jetzt drinne und in Datum2 folgt nach Doppelklick eine Fehlermeldung.

Code:
'Neuer Eintrag Schaltfläche Ereignisroutine
Private Sub CommandButton1_Click()
  Dim lZeile As Long
    'Wenn der Benutzer einen neuen Eintrag erzeugen möchte,
    'erstellen wir einen neuen Eintrag in der ListBox und markieren
    'diesen, damit der Benutzer die Daten eintragen kann
   
    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die überschriftrn
    'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    Loop
   
    'Nach Durchlauf dieser Schleife steht lZeile in der ersten leeren Zeile von Tabelle1
    'Neuen Eintrag in die Tabelle1 schreiben, Spalte ID muss gefüllt sein, damit
    'unsere Routinen die Zeile wiederfinden!
                                              'Tabelle1.Cells(lZeile, 1) = CStr("Neuer Eintrag Zeile " & lZeile)
     Tabelle1.Cells(lZeile, 1) = CStr("" & lZeile)
   
    'Und neuen Eintrag in die UserForm eintragen
                                                'ListBox1.AddItem CStr("Neuer Eintrag Zeile " & lZeile)
   ListBox1.AddItem CStr("" & lZeile)
    'Den neuen Eintrag markieren mit Hilfe des ListIndexes
    ListBox1.ListIndex = ListBox1.ListCount - 1
    'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen
   
End Sub
Sub UndoEdits()
   If Me.Dirty Then
       Me!btnUndo.Enabled = True    ' Enable button.
   Else
       Me!btnUndo.Enabled = False    ' Disable button.
   End If
End Sub
Sub btnUndo_Click()
   Dim ctlC As Control
       ' For each control.
       For Each ctlC In Me.Controls
           If ctlC.ControlType = acTextBox Then
               ' Restore Old Value.
               ctlC.Value = ctlC.OldValue
           End If
       Next ctlC
End Sub
Option Explicit
                                                           'neu
Sub Zeile_Loeschen()
  If MsgBox("Sind sie sicher?", vbYesNoCancel, "Zeilen Löschen") = vbYes Then
     Selection.EntireRow.Delete
  End If
End Sub

'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
  Dim lZeile As Long
 
    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
    If ListBox1.ListIndex = -1 Then Exit Sub
 
    'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
    'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
   
        'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
        If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
           
            'Eintrag gefunden, die ganze Zeile wird nun gelöscht
            Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
           
            'Die ListBox muss nun neu geladen werden!
            Call UserForm_Initialize
            If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
           
            Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
           
        End If
   
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    Loop
   
End Sub

Speichern Schaltfläche Ereignisroutine
Private Sub CommandButton3_Click()

            Tabelle1.Cells(lZeile, 3).Value = DateValue(TextBox3.Text)
            Tabelle1.Cells(lZeile, 4).Value = DateValue(TextBox4.Text)
 
End Sub

Private Sub TextBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 TextBox3 = Date
End Sub

Private Sub TextBox4_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 TextBox4 = Date
End Sub
  Dim lZeile As Long
 
    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
    If ListBox1.ListIndex = -1 Then Exit Sub
   
    'Wir müssen prüfen, ob die ID Spalte auch gefüllt ist!!
    If Trim(CStr(ComboBox1.Text)) = "" Then
        'Meldung ausgeben
        MsgBox "Sie müssen mindestens einen Namen eingeben!", vbCritical + vbOKOnly, "FEHLER!"
        'Abbrechen der Speicherroutine
        Exit Sub
    End If
    'Ausbauoption: Prüfen, ob die ID in Tabelle1 Spalte 1 schon vorhanden ist!
   
    'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
    'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
   
        'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen
        If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
           
            'Eintrag gefunden, TextBoxen in die Zellen schreiben
            Tabelle1.Cells(lZeile, 1).Value = Trim(CStr(ComboBox1.Text))
            Tabelle1.Cells(lZeile, 2).Value = TextBox2.Text
            Tabelle1.Cells(lZeile, 3).Value = TextBox3.Text
            Tabelle1.Cells(lZeile, 4).Value = TextBox4.Text
            Tabelle1.Cells(lZeile, 5).Value = TextBox5.Text
            Tabelle1.Cells(lZeile, 6).Value = TextBox6.Text
            Tabelle1.Cells(lZeile, 7).Value = TextBox7.Text
            Tabelle1.Cells(lZeile, 8).Value = TextBox8.Text
            Tabelle1.Cells(lZeile, 9).Value = TextBox9.Text
            Tabelle1.Cells(lZeile, 10).Value = TextBox10.Text
            Tabelle1.Cells(lZeile, 11).Value = TextBox11.Text
            'Die ListBox muss nun neu geladen werden
            'allerdings nur, wenn sich der Name (ID) geändert hat
            If ListBox1.Text <> Trim(CStr(ComboBox1.Text)) Then
                Call UserForm_Initialize
                If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
            End If
           
            Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
           
        End If
   
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    Loop
   


End Sub


'Beenden Schaltfläche Ereignisroutine
Private Sub CommandButton4_Click()
    Unload Me
End Sub

Private Sub CommandButton5_Click()
Application.Dialogs(xlDialogFormulaFind).Show
Application.Dialogs(xlDialogFormulaReplace).Show

End Sub


'Klick auf die ListBox Ereignisroutine
Private Sub ListBox1_Click()
  Dim lZeile As Long
    'Wenn der Benutzer einen Namen anklickt, suchen wir
    'diesen in der Tabelle1 heraus und tragen die Daten
    'in die TextBoxen ein.
   
    'Wir löschen standardmäßig alle bisherigen TextBoxen-Inhalte
    ComboBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    TextBox7 = ""
    TextBox8 = ""
    TextBox9 = ""
    TextBox10 = ""
    TextBox11 = ""
   
    'Nur wenn ein Eintrag selektiert/markiert ist
    If ListBox1.ListIndex >= 0 Then
   
        lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
        'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
        Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
       
            'Wenn wir den Namen aus der ListBox1 in der Tabelle1 Spalte 1
            'gefunden haben, übertragen wir die anderen Spalteninhalte
            'in die TextBoxen!
            If ListBox1.Text = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) Then
           
                'TextBoxen füllen
                ComboBox1 = Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
                TextBox2 = Tabelle1.Cells(lZeile, 2).Value
                TextBox3 = Tabelle1.Cells(lZeile, 3).Value
                TextBox4 = Tabelle1.Cells(lZeile, 4).Value
                TextBox5 = Tabelle1.Cells(lZeile, 5).Value
                TextBox6 = Tabelle1.Cells(lZeile, 6).Value
                TextBox7 = Tabelle1.Cells(lZeile, 7).Value
                TextBox8 = Tabelle1.Cells(lZeile, 8).Value
                TextBox9 = Tabelle1.Cells(lZeile, 9).Value
                TextBox10 = Tabelle1.Cells(lZeile, 10).Value
                TextBox11 = Tabelle1.Cells(lZeile, 11).Value
           
                Exit Do 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
           
            End If
       
            lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
        Loop
       
    End If
   
End Sub

Private Sub UserForm_Activate()
    'Wenn die Eingabemaske angezeigt wird, markieren wir den ersten Namen
    'jedoch nur, wenn auch Einträge in der Liste stehen
    If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
End Sub

'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
Private Sub UserForm_Initialize()
  Dim lZeile As Long
 
    'Alle TextBoxen leer machen
    ComboBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextBox6 = ""
    TextBox7 = ""
    TextBox8 = ""
    TextBox9 = ""
    TextBox10 = ""
    TextBox11 = ""
 
    'In dieser Routine laden wir alle vorhandenen
    'Einträge in die ListBox1
    ListBox1.Clear 'Zuerst einmal die Liste leeren
   
    lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften
    'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
    Do While Trim(CStr(Tabelle1.Cells(lZeile, 1).Value)) <> ""
       
        'Aktuelle Zeile in die ListBox eintragen
        ListBox1.AddItem Trim(CStr(Tabelle1.Cells(lZeile, 1).Value))
       
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
       
    Loop
   
End Sub
Fehlermeldung:
"Fehler beim Kompilieren. Nach End Sub, End Funktionen...können nur Kommentare stehen.



Auch frohe Weihnachten!
Hallo

da ist mindestens 1 Option Explicit Zuviel
das darf nur ganz oben stehen

MfG Tom
(23.12.2017, 23:08)Crazy Tom schrieb: [ -> ]Hallo

da ist mindestens 1 Option Explicit Zuviel
das darf nur ganz oben stehen

MfG Tom

Hallo Tom,
Explicit kommt nur einmal vor!

Das Programm funktioniert.

Und der Code von Uwe, wodurch durch Doppelklick automtisch im Userform unter "Datum" angezeigt wird, funktioniert auch.
Nur beim zweiten Datum stockt das Programm beim Doppelklick.

Muss eventuell an der Zeile danach liegen:

Code:
Dim lZeile As Long

Gruss
Hallo Uwe,
ich habe deinen Code hinter den letzten Commando Button kopiert.

Code:
Private Sub CommandButton5_Click()
Application.Dialogs(xlDialogFormulaFind).Show
Application.Dialogs(xlDialogFormulaReplace).Show

End Sub

Tabelle1.Cells(lZeile, 3).Value = DateValue(TextBox3.Text)
            Tabelle1.Cells(lZeile, 4).Value = DateValue(TextBox4.Text)
 
End Sub

Private Sub TextBox3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 TextBox3 = Date
End Sub

Private Sub TextBox4_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
 TextBox4 = Date
End Sub
Dann funktioniert es!
Gruss
Hallo

wenn du den Code so in deiner Datei stehen hast wie du es in Beitrag 22 zeigst
dann kann da niemals nüscht irgendwas laufen

es steht mitten drin ein "Option Explicit", das darf NUR ganz oben stehen

über dem Commandbutton3_Click steht eine Kommentarzeile die nicht auskommentiert ist

hinter dem End Sub von Textbox4_DblClick hast du LZeile deklariert, das gehört,
wenn es schon außerhalb einer Prozedur steht ziemlich weit nach oben, unter Option Explicit
führt aber dann dennoch zu einem Crash weil die selbe Variable schon in einer anderen Prozedur deklariert wurde 
genauso steht unter Textbox4_DblClick noch jede Menge anderer Code,
ohne dass dort ein Prozedurkopf steht --> Private Sub.... <--

Basics! (mit 185,75 Ausrufezeichen)


MfG Tom
ich schmeiß mich wech
nu hab ich mich an meiner E-Zigarette verschluckt....

DAS soll funktionieren?????


Code:
Private Sub CommandButton5_Click()
Application.Dialogs(xlDialogFormulaFind).Show
Application.Dialogs(xlDialogFormulaReplace).Show

End Sub

Tabelle1.Cells(lZeile, 3).Value = DateValue(TextBox3.Text)
           Tabelle1.Cells(lZeile, 4).Value = DateValue(TextBox4.Text)
 
End Sub
Hi Tom,

CommandButton5 (Suchen) habe ich eben erst getestet.

Der funktioniert doch nicht.

Alle anderen CommandButton funktionieren!

siehe Anhang

Hast du da eine Idee
das ist die neue Liste
ich schreibe hier jetzt ein letztes Mal

wenn du behauptest in deiner "Liste aktuell 2" würde alles bis auf Commandbutton5 funktionieren
dann leben wir beide in verschiedenen Universen

es steht immer noch mitten im Code Option Explicit

Commandbutton5 hört mit End Sub auf
danach kommt Code der zu keiner Sub gehört
und danach steht noch ein einsames End Sub

verapfeln kann ich mich auch selbst

in diesem Sinne....

MfG Tom
Seiten: 1 2 3 4