• 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.

Automatiseringsfout 800401a8

Status
Niet open voor verdere reacties.

spaarie

Terugkerende gebruiker
Lid geworden
11 jul 2011
Berichten
1.784
Tijdens het uitvoeren van onderstaande code krijg ik een automatiseringsfout;
Vanaf het rode gedeelte zegt de foutopsporing dat deze niet verder kan opsporen.
Code:
Private Sub CheckBox1_Change()
    If mbNoEvent Then Exit Sub
    
    nr = Range("M8").Value
    naam = Range("U8").Value
    
    If nr = "" Or naam = "" Then
        If CheckBox1.Value Then
            If MsgBox("Wilt u voor " & naam & " een aparte verlofkaart maken?", vbYesNo, "Aparte kaart") = vbYes Then
                Sheets("BASIS").Copy , Sheets(Sheets.Count)
                With ActiveSheet
                    .Range("M8").Value = Format(nr, "'000")
                    .Name = UCase(nr & ". " & naam)
                    .Shapes.Range(Array("Rectangle 3", "Rectangle 4")).Delete
                End With
            End If
        Else
            Application.DisplayAlerts = False
[COLOR="#FF0000"]            If MsgBox("Wilt u de verlofkaart van " & naam & " verwijderen?", vbYesNo, "Verwijderen") = vbYes Then Sheets(UCase(nr & ". " & naam)).Delete
            Application.DisplayAlerts = True
        End If
    Else: MsgBox "Geen nummer of naam bekend, handeling geannuleerd.", vbExclamation + vbOKOnly, "Fout"
    End If
    mbNoEvent = True
    CheckBox1.Value = Not CheckBox1.Value
    mbNoEvent = False
End Sub[/COLOR]

Het gekke is dat de code wel doet wat er gevraagd wordt... alleen komt die vervelende pop-up constant.
Wie weet waar het in kan zitten?
 
Heb je mbNoEvent wel op module-niveau gedeclareerd?

Code:
Private mbNoEvent as Boolean

Private Sub CheckBox1_Change()
    ...etc.
 
Ik vermoed die Else: in je code (aan het einde van je code). Kijk of het volgende wel doet wat je verwacht én zonder foutmelding:

Code:
Private Sub CheckBox1_Change()
    If mbNoEvent Then Exit Sub
    
    nr = Range("M8").Value
    naam = Range("U8").Value
    
    If nr = "" Or naam = "" Then
        If CheckBox1.Value Then
            If MsgBox("Wilt u voor " & naam & " een aparte verlofkaart maken?", vbYesNo, "Aparte kaart") = vbYes Then
                Sheets("BASIS").Copy , Sheets(Sheets.Count)
                With ActiveSheet
                    .Range("M8").Value = Format(nr, "'000")
                    .Name = UCase(nr & ". " & naam)
                    .Shapes.Range(Array("Rectangle 3", "Rectangle 4")).Delete
                End With
            End If
        Else
            Application.DisplayAlerts = False
            If MsgBox("Wilt u de verlofkaart van " & naam & " verwijderen?", vbYesNo, "Verwijderen") = vbYes Then Sheets(UCase(nr & ". " & naam)).Delete
            Application.DisplayAlerts = True
        End If
    Else
        MsgBox "Geen nummer of naam bekend, handeling geannuleerd.", vbExclamation + vbOKOnly, "Fout"
    End If
    mbNoEvent = True
    CheckBox1.Value = Not CheckBox1.Value
    mbNoEvent = False
End Sub
 
dnties, wist niet dat je ook nog iets van vba weet, maar goed... de opbouw is het niet. Dit is correct geschreven en niet de reden voor de automatiseringsfout.
Wel bedankt voor het meedenken in ieder geval ;)
 
Kun je de fout reproduceren in een voorbeeldbestand?
 
Even snel het verschil aangegeven:
Jij had
Else: MsgBox "Geen nummer of naam bekend, handeling geannuleerd.", vbExclamation + vbOKOnly, "Fout"

Ik heb er van gemaakt:
Else
MsgBox "Geen nummer of naam bekend, handeling geannuleerd.", vbExclamation + vbOKOnly, "Fout"

Zie dat er een dubbele punt-teken ( : ) staat achter Else in jouw code
Vlgs. de If-then-else syntax is het toch echt Else en niet Else:

Tijs.
 
Laatst bewerkt:
@Tijs, ik zie en begrijp het verschil. Maar de 'dubbele punt' oftewel 'colon' betekent hier 'einde regel'. Dus ik hoef geen enter te geven...

@Timshel: Vb bestand aangemaakt. Let wel, ik heb de code iets moeten in korten i.v.m. variabelen die niet meer bestaan plus dat je maar 1x op de het vinkje kan klikken ook i.v.m. variabelen.
Het aanmaken van een 'apart' blad gaat goed, maar nu terug....
 

Bijlagen

@spaarie: Persoonlijk zou ik dat nooit doen, want ik vind, net als anderen: "The main effect of the colon is to make the code harder to understand and the flow of the code harder to follow. "

Bedankt voor de toelichting. :)

Tijs.
 
Ik begrijp wel waarom de fout zich voordoet.
De event-routine verwijdert het werkblad en daarmee zichzelf.
Daarmee heb je nog niet gelijk een oplossing maar misschien kun je er toch mee verder.
 
Laatst bewerkt:
@tijs: graag gedaan ;)

@timshel: dat is equivalent aan iets met een dooie mus :), maar daar had ik nog geen eens over nagedacht.
Bedankt in ieder geval. Ik ga op zoek naar een oplossing hiervoor en wellicht heb je ook nog een idee?
 
Je zal het werkbladbeheer in ieder geval moeten regelen met een gewone module in plaats van een werkbladmodule.
Dat betekent ook dat je geen active-x-control kunt gebruiken. Probeer het met een werkblad-control.
 
Laatst bewerkt:
Een methode: Roep, wanneer je de sheet wilt verwijderen, een macro in een module middels application.ontime aan (waarbij deze macro de displayalerts op false zet, sheet verwijdert en alerts weer op true zet)
 
Hmm, bedank voor input. Ik ga er eens mee stoeien.
Nogmaals bedankt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan