• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro Error

Status
Niet open voor verdere reacties.

Frankell87

Gebruiker
Lid geworden
7 mei 2015
Berichten
141
Hallo heren en dames,

is het mogelijk om bij een Error een POP-up te krijgen waarin bijvoorbeeld staat: "Er is iets mis gegaan, gegevens zijn mogelijk niet goed opgeslagen"?
En dan in een tabblad weg te schrijven waar het fout ging in de macro? Graag wel telkens op de volgende regel. Graag met tijd en naam van de gebruiker.

de gebruiker hoeft hier dan niks mee te doen en wordt niet naar VBA geleid.
 
Laatst bewerkt:
Dat kan met iets als dit:
Code:
Sub Test()
    On Error GoTo Foutje
    ActiveWorkbook.SaveCopyAs "A:\a.a"
    Exit Sub
    
Foutje:
    With Sheets("Fouten")
        rij = .Cells(Rows.Count, "A").End(xlUp).Row + 1
        .Cells(rij, 1) = Err.Number
        .Cells(rij, 2) = Err.Description
        .Cells(rij, 3) = Now()
        .Cells(rij, 4) = Environ("username")
    End With
    MsgBox "Er is iets mis gegaan, gegevens zijn mogelijk niet goed opgeslagen", vbCritical
    Resume Next
End Sub

Als je je project met een wachtwoord beveiligd komt de gebruiker overigens nooit in het VBA project terecht.
 
oh oke, dat wist ik niet. dat kan hem mischien ook oplossen.

heb hem erin gezet maar hij loopt nu vast in:

Code:
.Cells(rij, 1) = Err.Number

gaat hij misschien niet goed naar de regel eronder?
 
De code zoals ik die plaatste werkt prima en loopt nergens vast.
 
ik zie het al, had hem de vorige keer afgesloten op dat blad en mijn beveiliging werd op activesheet gezet. hierdoor was dit tabblad beveiligd.

even verder kijken nu want hij komt nu met de pop-up opslaan na deze macro of niet terwijl ik die daarvoor had geblokkeerd en een andere pop-up voor had gezet
 
ik kan hiermee alleen niet zien waar (in welke regel) het mis ging.

onderstaande staat er nu:
75 Toegangsfout bij pad of bestand 28-4-2018 11:31 giermfr
75 Toegangsfout bij pad of bestand 28-4-2018 11:35 giermfr
75 Toegangsfout bij pad of bestand 28-4-2018 11:35 giermfr
75 Toegangsfout bij pad of bestand 28-4-2018 11:44 giermfr
75 Toegangsfout bij pad of bestand 28-4-2018 11:44 giermfr

ik heb hem bij de laatste op 2 plekken laten vastlopen maar hij geeft het hetzelfde weer.
 
Wat er wordt gebruikt is wat het Error object heeft. Je krijgt niet terug op welke regel het fout ging.
 
ok, ik zet er wel meerdere OnErrors in, die laat ik dan wel in een andere kolom wegschrijven.

gaat om een eerdere topic waarbij ik op verschillende plekken laat opslaan. als er dan wat niet goed gaat laat ik pop-up komen en de fout wegschijven.

als ik dan 2 tabellen maak: locatie 1 & locatie 2 dan ben ik er ook.

bedankt weer voor je snelle hulp!
 
Die On Error GoTo Foutje kan je dan als volgt weer uitschakelen:
On Error GoTo 0
 
Als dat werkt dan werkt het uiteraard.
Dat heb ik zelf alleen nog nooit zo gebruikt.
 
Het afdekken van errors is misschien leuk om te doen, maar wil je geen werkzaam bestand zonder fouten? Bestanden die mijn collega's gebruiken hebben toegang tot VBA en wanneer er onverhoopt een foutmelding komt, moeten ze op foutopsporing klikken en mij een printscreen van de gele regel sturen.
 
Nee, de 0 loopt vast als er meerdere fouten voordoen.... ik hou hem wel op -1
 
Die On Error GoTo 0 is de officiële wijze en kan nergens vast lopen.
Dan zit het probleem ergens anders in je code.
 
Frank, als jij je complete code hier niet plaatst wordt het niet duidelijk wat je allemaal uitspookt.
 
hieronder wat ik nu heb, geen idee waarom de -1 dan wel werkt. (was er niet mee bezig HSV)

ik zit nog met 1 puntje, ik krijg bij het sluiten (deze macro doorlopen) nog steeds aan het einde de pop-up opslaan-niet opslaan-annuleren.....

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Select Case ThisWorkbook.BuiltinDocumentProperties("Last Author")  'Controle of je schrijfbevoegd bent
        Case "Gierman, Frank", _
        "Laurman, Kees", _
        "Extra naam"
            Select Case MsgBox("Meneer Laurman, wil je het bestand opslaan voordat je het sluit?", vbYesNoCancel, "Opslaan")  '3 keuze box openen, "Ja/Nee/Annuleren"
            
            Case Is = vbYes 'Wanneer "Ja", opslaan op de locaties hieronder
            
                Dim Origname As String
                                                              
                    Application.DisplayAlerts = False
                    Sheets("Onderhoudsplan 2018").Protect Password:="Wachtwoord", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True
                    
                            ActiveWorkbook.SaveAs "I:\TDWerk-Teamleiders\TD MNL\" + ActiveWorkbook.Name
                            
                        On Error GoTo 11
                            SetAttr "I:\Management-Dashboard_Loenen\Onderhoudsschema\" + ActiveWorkbook.Name, vbReadWrite 'Maak hier een ReadWrite van
                                ActiveWorkbook.SaveAs "I:\Management-Dashboard_Loenen\Onderhoudsschema\" + ActiveWorkbook.Name
                            SetAttr "I:\Management-Dashboard_Loenen\Onderhoudsschema\" + ActiveWorkbook.Name, vbReadOnly 'Maak hier een ReadOnly van
                            
11:
                            With Sheets("Fouten") 'fout registratie in tabblad fouten
                                rij = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                                .Cells(rij, 1) = Err.Number
                                .Cells(rij, 2) = Err.Description
                                .Cells(rij, 3) = Now()
                                .Cells(rij, 4) = Environ("username")
                                
                            End With

                            MsgBox "Er ging iets niet goed met opslaan: " & vbNewLine & vbNewLine & "Opslag Management-Dashboard Loenen\Onderhoudsschema niet gelukt", vbOKOnly, "Fout"
                            
                        On Error GoTo -1
                        On Error GoTo 12
                            SetAttr "I:\Management-Dashboard\Onderhoudsplanning\" + ActiveWorkbook.Name, vbReadWrite 'Maak hier een ReadWrite van
                                ActiveWorkbook.SaveAs "I:\Management-Dashboard\Onderhoudsplanning\" + ActiveWorkbook.Name
                            SetAttr "I:\Management-Dashboard\Onderhoudsplanning\" + ActiveWorkbook.Name, vbReadOnly 'Maak hier een ReadOnly van
                            
12:
                            With Sheets("Fouten") 'fout registratie in tabblad fouten
                                rij = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                                .Cells(rij, 6) = Err.Number
                                .Cells(rij, 7) = Err.Description
                                .Cells(rij, 8) = Now()
                                .Cells(rij, 9) = Environ("username")
                            MsgBox "Er ging iets niet goed met opslaan: " & vbNewLine & vbNewLine & "Opslag Management-Dashboard\Onderhoudsplanning (Eerbeek) niet gelukt", vbOKOnly, "Fout"
                            End With
             
                Application.DisplayAlerts = True

                Exit Sub 'Afsluiten bestand na het opslaan
                
                Case Is = vbCancel 'Wanneer "Annuleren", terug naar bestand
                  Cancel = True
                        
                Case Is = vbNo 'Wanneer "Nee", afsluiten zonder opslaan
                  Application.DisplayAlerts = False
                  Application.Quit
            Exit Sub 'Afsluiten "ingeval van gebruiker..."
            End Select
    Exit Sub
    End Select
        
If ThisWorkbook.ReadOnly Then
Select Case MsgBox("Bestand wordt gesloten, opslaan is niet mogelijk! " _
                & vbNewLine & vbNewLine & "Klik Ok om af te sluiten zonder op te slaan." & vbNewLine & "" _
                & vbNewLine & "Klik annuleren en kies 'Opslaan als' om een persoonlijk bestand te maken." & vbNewLine & "", vbOKCancel, "ReadOnly bestand") 'Igv ReadOnly bestand deze POP-up
                
        Case Is = vbCancel
        Cancel = True
        
        Case Is = vbOK 'Wanneer "Ok", afsluiten zonder opslaan
                  Application.DisplayAlerts = False
                  Application.Quit
End Select
End If

    Select Case MsgBox("Bestand wordt gesloten, opslaan is niet mogelijk! " _
                    & vbNewLine & vbNewLine & "Klik Ok om af te sluiten zonder op te slaan." & vbNewLine & "" _
                    & vbNewLine & "Klik annuleren en kies 'Opslaan als' om een persoonlijk bestand te maken." & vbNewLine & "", vbOKCancel, "ReadOnly bestand") 'Indien je niet gebruiker ... bent deze POP-up
                    
            Case Is = vbCancel
            Cancel = True
            
            Case Is = vbOK 'Wanneer "Ok", afsluiten zonder opslaan
                      Application.DisplayAlerts = False
                      Application.Quit
    Exit Sub
    End Select
  
End Sub
 
Wat je daar doet met die On Error is oneigenlijk gebruik en werk je het ook niet volledig af.
Tevens is het niet volgens mijn voorbeeld.
Het gaat in de richting van wat ook wel spaghetti code werd genoemd.
 
Laatst bewerkt:
haha, ok. Ja de spagetti snap ik helemaal. alleen als ik de "0" erin zet ipv de "-1" dan loopt hij vast op de regel onder "On Error GoTo 12" omdat ik daar geen schrijfrecht op heb.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan