Vraag over interne subverwijzing

Status
Niet open voor verdere reacties.
Dat is al een stuk beter en kun je in dezelfde module laten staan.
De checkbox controle zou ik wijzigen van:
If frm_006.CheckBox1.Value = True Then

in:
If frm_006.CheckBox1 Then

Dan is het direct duidelijk dat het om een Boolean controle gaat.

Wil je op False controleren dan kan dat zo:
If Not frm_006.CheckBox1 Then
 
Laatst bewerkt:
Ik heb de boel omgezet. Hoop dat het klopt. Echter ik snap niet wat nu echt het daadwerkelijke verschil is en wat er nu echt beter aan is. Als ik dit overal zou doorvoeren dan verandert er niets in de uitvoer. Blijft dan toch net zo?

Code:
Sub Bestand_Afsluiten()

Routinecontrole_1:
    
    'Deze routine dient om het inloggen te controleren om te bepalen of het bestand moet worden opgeslagen
    
    Select Case frm_006.CheckBox1.Value = True
        Case 1
            ThisWorkbook.Save
            Call Routinecontrole_2
        Case 2
            Call Routinecontrole_3
    End Select

End Sub

Sub Routinecontrole_2()

    'Deze routine dient om het bestand te controleren op een nog niet verwerkte factuur
    
    Select Case ThisWorkbook.Worksheets("Factuur maken").Range("C12") > 0
    Case 1
        Frm_008.Show
        Exit Sub
    Case 2
        Call Routinecontrole_3
    End Select

End Sub

Sub Routinecontrole_3()
    
    'Deze routine dient om te controleren of alle werkbladen in het bestand beveiligd zijn
    
    Select Case frm_006.lb_Bladbescherming.Caption = "Status Bladbescherming UIT"

    Case 1
        Dim wsSheet As Worksheet
        On Error Resume Next
        For Each wsSheet In Worksheets
            wsSheet.Protect "1235"
        Next wsSheet
        On Error GoTo 0
        Call Afsluiten
    Case 2
        Call Afsluiten
    End Select

End Sub

Sub Afsluiten()

    'Deze routine zet de standaard instellingen voor excel 2007 terug en sluit het bestand volledig af
    
    With ActiveWindow
        .DisplayHeadings = True
        .DisplayWorkbookTabs = True
    End With
        
    With Application
        .DisplayStatusBar = True
        .DisplayFormulaBar = True
        .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
        .OnKey "%{F8}"
        .OnKey "%{F11}"
        .DisplayAlerts = False
    End With

    Application.Quit

End Sub
 
Dat is al een stuk beter en kun je in dezelfde module laten staan.
De checkbox controle zou ik wijzigen van:
If frm_006.CheckBox1.Value = True Then

in:
If frm_006.CheckBox1 Then

Dan is het direct duidelijk dat het om een Boolean controle gaat.

Wil je op False controleren dan kan dat zo:
If Not frm_006.CheckBox1 Then


Dit heb jij mij al eerder aangegeven en heb ik bijna overal al doorgevoerd. In deze module stond deze inderdaad nog niet aangepast. Was wel de bedoeling, maar ja dan ga je weer aanpassen en kom je met vraagtekens...... Hihi.
 
Het gaat ook niet om de uitvoer maar om de leesbaarheid.
Daarbuiten is geheugengebruik een flink issue in spaghetti code maar daar heb je nu geen omkijken naar.
 
Is het geheugengebruik dan minder in deze..... Sorry maar het kan aan mij liggen, maar wat neemt de IF ELSE dan voor geheugen in gebruik.

Sorry dat ik doorvraag hoor, maar wil met leren ook graag de ins en outs weten :rolleyes:

Ik neem aan dat de nu aangepaste code naar Select Case klopt?

Dan nog wel even refereren naar jouw post #21.

Hier geef je een duidelijke code aan waar ik al gebruik van heb gemaakt, maar hoe plaats ik dit dan met een select case?

Code:
select case frm_006.CheckBox1
case 1
()
case 2
()
end select
 
Laatst bewerkt:
Wat geheugengebruik betreft gaat het niet om de If...Then zaken maar over de Goto's.
 
Wat geheugengebruik betreft gaat het niet om de If...Then zaken maar over de Goto's.

Goto vergt dus meer haal ik hier uit en de IF ELSE is een verouderde functie, maar heeft de zelfde duidelijkheid als de select case. In deze neemt wordt If dus select case. Then wordt Case 1. Else wordt Case 2. Elseif wordt Case 3 etc.

De vergelijkingen in deze hoe gaat dat dan in zijn werk.

Ik bedoel als simpel voorbeeld

Code:
If A1 is JA then
()
ElseIf A1 is NEE then
()
ElseIf A1 is ONZEKER then
()
Else
End If
 
Laatst bewerkt:
Code:
Select Ucase(A1)
    Case "JA", "MISSCHIEN"
	Call Ja
    Case "NEE"
	Call Nee
    Case "ONZEKER"
	Call Onzeker
    Case "ZEKER"
	Call Zeker
    Case Else
        Call Anders
End Select

Met als extra de MISSCHIEN en de Ucase.
 
Laatst bewerkt:
Oke de cijfers 1,2,3, etc worden dan gewoon de vergelijkingen.

Enne Ucase en Misschien.... Waar zijn die dan voor? Wat stellen die voor?
 
De Ucase converteert kleine letters naar hoofdletters zodat Ja en ja altijd vergeleken kunnen worden met JA.
De Misschien is om aan te geven dat je in 1 Case meerdere vergelijkingen kunt hebben om een zelfde routine aan te roepen.

Laatse voorbeeldje voor nu:
Code:
If chkTired then
    Call BedTime
End If
 
Haha die is goed.

Kijk maar even wanneer en of je er antwoord op geeft.

Ik neem nogmaals aan dat de macro goed is omgezet. Eventuele wijzigingen zijn welkom.

Post #9. Zal ik apart plaatsen in een nieuw topic. Wellicht dat jij daar nog iets mee kan doen of naar kan kijken. Ik zie het in elk geval niet. De code moet kloppen, maar werkt niet.

Voor nu weltrusten.
 
Bij controle bleek dat ik een foutje had gemaakt die mij in dit topic niet helemaal duidelijk geweest. De Case 1 dient vervangen te worden door de uitvoerwaarde. Pas dan werkt die wel. Men doet, wat logisch is, niet alles voor je, maar helpen je wel op weg. Dus weer meteen in korte tijd een toch niet ingewikkelde, maar doodsimpele code geleerd. Heb de eerst geplaatste werkelijke code hier geplaatst met de IF ELSE functie en nog met jump regels erbij. Nu heb ik de code omgebouwd en heb ik er 4 losse sub's van gemaakt, omdat de GOTO functie een proleem zou kunnen geven. Vervolgens heb ik er een Select Case van gemaakt en het werkt iets anders, maar toch fijn. Weer wat geleerd mensen. Bedankt!!!!! Personen die geroepen voelen aanpassingen te maken, mogen hun vrije wil gerbuiken.

Code:
Sub Bestand_Afsluiten()

'Routinecontrole_1
    
    'Deze routine dient om het inloggen te controleren om te bepalen of het bestand moet worden opgeslagen
    
    Select Case frm_006.CheckBox1 'Boolean
    Case Is = True
        ThisWorkbook.Save
        Call Routinecontrole_2
    Case Else
        Call Routinecontrole_3
    End Select

End Sub

Sub Routinecontrole_2()

    'Deze routine dient om het bestand te controleren op een nog niet verwerkte factuur
    
    Select Case ThisWorkbook.Worksheets("Factuur maken").Range("C12")
    Case Is > 0
        Frm_008.Show
        Exit Sub
    Case Else
        Call Routinecontrole_3
    End Select

End Sub

Sub Routinecontrole_3()
    
    'Deze routine dient om te controleren of alle werkbladen in het bestand beveiligd zijn
    
    Select Case frm_006.lb_Bladbescherming.Caption

    Case Is = "Status Bladbescherming UIT"
        
        Dim wsSheet As Worksheet
        On Error Resume Next
        For Each wsSheet In Worksheets
            wsSheet.Protect "1235"
        Next wsSheet
            On Error GoTo 0
            Call Afsluiten
    Case Else
        Call Afsluiten
    End Select

End Sub

Sub Afsluiten()

    'Deze routine zet de standaard instellingen voor excel 2007 terug en sluit het bestand volledig af
    
    With ActiveWindow
        .DisplayHeadings = True
        .DisplayWorkbookTabs = True
    End With
        
    With Application
        .DisplayStatusBar = True
        .DisplayFormulaBar = True
        .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
        .OnKey "%{F8}"
        .OnKey "%{F11}"
        .DisplayAlerts = False
    End With

    Application.Quit

End Sub
 
Laatst bewerkt:
@masala

Dit is een helpmij forum geen 'gratis cursus VBA' forum....

Doe je er niet verstandiger aan eerst eens je de grondbeginselen in een Cursus VBA eigen te maken; eventueel met een van voor naar achter doorgeploegd VBA boek voor beginners ?
 
Snb. Alle respect, maar waar denk jij dat ik mee bezig ben. Het boek is overigens al in mijn bezit.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan