Hulp gevraagd

Status
Niet open voor verdere reacties.

Theknurt

Gebruiker
Lid geworden
11 nov 2006
Berichten
130
Hallo mede VBA specialisten,

Kunnen jullie mij helpen met een VBA code te geven/ontwikkelen ?

Het volgende. Er bestaat een excel bestand die geopend kan worden met een password (in mijn bezit). Anderen die het bestand willen openen hebben dit password niet, dus openen het bestand als alleen lezen.

Er zit een makro ingebouwd, die alleen mag werken als het bestand is geopend met het getypte password.

Openen andere gebruikers het bestand,dus als alleen lezen, mag de makro niet gaan lopen/draaien.......

Code:
Sub tijdelijk_oud()
 On Error GoTo tagError

   If Not ActiveWorkbook.ReadOnly Then
        ActiveWorkbook.Save
        ChDir _
            "H:\Techniek\"
        Windows("VTA_Lijst.xls").Activate
        Kill "H:\Techniek\VTA_Lijst.xls"
        
        ActiveWorkbook.SaveAs Filename:= _
            "H:\Techniek\VTA_Lijst.xls" _
         , FileFormat:=xlNormal, Password:="", WriteResPassword:="did", _
            ReadOnlyRecommended:=False, CreateBackup:=False
    Else
    
      ActiveWorkbook.Close False
      
    End If
    
tagExit:
  Exit Sub
   
tagError:
  MsgBox Err.Description, vbInformation + vbOKOnly
  Resume tagExit
End Sub

Ik heb het al geprobeerd met If Not ActiveWorkbook.ReadOnly Then, echter dat fun ctioneerd niet echt.

Thanks for the help, anyway....

Greet Bart
 
Waarom werk je met het ReadOnly attribuut en niet met het beveiligen van het werkboek (Protect optie)?

Via de Protect methode zou je het dan namelijk als volgt kunnen doen:
- Zorg dat het hele werkboek Protected is als iemand het werkboek opent (is gelijk aan ReadOnly; niemand kan iets veranderen)

- Bij starten Excel werkboek: vraag om wachtwoord
- Indien juist wachtwoord: haal beveiliging van het werkboek, anders niet
- Bij Sluiten document: beveilig het werkboek

Volgens mij is dit makkelijker en veiliger.
 
Waarom werk je met het ReadOnly attribuut en niet met het beveiligen van het werkboek (Protect optie)?

Via de Protect methode zou je het dan namelijk als volgt kunnen doen:
- Zorg dat het hele werkboek Protected is als iemand het werkboek opent (is gelijk aan ReadOnly; niemand kan iets veranderen)

- Bij starten Excel werkboek: vraag om wachtwoord
- Indien juist wachtwoord: haal beveiliging van het werkboek, anders niet
- Bij Sluiten document: beveilig het werkboek

Volgens mij is dit makkelijker en veiliger.

Hoi Etri,

Bedankt voor je reactie hierover. De enige protect beveiliging die ik kan vinden met GOOGLE is :

Code:
Option Explicit

Private Function SheetProtected(TargetSheet As Worksheet) As Boolean
     'Function purpose:  To evaluate if a worksheet is protected
     
    If TargetSheet.ProtectContents = True Then
        SheetProtected = True
    Else
        SheetProtected = False
    End If
     
End Function
Sub SimpleTest()
     'Macro purpose:  To demonstrate use of SheetProtected Function
     '*** THIS MACRO FOR ILLUSTRATIVE PURPOSES ONLY     ***
     '*** AND IS NOT REQUIRED TO USE THE ABOVE FUNTION! ***
     
     'Assign active worksheet to variable to be tested
    Dim ws As Worksheet
    Set ws = ActiveSheet
     
     'Test the activesheet's protection
    If SheetProtected(ws) Then
         'If protected
        MsgBox "Sorry, but " & ws.Name & " is protected!", _
        vbOKOnly + vbInformation, ws.Name & " is protected!"
    Else
         'If not protected
        MsgBox "Hooray!  " & ws.Name & " is not protected!", _
        vbOKOnly + vbInformation, ws.Name & " is unprotected!"
    End If
End Sub

Heb het e.e.a zitten verbouwen van WorkSheet naar WorkBook, echter dat liep stuk....
Wat zou in mijn geval de juiste commando's zijn, zodat ik kan checken of het complete workbook beveiligd is ??

Burt
 
Je moet alle worksheets 1-voor-1 beveiligen. Dat kan als volgt:
Code:
Dim wSheet As Worksheet

    For Each wSheet In Worksheets
        wSheet.Protect Password:="mijngeheimewachtwoord"
    Next wSheet

Je kunt op deze manier ook checken of alle worksheets beveiligd zijn (indien dat moet). Eén sheet lijkt me echter voldoende...
 
Laatst bewerkt:
Hoi Etri,

Wederom bedankt voor je snelle reactie en ik ben nu weer iets verder en heb het al volgt gedaan.:

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wsheet As Worksheet

    For Each wsheet In Worksheets
        wsheet.Protect Password:="mijnpassword"
    Next wsheet

End Sub
Private Sub Workbook_Open()
Dim wchtwrd As String
Dim wsheet As Worksheet

wchtwrd = InputBox("Wat is het wachtwoord ?")

If wchtwrd = "mijnpassword" Then
    For Each wsheet In Worksheets
        wsheet.Unprotect Password:="mijnpassword"
    Next wsheet

Windows("VTA_Lijst.xls").Activate
Sheets("ABCDEF").Select

Else

End If

End Sub

Waar ik alleen bang voor ben, is dat het passwoord zo kraakt/te zien krijgt, met mensen die vooral verstand hebben van VBA....

Is dat ook nog op een één of andere manier te verbergen of beveiligen ??

Voor de rest is het een prima oplossing......

Bart
 
Je kunt de VBA code zelf beveiligen via Tools > VBAProject properties... en dan tabblad Protection (dit alles in de VBA omgeving)

Er zijn echter programma's die deze beveiliging kunnen breken. Vaak moet je hiervoor betalen tenzij het het wachtwoord minder dan bijv. 4 letters/cijfers bevat. :confused:
De programma's halen het wachtwoord weg; sommige laten daarbij zelfs het wachtwoord zien!

Maak het kraken zo moeilijk mogen door een lang wachtwoord en met bijzondere letters en cijfers (hoofdletters), bijvoorbeeld: #tR2_02)3T6t2. En gebruik nooit een wachtwoord dat je ook voor je zelf gebruikt (je Windows wachtwoord bijvoorbeeld).

Ook zou je om het kraken lastiger te kunnen maken, de controle als volgt kunnen maken:
Code:
If sWachtwoord = Chr$(13) & Chr$(233) & ...

Waarbij de Chr$(...)'s overeenkomen met de individuele letters. Nu is je wachtwoord niet zomaar te lezen in je programma...
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan