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

Compileer Fout er is een dubbelzinnige naam gevonden

Status
Niet open voor verdere reacties.

wimix69

Gebruiker
Lid geworden
19 mrt 2011
Berichten
195
Hallo,

Ik krijg een Compileer Fout, er is een dubbelzinnige naam gevonden. Ik moet de sub een ander naam geven een 1 of 2 er achter zetten, maar nu werken de macro's niet wat doe ik verkeerd. Macro's staan in ThisWorkbook
 

Bijlagen

  • test foutmelding 25-3.xlsm
    842,8 KB · Weergaven: 27
Zet de gehele code in 1 Workbook_BeforeSave event
 
Dit is vast niet hoe het moet. Kan je het aanpassen in het voorbeeld zodat ik het zie.
 

Bijlagen

  • test foutmelding 25-3.2.xlsm
    842,7 KB · Weergaven: 23
Nee je moet de code ook herschrijven zodat je maar 1 event hebt.
Je hebt nu 2 "private subs" binnen 1 macro, dat gaat niet werken.
 
Ik zou er zoiets van maken in de ThisWorkbook sectie.
Makkelijk uit te breiden voor extra kleuren:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not Cancel Then If Sheets("Rood").Visible Then Cancel = CheckRood
    If Not Cancel Then If Sheets("Wit").Visible Then Cancel = CheckWit
End Sub

Function CheckRood() As Boolean
    With Sheets("Rood")
        If .Range("F210") <> "" And .Range("F213") <> "" Then
            CheckRood = LegeCel("J218", "Rood")
            CheckRood = LegeCel("O218", "Rood")
        End If
    End With
End Function

Function CheckWit() As Boolean
    With Sheets("Wit")
        If .Range("K166") <> "" And .Range("A166") <> "" Then
            CheckWit = LegeCel("AB219", "Wit")
            CheckWit = LegeCel("AB220", "Wit")
            CheckWit = LegeCel("AC221", "Wit")
        End If
    End With
End Function

Function LegeCel(cel As String, blad As String) As Boolean
    If Sheets(blad).Range(cel) = "" Then
        Sheets(blad).Activate
        MsgBox "Cel " & cel & " in " & blad & " is niet ingevuld", vbCritical, "Verplichte cel"
        LegeCel = True
    End If
End Function
 
Cel bij foutmelding een naam geven

Toch nog een vraag,

Ik krijg nu bij voorbeeld de melding, Cel J218 in Rood is niet ingevuld. Is het ook zo mogelijk dat ik J218 een naam geef?
 
In de MsgBox is het gewoon een stukje tekst, daar mag je van maken wat je wil.
 
Cel bij foutmelding een naam geven

Hoe het nu is krijg ik de zelfde tekst bij iedere cel. Ik zou graag bij iedere cel een andere tekst kunnen zetten. Dus cel J218 O218 AB219 AB220 en AC221 een naam geven. Als het document gebruikt wordt zijn de rasterlijnen en knoppen niet zichtbaar.
 
Ik heb geen idee wat je bedoelt m.b.t. de code die ik voor je maakte.
De message box laat het adres van de cel zien.
 
Adres cel veranderen in tekst

Omdat de balken boven en onder zijn uitgeschakeld in het orginele document kan ik niet meer het adres van de cel zien. Als ik dan de melding krijg Cel J218 in Rood is niet ingevuld is dit lastig opzoeken in het document.

Nu is de melding Cel J218 in rood is niet ingevuld
Dit zou ik graag willen Cel appels in rood is niet ingevuld
 
je kan in een functie checken of een bereik een naam kreeg en je functie verwerken in je bestaande macro
Code:
Sub JouwMacro()
   Set c = Range("b10")                                              'een bepaalde cel of bereik
   s = GedefinieerdeNaam(c)                                          'vraag via functie de naam van c
   MsgBox "de cel " & c.Address & " heeft " & IIf(Len(s) = 0, " geen naam", " de naam " & s)   'doe iets met het antwoord
End Sub

Function GedefinieerdeNaam(c)
   GedefinieerdeNaam = ""                                            'alvast lege string voor als het fout zou gaan
   On Error Resume Next                                              'doorgaan bij fout
   GedefinieerdeNaam = c.Name.Name                                   'de gedefinieerde naam van die cel
End Function
 
Laatst bewerkt:
Mooie oplossing cow.
Maar wellicht dat het voor TS wat simpeler kan door een aanpassing in de functie LegeCel:
Code:
Function LegeCel(cel As String, blad As String) As Boolean
    Dim CelNaam As String
    
    Select Case blad & "_" & cel
        Case "Rood_J218":    CelNaam = "Appels"
        Case "Rood_O218":    CelNaam = "Peren"
        Case "Wit_AB219":    CelNaam = "Bananen"
        Case "Wit_AB220":    CelNaam = "Druiven"
        Case "Wit_AC221":    CelNaam = "Kersen"
    End Select
    
    If Sheets(blad).Range(cel) = "" Then
        Sheets(blad).Activate
        MsgBox "Cel " & CelNaam & " in " & blad & " is niet ingevuld", vbCritical, "Verplichte cel"
        LegeCel = True
    End If
End Function

De keuze is aan TS :)
 
Laatst bewerkt:
ik vind de constructie nogal moeilijk, zou het anders/korter aanpakken, maar je bent nu al zo ver ...
 
Geweldige op lossing Edmoor. werkt perfect. cow18 ook erg bedankt voor het mee denken.
 
Het werkt geweldig maar van het ene komt het andere idee/wens. Als ik bij druiven aan geef A of B of C of D of E of F of G. Is het dan mogelijk als er D, E, F of G ingegeven dat dan ook Cellen wit S218 , S219 en S220 Ingevuld moeten worden.

Ik hoop dat je het begrijpt.
 
Ja, dat kan allemaal, maar zal je wel met een duidelijk voorbeeld moeten komen want ik heb geen idee wat je bedoelt met het aangeven van A of B of C of D of E of F of G.
 
Verplichte cellen invullen

Hallo,

Ik heb een voorbeeld gemaakt van wat ik bedoel. Als de rode gemakeerde cellen K166 en AC166 zijn ingevuld. Moeten de in groen gemarkeerde cellen AB219, AB220 en AC221 gecontroleerd worden of ze zijn in gevuld. Wordt dit dus niet gedaan komt er een melding dat dit niet is ingevuld. Nu kan is bij Cel AB220 A t/m G valideren. Nu wil ik als er D of E of F of G wordt gekozen. Ook de gemarkeerde cellen in het groen gecontroleerd worden of ze zijn ingevuld
 

Bijlagen

  • test foutmelding 25-3.4.xlsm
    846 KB · Weergaven: 10
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan