password:=

Status
Niet open voor verdere reacties.
Een workbook is een collection of objecten van het type worksheet.
Scrollen door een collection doe je met "For Each" niet met een (i) counter.

Stel je hebt een worksheet "Inkomsten" die nu nummer 1 heeft. Zal dat altijd zo zijn, zelfs wanneer je worksheets toevoegt, wist, verplaatst???
Daar staat geen garantie op :confused:

Met "For Each" hoef je daar niet wakker van te liggen :d

Wat je zegt is niet juist.

Worksheets(1) is het blad met index 1 van alle beschikbare sheets, en deze reikt tot sheets([Worksheets.count]). Daar staat wel degelijk garantie op.


Als je met een For..Each loop door alle worksheet objecten heengaat kun je ook fouten generen, Dat geldt niet alleen met for ... to loops zoals je implicieert. Wat is bijvoorbeeld het resultaat van de volgende code?

Code:
    For Each sht In ActiveWorkbook.Sheets
        Sheets.Add after:=sht
    Next

de collectie Activeworkbook.sheets wordt op het moment van het starten van de Lus for..each bepaald, en hier zal dus het aantal sheets in de werkmap worden verdubbeld, en geen eindeloze lus ontstaan.

Er is dus niets mis met de methode die Excel Amateur gebruikt,.. Sterker nog.
Soms kun je beter for .. to gebruiken . bijvoorbeeld

Deze code werkt wel:
Code:
Sub TestForTO()

    For i = Worksheets.Count To 1 Step -1
        If Sheets.Count = 1 Then Exit For
        Sheets(i).Delete
        MsgBox "blad " & i & "is verwijderd"
    Next
    MsgBox "Klaar!"
   
End Sub

Deze code werkt niet:
Code:
Sub TestForEach()
Dim ws As Worksheet
    Application.DisplayAlerts = False
    
    For Each ws In ActiveWorkbook.Sheets
        If ws.Index <> 1 Then
            ws.Delete
            MsgBox "Blad " & ws.Index & " is verwijderd.."
        End If
    Next
    Application.DisplayAlerts = True
    MsgBox "Dit ga je niet zien met meer dan 2 sheets"
    
End Sub
 
Laatst bewerkt:
Pasan,

En hier nog een benadering om een sheet te beveiligen met eenvoudige wachtwoorden en een "algemeen" wachtwoord.

wat je hier nog extra aan moet doen is het vba project beveiligen, anders kun je de wachtwoorden afkijken als gebruiker.

Ik hoop dat je er wat aan hebt. je moet zelf maar kijken hoe je e.e.a. kan implementeren.

edit:
de namen van de werkbladen staan in de gele kolom respectievelijk: "aap, noot, mies"

je kunt de werkbladen ontgrendelen mbv de knop indrukken en het wachtwoord intoetsen: (dat is hier de naam van het werkblad)
je kunt alle werkbladen ontgrendelen door het wachtwoord "alles" te gebruiken

Bekijk bijlage passwordtest.xls
 
Laatst bewerkt:
Hallo Mark,

Het eindresultaat van je twee stukjes code "Sub TestForTO()" en "Sub TestForEach()
" is uiteindelijk wel hetzelfde, alle sheets, op één na, zijn gewist.

Waar komt de fout vandaan in de "Sub TestForEach()" code??
Niet van de For Each methode, wel van het feit dat je iets wil tonen die niet meer bestaat :evil: :evil:

Sorry maar ik blijf erbij, de "Best Pratice" methode om door een collection te scrollen is de For Each methode.


@Pasan
Code:
For Each objMySheet In objWorkbook.Worksheets
      objMySheet.Range("A1").Value
Next objMySheet

Het object "objMySheet" is een verwijzing naar een werkblad, je kan dus alle eigenschappen, methoden van dat werkblad aanspreken met een "."
 
Sorry maar ik blijf erbij, de "Best Pratice" methode om door een collection te scrollen is de For Each methode.

Dat ben ik met je eens, maar die "garantie" is precies hetzelfde bij het starten van beide typen loops. Je argumentatie in je vorige post is niet goed.
 
Laatst bewerkt:
ik zet de vraag weer op opgelost deze discussie gaat mijn pet te boven
ik heb uiteindelijk de code van ExcelAmateur gebruikt
iedreen bedankt voor het meedenken

groet

Pasan
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan