Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Anwendungs. o objektorientierter Fehlerl

Anwendungs. o objektorientierter Fehlerl
13.04.2020 13:29:52
Gerald
Hallo Welt..... :-)
Ich erhalte beim Ändern von einem Datensatz immer die Meldung Anwendungs- oder objektorientierter Fehler... Nachdem ich mich schon im Code bucklig gesucht hab und im Internet der Fehler einfach zu vage ist, frage ich mich, ob vielleicht ein richtiger Programmierer mir hier weiterhelfen kann.....
Zum Programm: Ich suche einen Patienten nach dem Nachnamen, ändere irgendeinen Eintrag und drücke den Button ändern.
Es kommt noch die Frage ob geändert werden soll und dann tauch der Fehler auf....
Ich seh jedenfalls kein Licht am Ende des Tunnels... Die Datei hängt dabei...
https://www.herber.de/bbs/user/136671.xlsm
Vielen dank

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anwendungs. o objektorientierter Fehlerl
13.04.2020 13:34:16
Hajo_Zi
ich habe die Zelle A9 geändert und damit einen Datensatz geändert. Ich erhalte keinen Fehler.
Den Button ""ändern" habe ich nicht gefunden.
Ich investiere keine Zeit um rauszufinden wo ein Fehler kommt.
Vielleicht solltest Du schreiben wie man den Fehler auslöst?

Selbst an Ostern bleibt man von...
13.04.2020 14:11:19
Werner
Hallo Hajo,
...von deinem Gelabere verschont. Einfach lesen, das würde schon reichen.
Gruß Werner
AW: Anwendungs. o objektorientierter Fehlerl
13.04.2020 13:49:26
Werner
Hallo,
hier
Private Sub But_Aendern_Click()
Dim findeZelle As Range
Dim Antwort As String
Dim lngL As Long
Antwort = MsgBox("Sollen die Patientendaten geändert werden?", vbYesNoCancel, "Datensatzä _
nderung speichern?")
If Antwort = vbYes Then
'Blattschutz aufheben
ActiveSheet.Unprotect
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True

hebst du den Blattschutz auf und setzt ihn direkt im Anschluss wieder. Schmeiß mal das ActiveSheet.Protect raus (den Blattschutz setzt du weiter unten im Code)
Gruß Werner
Anzeige
AW: Anwendungs. o objektorientierter Fehlerl
13.04.2020 13:59:43
Regina
Hi, einmal gibt es ein problem mit dem Blattschutz, der muss "oben" im Code raus, außerdem läuft der Code immer in das Worksheet_Change-Ereignis des Tabellenblattes. Daher würde ich die Ereignisse mit Application-EnableEvents ausschalten:
Private Sub But_Aendern_Click()
Dim findeZelle As Range
Dim Antwort As String
Dim lngL As Long
Application.EnableEvents = False
Antwort = MsgBox("Sollen die Patientendaten geändert werden?", vbYesNoCancel, "Datensatzä _
nderung speichern?")
If Antwort = vbYes Then
'Blattschutz aufheben
ActiveSheet.Unprotect
'  ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True
lngL = Sheets("Priorität").Cells(Rows.Count, 1).End(xlUp).Row
Set findeZelle = Sheets("Priorität").Range("A9:A" & lngL).Find(LfdNr_TB, , LookIn:=xlValues, _
lookat:=xlWhole)
If Not findeZelle Is Nothing Then
With Sheets("Priorität")
.Cells(findeZelle.Row, 2) = Me.Vorname_TB
.Cells(findeZelle.Row, 3) = Me.Name_TB
.Cells(findeZelle.Row, 4) = CLng(Me.Telefon_TB)
.Cells(findeZelle.Row, 6) = CDate(Me.GebDatum_TB)
.Cells(findeZelle.Row, 7) = Me.Bemerkungen_TB
.Cells(findeZelle.Row, 8) = Me.Diagnose_CB
.Cells(findeZelle.Row, 9) = CDate(Me.Diagnosedatum_TB)
.Cells(findeZelle.Row, 10) = Me.Tumor_CB
.Cells(findeZelle.Row, 11) = Me.Lymphknoten_CB
.Cells(findeZelle.Row, 12) = Me.Metastasen_CB
.Cells(findeZelle.Row, 13) = Me.Tumorstadium_CB
.Cells(findeZelle.Row, 14) = Me.Tumorwachstum_CB
If OPAbgeschlossen_TB  "" Then .Cells(findeZelle.Row, 19) = CDate(Me. _
OPAbgeschlossen_TB)
End With
'Blatt schützen
ActiveSheet.Protect
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
False, AllowFiltering:=True
ActiveWorkbook.Save
Else
MsgBox "nicht gefunden!", vbExclamation
Exit Sub
End If
ElseIf Antwort = vbNo Then
MsgBox "Datensatz nicht geändert"
Unload Eingabe_Patientendaten
Exit Sub
Else
MsgBox "Abgebrochen"
Unload Eingabe_Patientendaten
Exit Sub
End If
Application.EnableEvents = True
Unload Eingabe_Patientendaten
End Sub
Gruß Regina
Anzeige
AW: Anwendungs. o objektorientierter Fehlerl
13.04.2020 14:21:16
Nepumuk
Hallo Gerald,
ich würde das so machen:
Private Sub But_Aendern_Click()
    
    Dim findeZelle As Range
    Dim Antwort As VbMsgBoxResult
    
    Antwort = MsgBox("Sollen die Patientendaten geändert werden?", vbQuestion Or vbYesNo, "Datensatzänderung speichern?")
    
    If Antwort = vbYes Then
        
        Application.EnableEvents = False
        
        With Worksheets("Priorität")
            
            'Blattschutz aufheben
            .Unprotect
            
            Set findeZelle = .Columns(1).Find(LfdNr_TB.Text, LookIn:=xlValues, LookAt:=xlWhole)
            
            If Not findeZelle Is Nothing Then
                
                .Cells(findeZelle.Row, 2).Value = Vorname_TB.Text
                .Cells(findeZelle.Row, 3).Value = Name_TB.Text
                .Cells(findeZelle.Row, 4).Value = Clng(Telefon_TB.Text)
                .Cells(findeZelle.Row, 6).Value = CDate(GebDatum_TB.Text)
                .Cells(findeZelle.Row, 7).Value = Bemerkungen_TB.Text
                .Cells(findeZelle.Row, 8).Value = Diagnose_CB.Text
                .Cells(findeZelle.Row, 9).Value = CDate(Diagnosedatum_TB.Text)
                .Cells(findeZelle.Row, 10).Value = Tumor_CB.Text
                .Cells(findeZelle.Row, 11).Value = Lymphknoten_CB.Text
                .Cells(findeZelle.Row, 12).Value = Metastasen_CB.Text
                .Cells(findeZelle.Row, 13).Value = Tumorstadium_CB.Text
                .Cells(findeZelle.Row, 14).Value = Tumorwachstum_CB.Text
                If OPAbgeschlossen_TB.textlength > 0 Then .Cells(findeZelle.Row, 19).Value = CDate(OPAbgeschlossen_TB.Text)
                
                'Blatt schützen
                .Protect DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFiltering:=True
                
                ThisWorkbook.Save
                
                Application.EnableEvents = True
                
            Else
                MsgBox "nicht gefunden!", vbExclamation
            End If
        End With
        
    ElseIf Antwort = vbNo Then
        
        MsgBox "Datensatz nicht geändert"
        
    End If
    
    Unload Me
    
End Sub

Gruß
Nepumuk
Anzeige
Da ist noch ein Fehler drin.
13.04.2020 14:26:15
Nepumuk
So:
Private Sub But_Aendern_Click()
    
    Dim findeZelle As Range
    Dim Antwort As VbMsgBoxResult
    
    Antwort = MsgBox("Sollen die Patientendaten geändert werden?", vbQuestion Or vbYesNo, "Datensatzänderung speichern?")
    
    If Antwort = vbYes Then
        
        With Worksheets("Priorität")
            
            Set findeZelle = .Columns(1).Find(LfdNr_TB.Text, LookIn:=xlValues, LookAt:=xlWhole)
            
            If Not findeZelle Is Nothing Then
                
                Application.EnableEvents = False
                
                'Blattschutz aufheben
                .Unprotect
                
                .Cells(findeZelle.Row, 2).Value = Vorname_TB.Text
                .Cells(findeZelle.Row, 3).Value = Name_TB.Text
                .Cells(findeZelle.Row, 4).Value = Clng(Telefon_TB.Text)
                .Cells(findeZelle.Row, 6).Value = CDate(GebDatum_TB.Text)
                .Cells(findeZelle.Row, 7).Value = Bemerkungen_TB.Text
                .Cells(findeZelle.Row, 8).Value = Diagnose_CB.Text
                .Cells(findeZelle.Row, 9).Value = CDate(Diagnosedatum_TB.Text)
                .Cells(findeZelle.Row, 10).Value = Tumor_CB.Text
                .Cells(findeZelle.Row, 11).Value = Lymphknoten_CB.Text
                .Cells(findeZelle.Row, 12).Value = Metastasen_CB.Text
                .Cells(findeZelle.Row, 13).Value = Tumorstadium_CB.Text
                .Cells(findeZelle.Row, 14).Value = Tumorwachstum_CB.Text
                If OPAbgeschlossen_TB.textlength > 0 Then .Cells(findeZelle.Row, 19).Value = CDate(OPAbgeschlossen_TB.Text)
                
                'Blatt schützen
                .Protect DrawingObjects:=False, Contents:=True, Scenarios:=False, AllowFiltering:=True
                
                ThisWorkbook.Save
                
                Application.EnableEvents = True
                
            Else
                MsgBox "Nicht gefunden!", vbExclamation, "Hinweis"
            End If
        End With
        
    ElseIf Antwort = vbNo Then
        
        MsgBox "Datensatz nicht geändert", vbInformation, "Information"
        
    End If
    
    Unload Me
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Anwendungs. o objektorientierter Fehlerl
13.04.2020 20:14:27
Gerald
Wow - Hallo Nepomuk,
ich danke dir - Ich hab jetzt das ganze Wochenende gesucht und erhalte im Forum nicht nur eine Lösung für mein Problem, und das auch noch in einer Geschwindigkeit, mit der ich nicht gerechnet und erst gar nicht nachgesehen hab, weil ich gedacht hab, dass heute sowieso keiner arbeiten wird....
Wirklich vielen vielen Dank. Ich finde es super wie du das gelöst hast. Ich werde den Code jetzt noch mal genau studieren, denn du hast gleich einige wirklich gute Verbesserungen eingebaut :-)
Vielen Dank auch allen anderen die sich die Zeit genommen haben mein Problem anzusehen.
Wirklich Super :-)
Vielen Dank,
Gerald
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
14.04.2020 07:05:26
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige