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

Wat aan macro aanpassen (wijzigingen van tabbladen bij houden)

Status
Niet open voor verdere reacties.

davylenders123

Gebruiker
Lid geworden
20 jun 2010
Berichten
902
Ik heb de volgende macro al bij elkaar gesprokkeld.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

    On Error GoTo Einde
    Application.EnableEvents = False
    With Sheets("Logboek").Cells(Sheets("Logboek").Rows.Count, 1).End(xlUp)
        .Offset(1).Value = Target.Address(False, False)
        .Offset(1, 1).Value = IIf(Target.Cells(1, 1).Value = "", "-DELETE-", Target.Cells(1, 1).Value)
        .Offset(1, 2).Value = Now
        .Offset(1, 3).Value = Environ("username")
    End With
    
Einde:
    Application.EnableEvents = True

End Sub

Deze houdt de wijzigingen bij van het tab blad waar deze macro instaat.
Wijzigingen worden in een apart tabblad bij gehouden (tab blad logboek)
En heeft de volgende opmaak

Cel / Bereik Waarde Time stamp Gebruiker
G16:J26 -deleted- 4/03/2010 17:57 ikke
D15 14 3/09/2011 23:30 davy

Wat moet ik aan de macro aanpassen dat hij ook de aanpassingen van de andere tab bladen bijhoud in het tabblad logboek.
Liefst gegroeperd per tabblad.µ
En waar moet ik de macro dan plaatsen.

En is het mogelijk om ook weer te geven wat eerst in de cel stond en naar wat het is veranderd ?
Nu wordt er bij waarde weergegeven wat er in de cel staat maar zou ook graag zien wat er in de cel heeft gestaan op de zelfde lijn.

Vb bestandje

Bekijk bijlage 136465
 
Laatst bewerkt:
Een aanpassing van een bestand dat ik hier een tijdje eerder heb geplaatst.
Toen werd alleen bijgehouden wie en wanneer het bestand heeft geopend.
Nu wordt ook bijgehouden welke wijzigingen men uitgevoerd heeft.
Alleen waardes en formules worden bijgehouden. Dus geen opmaak.

De wijzigingen worden bewaard op het werkblad Logfile.
Dit werkblad is niet te vinden via Werkblad zichtbaar maken maar uitsluitend via VBA (en de macro Zichtbaar).

Met vriendelijke groet,


Roncancio
 

Bijlagen

  • Logfile 2.0.xls
    54,5 KB · Weergaven: 85
Roncancio

Alvast bedankt voor de snelle reactie. :thumb:

Ik heb u bestandje wat aan het proberen geweest maar is nog niet helemaal wat het zou moeten zijn.

Want als je ee wijziging maakt op een bepaald blad dan komt de info in logfile op de verkeerde lijn te staan en komt bij gebruiker geen gebruikers naam te staan.

En in cel 1 c staat een datum en uur in plaats van wat er in die kolom gaat komen.

Op de vba heb je ook een paswoord staan dus kan de code ook niet zien.
 
Sorry

Heb niet helemaal goed geprobeerd blijkbaar.
De gebruiker komt er te staan als je het bestand gesloten hebt en terug open doet.

Maar de gebruiker komt pas op de volgende lijn en op die lijn zet hij bij "geopend op" de datum en tijd van wanneer je het bestandje hebt gesloten.
 
Laatst bewerkt:
Volgens mij klopt het zo beter.

Met vriendelijke groet,


Roncancio
 

Bijlagen

  • Logfile 2.0.xls
    55 KB · Weergaven: 90
Roncancio

Dit is inderdaad wat ik zocht :thumb: maar er staat nog steeds een paswoord op vba:(.
Zo krijg ik de code niet in mijn bestandjes.
Kan je het nog eens posten met het paswoord eraf zo kan ik u code verwerken in mijn verschillende bestanden waar het in zou moeten komen.
Of het paswoord even posten hier.

Alvast bedankt voor je hulp :thumb:
 
Laatst bewerkt:
Het password is helpmij
Voor zowel het werkblad als VBA-code.

Met vriendelijke groet,


Roncancio
 
Roncancio

Toch nog 2 vraagjes.
Nu slaat het bestand constant de wijzigingen op dit zou eigenlijk niet mogen.
Bij het sluiten zou hij moeten vragen deze wijzigingen opslaan ja of nee.
Zijn er geen wijzigingen gebeurt zou hij ook niet mogen vragen of hij het moet opslaan bij het sluiten.

De lijnen in het rood in de code heb ik eens verwijderd maar nu vraagt hij altijd of hij het bestand moet opslaan ook al heb je niks gewijzigd.

En kan je in de logfile automatische bv de gegevens ouder dan 30 dagen laten verwijderen.
Er zijn bestanden bij die een jaar elke dag worden gewijzig door verschillende personen en redelijk veel cellen en zo gaat de logfile veel te lang worden.

Welke wijzigngen moeten er gebeuren voor deze 2 zaken?

Code:
Dim lRij As Long
Dim sWsh As String
Dim sBer As String
Dim sNWrd As String
Dim sOWrd As String
Dim bNWrd As Boolean

'Zet deze code bij ThisWorkbook. LET OP:
'Je moet een verwijzing maken naar Microsoft Scripting Runtime.
'
'Dit doe je als volgt:
'- Ga naar EXTRA - MACRO - VISUAL BASIC EDITOR. (óf ALT-F11)
'- Ga naar EXTRA - VERWIJZINGEN
'- Vink Microsoft Scripting Runtime aan.
'- Klik op OK.
'Zonder bovenstaande handelingen zal de 2e regel van de code niet werken.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
lRij = Worksheets("Logfile").Range("B" & Rows.Count).End(xlUp).Row
If lRij = 1 Then lRij = 2
If Worksheets(Worksheets.Count).Name = "Logfile" Then
    Worksheets("Logfile").Range("C" & lRij).Value = Now()
End If
[COLOR="red"]ActiveWorkbook.Save[/COLOR]End Sub

Private Sub Workbook_Open()
'invullen
On Error Resume Next
If Worksheets(Worksheets.Count).Name <> "Logfile" Then
    Worksheets.Add after:=Worksheets(Worksheets.Count)
    Worksheets(Worksheets.Count).Name = "Logfile"
    With Worksheets("Logfile")
        .Range("A1").Value = "Gebruiker"
        .Range("B1").Value = "Geopend op"
        .Range("C1").Value = "Gesloten op"
        .Columns("A").ColumnWidth = 20
        .Columns("B:C").ColumnWidth = 18
        .Range("B:C").NumberFormat = "d/m/yyyy h:mm:ss"
    End With
End If
Worksheets("Logfile").Protect Password:="helpmij", UserInterfaceOnly:=True
lRij = Worksheets("logfile").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Logfile").Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
Worksheets("Logfile").Range("B" & lRij).Value = Now
Worksheets("Logfile").Visible = xlVeryHidden
[COLOR="red"]ActiveWorkbook.Save[/COLOR]
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If ActiveSheet.Name <> "Logfile" And bNWrd = False And Target.Count = 1 Then
    If Target.HasFormula Then
        sNWrd = Target.Formula
    Else
        bNWrd = True
        sNWrd = Target.Value
        If sNWrd = ActiveSheet.Name Then sNWrd = ""
    End If
    invullen
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name <> "Logfile" And Target.Count = 1 Then
    sWsh = ActiveSheet.Name
    sBer = ActiveCell.Address
    If ActiveCell.HasFormula Then
        sOWrd = ActiveCell.Formula
    Else
        sOWrd = ActiveCell.Value
        sNWrd = ""
    End If
End If
End Sub
Sub invullen()

Worksheets("Logfile").Protect Password:="helpmij", UserInterfaceOnly:=True
lRij = Worksheets("logfile").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Logfile").Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
Worksheets("Logfile").Range("B" & lRij).Value = Now
Worksheets("Logfile").Range("D" & lRij).Value = sWsh
Worksheets("Logfile").Range("E" & lRij).Value = sBer
Worksheets("Logfile").Range("F" & lRij).Value = sOWrd
Worksheets("Logfile").Range("G" & lRij).Value = sNWrd
bNWrd = False
[COLOR="red"]ActiveWorkbook.Save[/COLOR]End Sub
 
Wat betreft je 1e vraag:
Hoe kan Excel/VBA weten welke wijziging wél en welke wijziging niet moet worden geregistreerd?

Code:
ActiveWorkbook.SaveEnd Sub
Dit moet op aparte regels:
Code:
ActiveWorkbook.Save
End Sub

Met vriendelijke groet,


Roncancio
 
Roncancio

Bedankt voor je reactie:thumb:

In het bestand dat jij hebt gepost worden de wijzigen onmiddelijk opgeslagen na elke wijzeging , en wordt er bij het sluiten niet gevraagd of de wijzigingen moet worden opgeslagen of niet.

Ik heb uit u code daarom de 3 "ActiveWorkbook.Save" verwijderd.

Nu slaat hij niet elke wijziging onmiddelijk op en vraag hij bij het sluiten of je de wijzigingen wil opslaan.
Zo zou het moeten zijn.
Maar nu vraagt hij dat elke keer , ook als je het bestand enkel maar hebt bekenen en niks hebt gewijzigd.
En dit zou niet mogen.

Als je een wijziging hebt gedaan moet hij vragen bij sluiten of de wijzigingen moeten worden opgeslagen. (ja,nee of annuleren pop up)

Als je enkel het bestand maar hebt bekeken en niks hebt gewijzig mag hij niks vragen bij het sluiten.

Hieronder de code zoals ik ze nu heb staan en hij niet onmiddelijk de wijzigingen opslaat.
Maar wel altijd vraagt of hij de wijzigingen moet opslaan ook al zijn er geen wijzigen gebeurt.

Code:
Dim lRij As Long
Dim sWsh As String
Dim sBer As String
Dim sNWrd As String
Dim sOWrd As String
Dim bNWrd As Boolean

'Zet deze code bij ThisWorkbook. LET OP:
'Je moet een verwijzing maken naar Microsoft Scripting Runtime.
'
'Dit doe je als volgt:
'- Ga naar EXTRA - MACRO - VISUAL BASIC EDITOR. (óf ALT-F11)
'- Ga naar EXTRA - VERWIJZINGEN
'- Vink Microsoft Scripting Runtime aan.
'- Klik op OK.
'Zonder bovenstaande handelingen zal de 2e regel van de code niet werken.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
lRij = Worksheets("Logfile").Range("B" & Rows.Count).End(xlUp).Row
If lRij = 1 Then lRij = 2
If Worksheets(Worksheets.Count).Name = "Logfile" Then
    Worksheets("Logfile").Range("C" & lRij).Value = Now()
End If
End Sub

Private Sub Workbook_Open()
'invullen
On Error Resume Next
If Worksheets(Worksheets.Count).Name <> "Logfile" Then
    Worksheets.Add after:=Worksheets(Worksheets.Count)
    Worksheets(Worksheets.Count).Name = "Logfile"
    With Worksheets("Logfile")
        .Range("A1").Value = "Gebruiker"
        .Range("B1").Value = "Gewijzigd op"
        .Range("C1").Value = "Gesloten op"
        .Columns("A").ColumnWidth = 20
        .Columns("B:C").ColumnWidth = 18
        .Range("B:C").NumberFormat = "d/m/yyyy h:mm:ss"
    End With
End If
Worksheets("Logfile").Protect Password:="1230", UserInterfaceOnly:=True
lRij = Worksheets("logfile").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Logfile").Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
Worksheets("Logfile").Range("B" & lRij).Value = Now
Worksheets("Logfile").Visible = xlVeryHidden


End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If ActiveSheet.Name <> "Logfile" And bNWrd = False And Target.Count = 1 Then
    If Target.HasFormula Then
        sNWrd = Target.Formula
    Else
        bNWrd = True
        sNWrd = Target.Value
        If sNWrd = ActiveSheet.Name Then sNWrd = ""
    End If
    invullen
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name <> "Logfile" And Target.Count = 1 Then
    sWsh = ActiveSheet.Name
    sBer = ActiveCell.Address
    If ActiveCell.HasFormula Then
        sOWrd = ActiveCell.Formula
    Else
        sOWrd = ActiveCell.Value
        sNWrd = ""
    End If
End If
End Sub
Sub invullen()

Worksheets("Logfile").Protect Password:="1230", UserInterfaceOnly:=True
lRij = Worksheets("logfile").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Logfile").Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
Worksheets("Logfile").Range("B" & lRij).Value = Now
Worksheets("Logfile").Range("D" & lRij).Value = sWsh
Worksheets("Logfile").Range("E" & lRij).Value = sBer
Worksheets("Logfile").Range("F" & lRij).Value = sOWrd
Worksheets("Logfile").Range("G" & lRij).Value = sNWrd
bNWrd = False
End Sub
 
Bij het doorlopen van het bestand zonder dingen te wijzigen wordt er niet meer gevraagd of het bestand moet worden opgeslagen.
Dit wordt alleen gevraagd als er daadwerkelijk iets gewijzigd wordt in 1 van de werkbladen (muv het werkblad Logfile).
De code voor ThisWorkbook luidt nu als volgt:


Code:
Dim lRij As Long
Dim sWsh As String
Dim sBer As String
Dim sNWrd As String
Dim sOWrd As String
Dim bNWrd As Boolean
Dim bChange As Boolean
'Zet deze code bij ThisWorkbook. LET OP:
'Je moet een verwijzing maken naar Microsoft Scripting Runtime.
'
'Dit doe je als volgt:
'- Ga naar EXTRA - MACRO - VISUAL BASIC EDITOR. (óf ALT-F11)
'- Ga naar EXTRA - VERWIJZINGEN
'- Vink Microsoft Scripting Runtime aan.
'- Klik op OK.
'Zonder bovenstaande handelingen zal de 2e regel van de code niet werken.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lDate As Long
lRij = Worksheets("Logfile").Range("B" & Rows.Count).End(xlUp).Row
If lRij = 1 Then lRij = 2
If Worksheets(Worksheets.Count).Name = "Logfile" Then
    Worksheets("Logfile").Range("C" & lRij).Value = Now()
End If
lDate = Date - 30
If bChange = False Then
    ActiveWorkbook.Close SaveChanges:=False
End If
End Sub

Private Sub Workbook_Open()


    On Error Resume Next
    If Worksheets(Worksheets.Count).Name <> "Logfile" Then
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Worksheets(Worksheets.Count).Name = "Logfile"
        Worksheets("Logfile").Range("B:C").NumberFormat = "d/m/yyyy h:mm:ss"
    End If
    With Worksheets("Logfile")
        .Protect Password:="helpmij", UserInterfaceOnly:=True
    
        lDate = Date - 30
        .Range("A1").AutoFilter Field:=3, Criteria1:="<" & lDate
        If .Range("A" & Rows.Count).End(xlUp).Row > 1 Then
            .Range("A2:G" & .Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Delete
        End If
        .Range("A1").AutoFilter Field:=3
        
        lRij = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
        .Range("B" & lRij).Value = Now
        .Visible = xlVeryHidden
'        ActiveWorkbook.Save
End With
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next

If Not Sh.Name = "Logfile" Then bChange = True
If ActiveSheet.Name <> "Logfile" And bNWrd = False And Target.Count = 1 Then
    If Target.HasFormula Then
        sNWrd = Target.Formula
    Else
        bNWrd = True
        sNWrd = Target.Value
        If sNWrd = ActiveSheet.Name Then sNWrd = ""
    End If
    invullen
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name <> "Logfile" And Target.Count = 1 Then
    sWsh = ActiveSheet.Name
    sBer = ActiveCell.Address
    If ActiveCell.HasFormula Then
        sOWrd = ActiveCell.Formula
    Else
        sOWrd = ActiveCell.Value
        sNWrd = ""
    End If
End If
End Sub
Sub invullen()

Worksheets("Logfile").Protect Password:="helpmij", UserInterfaceOnly:=True
lRij = Worksheets("logfile").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Logfile").Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
Worksheets("Logfile").Range("B" & lRij).Value = Now
Worksheets("Logfile").Range("D" & lRij).Value = sWsh
Worksheets("Logfile").Range("E" & lRij).Value = sBer
Worksheets("Logfile").Range("F" & lRij).Value = sOWrd
Worksheets("Logfile").Range("G" & lRij).Value = sNWrd
bNWrd = False
'ActiveWorkbook.Save
End Sub

Met vriendelijke groet,


Roncancio
 
Roncancio

1000 maal B E D A N K T voor de oplossing.:thumb:
Nu doet hij het wel juist.:)

Heb je in de code ook iets verwerkt voor in de logfile de lijnen te verwijderen die ouder zijn dan 30 dagen?

Ik zie in u code iets nieuwe staan (heb ze in de code hieronder in het rood gezet).
Is dat voor het logfile op te kuisen (ouder dan 30 dagen) of dient dit voor iets anders?

Sorry voor mischien deze domme vraag maar ben helemaal niet goed met vba codes.:eek:

Code:
Dim lRij As Long
Dim sWsh As String
Dim sBer As String
Dim sNWrd As String
Dim sOWrd As String
Dim bNWrd As Boolean
Dim bChange As Boolean
'Zet deze code bij ThisWorkbook. LET OP:
'Je moet een verwijzing maken naar Microsoft Scripting Runtime.
'
'Dit doe je als volgt:
'- Ga naar EXTRA - MACRO - VISUAL BASIC EDITOR. (óf ALT-F11)
'- Ga naar EXTRA - VERWIJZINGEN
'- Vink Microsoft Scripting Runtime aan.
'- Klik op OK.
'Zonder bovenstaande handelingen zal de 2e regel van de code niet werken.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lDate As Long
lRij = Worksheets("Logfile").Range("B" & Rows.Count).End(xlUp).Row
If lRij = 1 Then lRij = 2
If Worksheets(Worksheets.Count).Name = "Logfile" Then
    Worksheets("Logfile").Range("C" & lRij).Value = Now()
End If
[COLOR="red"]lDate = Date - 30[/COLOR]
If bChange = False Then
    ActiveWorkbook.Close SaveChanges:=False
End If
End Sub

Private Sub Workbook_Open()


    On Error Resume Next
    If Worksheets(Worksheets.Count).Name <> "Logfile" Then
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Worksheets(Worksheets.Count).Name = "Logfile"
        Worksheets("Logfile").Range("B:C").NumberFormat = "d/m/yyyy h:mm:ss"
    End If
    With Worksheets("Logfile")
        .Protect Password:="helpmij", UserInterfaceOnly:=True
    
        [COLOR="red"]lDate = Date - 30[/COLOR]   
     .Range("A1").AutoFilter Field:=3, Criteria1:="<" & lDate
        If .Range("A" & Rows.Count).End(xlUp).Row > 1 Then
            .Range("A2:G" & .Range("A" & Rows.Count).End(xlUp).Row).EntireRow.Delete
        End If
        .Range("A1").AutoFilter Field:=3
        
        lRij = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
        .Range("B" & lRij).Value = Now
        .Visible = xlVeryHidden
'        ActiveWorkbook.Save
End With
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next

If Not Sh.Name = "Logfile" Then bChange = True
If ActiveSheet.Name <> "Logfile" And bNWrd = False And Target.Count = 1 Then
    If Target.HasFormula Then
        sNWrd = Target.Formula
    Else
        bNWrd = True
        sNWrd = Target.Value
        If sNWrd = ActiveSheet.Name Then sNWrd = ""
    End If
    invullen
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name <> "Logfile" And Target.Count = 1 Then
    sWsh = ActiveSheet.Name
    sBer = ActiveCell.Address
    If ActiveCell.HasFormula Then
        sOWrd = ActiveCell.Formula
    Else
        sOWrd = ActiveCell.Value
        sNWrd = ""
    End If
End If
End Sub
Sub invullen()

Worksheets("Logfile").Protect Password:="helpmij", UserInterfaceOnly:=True
lRij = Worksheets("logfile").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Logfile").Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
Worksheets("Logfile").Range("B" & lRij).Value = Now
Worksheets("Logfile").Range("D" & lRij).Value = sWsh
Worksheets("Logfile").Range("E" & lRij).Value = sBer
Worksheets("Logfile").Range("F" & lRij).Value = sOWrd
Worksheets("Logfile").Range("G" & lRij).Value = sNWrd
bNWrd = False
'ActiveWorkbook.Save
End Sub
 
Goed dat je het zegt.
Het is inderdaad onderdeel van de code om gegevens ouder dan een maand te verwijderen maar dat is nog niet volledig in de code verwerkt.
Oude gegevens blijven nu dus nog steeds zichtbaar. Als ik tijd heb zal ik dat aanpassen.

Met vriendelijke groet,


Roncancio
 
Vervang de code bij Workbook_Open door onderstaande code.
Bij het openen van het bestand wordt de gegevens tot 30 dagen terug uit het werkblad Logfile verwijderd.

Code:
Private Sub Workbook_Open()
Dim ldatum As Long
Dim lRij As Long

    On Error Resume Next
    If Worksheets(Worksheets.Count).Name <> "Logfile" Then
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Worksheets(Worksheets.Count).Name = "Logfile"
        Worksheets("Logfile").Range("B:C").NumberFormat = "d/m/yyyy h:mm:ss"
    End If
    With Worksheets("Logfile")
        .ShowAllData
        .Protect Password:="helpmij", UserInterfaceOnly:=True
        
        lRij = .Range("A" & Rows.Count).End(xlUp).Row
        ldatum = Now - 30
        With .Range("A2:C" & lRij)
            .AutoFilter 1, "<=" & ldatum
            With .SpecialCells(xlCellTypeVisible)
                If .Rows.Count > 1 And Rows.Index > 1 Then .EntireRow.Delete
            End With
        End With
        ActiveSheet.ShowAllData
        
        lRij = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
        .Range("B" & lRij).Value = Now
        .Visible = xlVeryHidden
'        ActiveWorkbook.Save
    End With
End Sub


Met vriendelijke groet,


Roncancio
 
Roncancio

Sorry voor de late reactie maar heeft even druk geweest :)
Bedankt voor de aanpassing :thumb:

Maar het doet toch zaken die niet helemaal juist zijn.

De gebruiker die in de logfile wordt weergegeven van wie de wijzigingen heeft gedaan is niet juist.
Hij gebruikt elke keer de vorige gebruiker.
Als bv A de eerste aanpassing heeft gedaan en heeft opgeslagen en b doet daarna een aanpassing dan staat bij gebruiker nog steeds A.
Als C dan weer een aanpassing doet staat bij gebruiker B.

En als ik een formule in een cel verander dan begind het bestand te werken en stopt niet meer.
Kan dan enkel excel afsluiten met takenbeheer.

Vb in cel Z40 staat "=a40+b40+e40+g40+h40+j40"
Als ik dan bv j40 verwijder en op enter klik begind het bestand te werken en kan je niks meer doen.Enkel afsluiten via takenbeheer.:(

De 2 problemen zijn zowel met de laatste code en de voorlaatste code die je gepost hebt.
 
Laatst bewerkt:
Ik heb de code aangepast zodat deze beter werkt. Zo wordt het aantal regels vermindert en wordt de huidige gebruiker in de logfile geplaatst.
Het probleem dat het programma bleef hangen deed zich bij mij overigens niet voor.


Code:
Dim lRij As Long
Dim sWsh As String
Dim sBer As String
Dim sNWrd As String
Dim sOWrd As String
Dim bNWrd As Boolean
Dim bChange As Boolean
'Zet deze code bij ThisWorkbook. LET OP:
'Je moet een verwijzing maken naar Microsoft Scripting Runtime.
'
'Dit doe je als volgt:
'- Ga naar EXTRA - MACRO - VISUAL BASIC EDITOR. (óf ALT-F11)
'- Ga naar EXTRA - VERWIJZINGEN
'- Vink Microsoft Scripting Runtime aan.
'- Klik op OK.
'Zonder bovenstaande handelingen zal de 2e regel van de code niet werken.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lDate As Long
lRij = Worksheets("Logfile").Range("B" & Rows.Count).End(xlUp).Row
If lRij = 1 Then lRij = 2
If Worksheets(Worksheets.Count).Name = "Logfile" Then
    Worksheets("Logfile").Range("C" & lRij).Value = Now()
End If

If bChange = False Then
    ActiveWorkbook.Close SaveChanges:=False
End If
End Sub

Private Sub Workbook_Open()
Dim ldatum As Long
Dim lRij As Long

    On Error Resume Next
    If Worksheets(Worksheets.Count).Name <> "Logfile" Then
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Worksheets(Worksheets.Count).Name = "Logfile"
        Worksheets("Logfile").Range("B:C").NumberFormat = "d/m/yyyy h:mm:ss"
    End If
    With Worksheets("Logfile")
        .ShowAllData
        .Protect Password:="helpmij", UserInterfaceOnly:=True
        
        lRij = .Range("A" & Rows.Count).End(xlUp).Row
        ldatum = Now - 30
        With .Range("A2:C" & lRij)
            .AutoFilter 1, "<=" & ldatum
            With .SpecialCells(xlCellTypeVisible)
                If .Rows.Count > 1 And Rows.Index > 1 Then .EntireRow.Delete
            End With
        End With
        ActiveSheet.ShowAllData
        
        lRij = .Range("A" & Rows.Count).End(xlUp).Row + 1
        .Range("A" & lRij).Value = ActiveWorkbook.BuiltinDocumentProperties("Last Author")
        .Range("B" & lRij).Value = Now
        .Visible = xlVeryHidden
'        ActiveWorkbook.Save
    End With
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next

If Not Sh.Name = "Logfile" Then
    bChange = True
    If ActiveSheet.Name <> "Logfile" And bNWrd = False And Target.Count = 1 Then
        If Target.HasFormula Then
            sNWrd = Target.Formula
        ElseIf ActiveSheet.Name <> "Logfile" Then
            bNWrd = True
            sNWrd = Target.Value
            If sNWrd = ActiveSheet.Name Then sNWrd = ""
        End If
        invullen
    End If
End If
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If ActiveSheet.Name <> "Logfile" And Target.Count = 1 Then
    sWsh = ActiveSheet.Name
    sBer = ActiveCell.Address
    If ActiveCell.HasFormula Then
        sOWrd = ActiveCell.Formula
    Else
        sOWrd = ActiveCell.Value
        sNWrd = ""
    End If
End If
End Sub
Sub invullen()

Worksheets("Logfile").Protect Password:="helpmij", UserInterfaceOnly:=True
lRij = Worksheets("logfile").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Logfile").Range("A" & lRij).Value = Application.UserName
Worksheets("Logfile").Range("B" & lRij).Value = Now
Worksheets("Logfile").Range("D" & lRij).Value = sWsh
Worksheets("Logfile").Range("E" & lRij).Value = sBer
Worksheets("Logfile").Range("F" & lRij).Value = sOWrd
Worksheets("Logfile").Range("G" & lRij).Value = sNWrd
bNWrd = False
'ActiveWorkbook.Save
End Sub

Met vriendelijke groet,


Roncancio
 
Roncancio

Nog eens bedankt voor je hulp echt top :thumb:

Het vastlopen van het programma is nu opgelost.:)

Bij mij was het zowel op het werk als op mijn pc thuis dat het vastliep.
Raar :confused:

Het probleem van de gebruikers weet ik nog niet of het is opgelost dat kan ik straks pas zien dat de andere het bestand gebruikt hebben.

Heb nog een vraagje waar jij mischien wel raad mee weet.

Hoe moet ik deze code samen met u code combineren.
Deze code staat al in this workbook in een andere bestand waar ik u code ook in zou willen gebruiken.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 ActiveWorkbook.Close SaveChanges:=False
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim i, j, iWS As Integer
  For i = 3 To 33
  For j = 1 To 7
    On Error Resume Next
    If ActiveSheet.Index <= 3 And Target.Row > 33 Then
        For iWS = 1 To 3
            Worksheets(iWS).Cells(i, j).Find(Target, , xlValues, xlWhole).Value = ""
        Next
      End If
    Next j
  Next i
End Sub
 
Roncancio

Het probleem met de gebruikers is ook opgelost met u nieuwe code.
Hartelijk dank voor al je hulp :thumb:.

Jullie zijn hier echt krakken.:)

Maar weet je mischien nog hoe ik de code van mijn bericht hierboven moet samen voegen met u code.:eek:
Dit voor nog in een ander bestandje te gaan gebruiken.
 
Misschien is het makkelijker met een vb bestandje.

Bekijk bijlage sorteer planning1.rar

De code die in this workbook staat in het bestand zou ook moeten blijven.

De eerste code vraagt bij het sluiten niet voor op te slaan en sluit het bestand gewoon zonder iets op te slaan.

De2 de code gaat zoeken of hij in de rijen 1 tem 33
de naam vind die je ingeeft vanaf rij 34 en als hij die vind verwijderd hij die.

Iemand de oplossing :(
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan