Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
23.12.2017, 23:43
(Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2017, 00:13 von Kuwer.)
Tschüss und schöne Weihnachten.
Registriert seit: 15.02.2017
Version(en): office2010
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!
Registriert seit: 12.04.2014
Version(en): Office 365
Hallo
da ist mindestens 1 Option Explicit Zuviel das darf nur ganz oben stehen
MfG Tom
Registriert seit: 15.02.2017
Version(en): office2010
(24.12.2017, 00: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: Gruss
Registriert seit: 15.02.2017
Version(en): office2010
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
Registriert seit: 12.04.2014
Version(en): Office 365
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
Registriert seit: 12.04.2014
Version(en): Office 365
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
Registriert seit: 15.02.2017
Version(en): office2010
Hi Tom,
CommandButton5 (Suchen) habe ich eben erst getestet.
Der funktioniert doch nicht.
Alle anderen CommandButton funktionieren!
siehe Anhang
Hast du da eine Idee
Registriert seit: 15.02.2017
Version(en): office2010
Registriert seit: 12.04.2014
Version(en): Office 365
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
|