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

draaitabellen verversen in de hele werkmap terwijl de werkbladen beveiligd zijn

Status
Niet open voor verdere reacties.

JeroenExcel

Gebruiker
Lid geworden
19 nov 2015
Berichten
42
Ik wil alle draaitabellen in een werkmap kunnen verversen met 1 macro.

Het probleem is dat de verschillende werkbladen zijn beveiligd (zonder ww) tegen bewerking.

Het verversen lukt hierdoor niet.

Ik wil dus in de code die alle draaitabellen ververst ook een stukje code hebben dat de beveiligingen in alle verschillende werkbladen verwijderd, dan de draaitabellen ververst en dan de beveiliging op alle bladen terugzet.

Kan iemand mij hiermee helpen?
 
Probeer dit eens:
Code:
Sub Ververs()
    Dim sht() As String

    For Each sh In ThisWorkbook.Sheets
        If sh.ProtectContents Then
            i = i + 1
            ReDim Preserve sht(i)
            sht(i) = sh.Name
            sh.Unprotect
        End If
    Next sh
    
    ThisWorkbook.RefreshAll
    
    For i = 1 To UBound(sht)
        Sheets(sht(i)).Protect
    Next i
End Sub
 
ik krijg dan een foutmelding

Hallo, allereerst bedankt edmoor voor je input. Het goede nieuws is dat inderdaad alle draaitabellen ververst lijken te zijn. Ik krijg echter een foutmelding. Foutopsporing geeft aan dat er een fout zit in onderstaande regel: For i = 1 To UBound(sht)
Ik heb de hele code die ik nu gebruik hieronder ingevoegd. Ik begrijp de code eigenlijk niet en ik snap daarom ook niet welk 'probleem' er in de code zit.

Private Sub Workbook_Open()
Dim answer As Integer
Result = MsgBox("Wil je je gegevens verversen?" & vbNewLine & "Dit duurt wel even.", vbYesNo + vbQuestion + vbDefaultButton2)
If Result = vbYes Then
Dim sht() As String
For Each sh In ThisWorkbook.Sheets
If sh.ProtectContents Then
i = i + 1
ReDim Preserve sht(i)
sht(i) = sh.Name
sh.Unprotect
End If
Next sh
ThisWorkbook.RefreshAll
For i = 1 To UBound(sht)
Sheets(sht(i)).Protect
Next i
End If
Sheets("Dashboard").Activate
End Sub
 
Plaats svp code tussen code tags. Als je geen beveiligde bladen hebt dan wordt de variabele sht niet gevuld en heeft dus geen Ubound. Dit zal je moeten dus moeten ondervangen.
 
Bedankt voor de aanvulling. Ik heb jouw suggestie ingevuld door alle tabbladen te beveiligen. En daarmee lijkt alles vlekkeloos te werken.
 
Dan kan je net zo goed geen array gebruiken.

Code:
Private Sub Workbook_Open()
  If MsgBox("Wil je je gegevens verversen?" & vbNewLine & "Dit duurt wel even.", vbYesNo + vbQuestion + vbDefaultButton2) = vbYes Then
    For Each sh In Sheets
      sh.Unprotect
    Next sh
    ThisWorkbook.RefreshAll
    For Each sh In Sheets
      sh.Protect
    Next sh
  Sheets("Dashboard").Activate
End Sub
 
Of zo:
Code:
Sub Ververs()
    Dim i As Integer
    Dim sht() As String
    
    i = -1
    On Error Resume Next
    For Each sh In ThisWorkbook.Sheets
        If sh.ProtectContents Then
            i = i + 1
            ReDim Preserve sht(i)
            sht(i) = sh.Name
            sh.Unprotect
        End If
    Next sh
    On Error GoTo 0
    
    ThisWorkbook.RefreshAll
    If i > -1 Then
        For i = 1 To UBound(sht)
            Sheets(sht(i)).Protect
        Next i
    End If
End Sub
 
Laatst bewerkt:
Nee.
De = 0 moet = -1 zijn ;)
Aangepast.
 
Laatst bewerkt:
Nee.
Als die gebruikt gaat worden begint deze zo bij 0 en dat is voor een array correct.

Maar ik moet je wel gelijk geven omdat het verhogen van i op de verkeerde plek stond.
Thanks :)
 
Laatst bewerkt:
Toch zegt mijn gevoel dat het niet klopt
Code:
i = -1
    On Error Resume Next
    For Each sh In ThisWorkbook.Sheets
        If sh.ProtectContents Then
            ReDim Preserve sht(i)' i is nog steeds -1
            sht(i) = sh.Name
            i = i + 1
            sh.Unprotect
        End If
 
Dat zeg ik, je had gewoon gelijk :)
 
Nabrander

Ik loop toch tegen een beperking aan. Nadat de macro is uitgevoerd wordt zoal beoogd de werkbladbeveiliging weer geactiveerd.

Er is echter een "maar". Ik wil de beveiliging wel actief, maar de beveiligingsopties:
- Draaitabel en -grafiek gebruiken
- Objecten bewerken
zouden eigenlijk geactiveerd moeten worden.

De beveiliging die de macro instelt is dus eigenlijk te restrictief. Het lijkt nu alles of niets te zijn.
 
aanvulling

ik kwam deze code nog tegen op internet:

DrawingObjects:=True, Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True, AllowFormattingCells:=False, AllowFormattingColumns:=False, _
AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, _
AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False

Ik denk dat ik hiermee kan instellen welke optie wel of niet te activeren. Maar waar plak ik dit in de code? Ik heb de code gebruikt die edmoor heeft aangeleverd 20-09 13:41.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan