Teller voor openen bestand

Status
Niet open voor verdere reacties.

MarinusPJ

Gebruiker
Lid geworden
14 sep 2013
Berichten
62
Ik heb een Word bestand op een gedeelde netwerkschijf en wil weten hoe vaak dit bestand geopend wordt. Iemand enig idee?

Alvast bedankt.
 
Gaat het om één bestand? Of om een sjabloon? De eerste optie is nog wel op te lossen met een macro die een CustomDocumentProperty aanpast bij openen. Maar dat werkt alleen goed als elke gebruiker de macro-beveiliging zodanig instelt dat de macro ook altijd wordt uitgevoerd. Zet een gebruiker de beveiliging zo hoog dat er geen macro's worden uitgevoerd, dan telt hij dus niet door.
Alternatief zou dan kunnen zijn dat je het bestand opent met een batchbestand/scriptje. Hierin kun je dan wél de noodzakelijke code laten uitvoeren. Dat script opent dan eerst een tekstbestand met een teller en verhoogt de waarde met 1. Vervolgens opent Word met het document. In zo'n script kun je dan ook meer vastleggen; welke gebruiker, welke datum/tijd etc.
 
Dank je wel OctaFish,

Het gaat nu om één bestand binnen de groepsmap. Het kan zijn dat er later meerdere bestanden in de map komen waarvan de eigenaar wil weten of de bestanden geopend zijn. De gebruikers zullen voor zover ik ze ken geen wijzigingen aanbrengen in de standaardmacroinstellingen.
Ik ben erg benieuwd naar beide opties, heb gisteren een poos zitten zoeken maar kwam er niet verder mee.

Groeten,
MarinusPJ
 
Kijk eens of je hier wat mee kan:

Code:
Sub SaveCertificateAs()
    sPath = Options.DefaultFilePath(wdStartupPath) & "\Settings.ini"
    Set oVars = ActiveDocument.Variables
    CertNo = System.PrivateProfileString(sPath, "MacroSettings", "CertificateNumber")
    If Not ActiveDocument.Path = "" Then
        ActiveDocument.Save
    Else 'The document has not been previously saved, so save it
        With Dialogs(wdDialogFileSaveAs)
            .Name = "Certificate " & Format(oVars("varSaveNo"), sFormat)
            .Show
        End With
    End If
    ActiveDocument.Close
End Sub

Code:
Sub AutoClose() 'Recycles number if the document was unsaved.'
    sPath = Options.DefaultFilePath(wdStartupPath) & "\Settings.ini"
    Set oVars = ActiveDocument.Variables
    CertNo = System.PrivateProfileString(sPath, "MacroSettings", "CertificateNumber")
    If ActiveDocument.Name Like "Document#*" Then
        If MsgBox("This Certificate has not been saved." & vbCr _
            & "Do you want to save before closing?", vbYesNo, "MacroSettings") = vbYes Then
            With Dialogs(wdDialogFileSaveAs)
                .Name = "Certificate " & Format(oVars("varSaveNo"), sFormat)
                .Show
            End With
        Else ' Close the document and recycle the number
            If CertNo = oVars("varCertNo") Then
                MsgBox "The current number " & "will be recycled.", vbOKCancel, "Recycle"
                System.PrivateProfileString(sPath, "MacroSettings", "CertificateNumber") = CertNo - 1
            End If
        End If
        ActiveDocument.Saved = True
    End If
End Sub

Code:
Sub ResetStartNo()
    sPath = Options.DefaultFilePath(wdStartupPath) & "\Settings.ini"
    Set oVars = ActiveDocument.Variables
    CertNo = System.PrivateProfileString(sPath, "MacroSettings", "CertificateNumber")
    CertNo = InputBox("Reset certificate number?", "Reset", CertNo)
    oVars("varSaveNo").Value = CertNo
    System.PrivateProfileString(sPath, "MacroSettings", "CertificateNumber") = CertNo
    oVars("varCertNo").Value = CertNo
    For Each oHead In ActiveDocument.Sections(1).Headers
        If oHead.Exists Then
            For Each oField In oHead.range.Fields
                oField.Update
            Next oField
        End If
    Next oHead
End Sub
 
Dank je wel OctaFish,

Ik heb 3 documenten gemaakt waar de verschillende codes met de VB editor zijn ingevoegd. Ik zie echter nergens een getal veranderen. Overigens wel Office voor Mac waar ik nu mee kijk. Op het werk is het gewoon Windows.
 
Dag OctaFish,

Ik geloof dat ik 'm nog niet helemaal heb, ook op het werk in een Windows omgeving krijg ik niet te zien hoe vaak een bestand geopend wordt. Moet ik op een speciale plek kijken?
Ik heb de 3 codes in 3 verschillende documenten gezet en onder elkaar in 1 document en dan steeds opgeslagen als Word document met ingeschakelde macro's.

Groeten,
MarinusPJ
 
Ik zal er een voorbeeldje voor maken als ik tijd heb. Die is een beetje beperkt momenteel, omdat mijn laptop is gesneuveld...
 
Moet even een bericht schrijven ivm 14 dagen geen reactie op deze vraag.
@OctaFish: heb je je laptop nog kunnen reanimeren?

Groeten,
MarinusPJ
 
Ik ben een ander aan het inrichten. Maar ook door andere karweitjes weinig tijd gehad de laatste tijd. Maar ik kijke er weer naar :).
 
Ik heb even een simpele oplossing voor je bedacht op basis van een CustomProperty. Die wordt opgehoogd bij openen van het document, en geeft dan een idee hoe vaak het is geopend.
Code:
Private Sub Document_Open()
Dim prp As Object
Dim aDoc As Document
Dim chk As Boolean
    Set aDoc = ActiveDocument
    For Each prp In ActiveDocument.CustomDocumentProperties
        If prp.Name = "teller" Then chk = True
        Exit For
    Next prp
    If chk = True Then
        aDoc.CustomDocumentProperties("teller").Value = aDoc.CustomDocumentProperties("teller").Value + 1
    Else
        aDoc.CustomDocumentProperties.Add Name:="teller", LinkToContent:=False, Value:=1, Type:=msoPropertyTypeNumber
    End If
    MsgBox "Dit document is nu " & ActiveDocument.CustomDocumentProperties("teller").Value & " keer geopend...",vbOK
End Sub
 
Dag OctaFish,

Alvast bedankt voor deze. Op mijn Word for Mac krijg ik echter bij elke opening een pop up te zien met de tekst: "Dit document is nu 1 keer geopend". Behalve bij een opgeslagen wijziging, dan telt ie 'm wel. Ik ga 't morgen ook testen in een Windows omgeving.

Groeten,
MarinusPJ
 
Ik heb 'm niet getest op een Mac, dus daar kan ik je niet bij helpen. De teller wordt verhoogd bij het openen, niet bij het opslaan. Daar zou je nog een extra actie misschien voor kunnen maken, want omdat het document wél gewijzigd wordt, (de DocumentProperty wordt immers aangepast) moet het document wel worden opgeslagen. Een extern bestand met een teller zou dan ook wellicht beter zijn, omdat je dan niet afhankelijk bent van het opslaan van het document. Het is maar wat je belangrijk vindt, want door het Word document steeds op te slaan, ben je wel de oorspronkelijke "Datum gewijzigd" kwijt.
 
Hmm... ik test 'm hier net met Windows, maar krijg dezelfde pop up die niet optelt bij alleen openen. Pas als er een wijziging wordt opgeslagen zie ik de teller oplopen als ik het document daarna weer open. Het is niet nodig om het aantal wijzigingen te tellen. Het is namelijk niet de bedoeling dat de lezer er wijzigingen in aanbrengt.
 
Toch zul je het document ergens een keer op moeten slaan om de wijziging in de teller vast te leggen. Dat kan overigens bij dezelfde macro wel, bijvoorbeeld door een tekst te typen, document op te slaan, tekst te verwijderen en document weer op te slaan. De gebruiker ziet daar niets van, maar je teller wordt netjes opgehoogd. Voorbeeldje?
Code:
Private Sub Document_Open()
Dim prp As Object
Dim aDoc As Document
Dim chk As Boolean
    Set aDoc = ActiveDocument
    For Each prp In ActiveDocument.CustomDocumentProperties
        If prp.Name = "teller" Then chk = True
        Exit For
    Next prp
    If chk = True Then
        aDoc.CustomDocumentProperties("teller").Value = aDoc.CustomDocumentProperties("teller").Value + 1
    Else
        aDoc.CustomDocumentProperties.Add Name:="teller", LinkToContent:=False, Value:=1, Type:=msoPropertyTypeNumber
    End If
    Selection.TypeText Text:=" "
    Selection.TypeBackspace
    ActiveDocument.Save
    MsgBox "Dit document is nu " & ActiveDocument.CustomDocumentProperties("teller").Value & " keer geopend...", vbOK
End Sub
Beetje 'Quick-and-Dirty' oplossing, maar het werkt...
 
Dag OctaFish,

Geweldig, het werkt als een zonnetje. Ik had inderdaad geen inhoud meegegeven aan het document.;)
Reuze bedankt.

Groeten,
MarinusPJ
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan