[VBA - Word] FileCopy - toegang geweigerd

Pagina: 1
Acties:
  • 549 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • Jarcol
  • Registratie: Februari 2004
  • Laatst online: 12-07 10:26
Hallo,

Ik heb een bestand 'bestand`001.doc'. Zodra ik deze open om te bewerken wordt dit document opgeslagen als 'bestand`002.doc' en moet 'bestand`001.doc` verplaatst worden naar de map backup... Dit doe ik met filecopy, maar krijg dan de mededeling: permission denied.

Hier de code die ik heb; TopVolgno is het huidige versienummer en NieuwVolgno is het nieuwe versienummer

code:
1
2
3
4
5
6
7
8
NieuwVolgno = Format(TopVolgNo + 1, "000")
fname = bnaam & "`" & NieuwVolgno & ".doc"
ActiveDocument.SaveAs (ActiveDocument.Path & "\" & fname)

Dim wdobj As Object
Set wdobj = CreateObject("Scripting.FileSystemObject")
wdobj.FileCopy ActiveDocument.Path & "\" & bnaam & "`" & Format(TopVolgNo, "000") & ".doc", ActiveDocument.Path & "\backup\" & bnaam & "`" & Format(TopVolgNo, "000") & ".doc"
Set wdobj = Nothing

Ik krijg nu een permission denied, terwijl het document met NieuwVolgno het actieve document is (lijk mij)

Ik heb al geprobeerd met Documents("Bestandsnaam_metvorigversienr.doc").Close te gebruiken, maar dat werkt ook niet...

Ook heb ik ruim gegoogled maar kan niets bruikbaars vinden

Zouden jullie hier eens een licht op willen schijnen? Alvast bedankt!

Acties:
  • 0 Henk 'm!

Verwijderd

wdobj.copyfile ?
en ntfs machtigingen nagaan voor de backupfolder, die ook al moet bestaan voor je het bestand kopieert.

Acties:
  • 0 Henk 'm!

  • Witte
  • Registratie: Februari 2000
  • Laatst online: 29-07 11:23
brr, hele lelijke code.

je laat je kopieer-actie afhangen van het pad van het actieve document. Feitelijk hebben die niks met elkaar te maken.
Bovendien zou ik nooit al die string-operaties in de kopieer instructie proppen. Als je iets doet zoals:

bronpad = blabla
bronbestand = bronpad & "\" & blabla & ".doc"

doelpad = bronpad & "\backup"
doelbestand = doelpad & "\" & blabla & ".doc"

dan kan je tenminste nog een en ander debuggen.

overigens lijkt het een permissie-kwestie. Van wie zijn de credentials als VBA een file-operatie uitvoert?

[ Voor 12% gewijzigd door Witte op 28-08-2007 16:33 ]

Houdoe


Acties:
  • 0 Henk 'm!

Verwijderd

de credentials zijn die van de gebruiker die word geopend heeft.
waarom maak je eigenlijk 2 backups aan, de ene met een saveas, de andere met een copyfile?
het originele '001 bestand kan je trouwens niet verplaatsen, er zit een lock op zelfs nadat je het onder een andere naam hebt opgeslagen.

Acties:
  • 0 Henk 'm!

  • Jarcol
  • Registratie: Februari 2004
  • Laatst online: 12-07 10:26
Verwijderd schreef op dinsdag 28 augustus 2007 @ 16:51:
de credentials zijn die van de gebruiker die word geopend heeft.
waarom maak je eigenlijk 2 backups aan, de ene met een saveas, de andere met een copyfile?
het originele '001 bestand kan je trouwens niet verplaatsen, er zit een lock op zelfs nadat je het onder een andere naam hebt opgeslagen.
met saveas geef ik in de bestandsnaam het nieuwe versienummer.. met copyfile wil ik het bestand met het vorige versienummer verplaatsen naar de backup map...

Is er geen manier om het te unlocken dan?

Acties:
  • 0 Henk 'm!

Verwijderd

laat eens wat meer relevante code zien want volgens mij krijg je een fout op een stuk code wat je nog niet gepost hebt.
zodra ik deze open ...
Hoe realiseer je bovenstaand? dmv een event procedure, het afvangen van de openopdracht, of nog anders?
Is er geen manier om het te unlocken dan?
ja die is er wel, maar dat probleem stelt zich niet in de code zoals je die nu gepost hebt (waar er enkel gekopieerd wordt, en niets verplaatst...)

Acties:
  • 0 Henk 'm!

  • Jarcol
  • Registratie: Februari 2004
  • Laatst online: 12-07 10:26
Verwijderd schreef op dinsdag 28 augustus 2007 @ 17:37:
laat eens wat meer relevante code zien want volgens mij krijg je een fout op een stuk code wat je nog niet gepost hebt.
[...]
Hoe realiseer je bovenstaand? dmv een event procedure, het afvangen van de openopdracht, of nog anders?
[...]
ja die is er wel, maar dat probleem stelt zich niet in de code zoals je die nu gepost hebt (waar er enkel gekopieerd wordt, en niets verplaatst...)
Ik open het document gewoon door 2x op het bestand te klikken. Er wordt een userform geladen waarin een gebruiker wordt gekozen. Vervolgens als ik op OK klik gebeurt deze code, het gaat denk ik om het laatste stukje...:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Private Sub cbOK2_Click()
If cobVan2.Text = "" Then
    MsgBox ("Zorg ervoor dat een medewerker is geselecteerd.")

Else

    Dim Bestand As String
    
    TopVolgNo = 0
    'Bepaal bestandsnaam zonder volgnr en extensie
    posn = InStr(ActiveDocument.Name, "`")
    If posn <> 0 Then
        bnaam = Left(ActiveDocument.Name, posn - 1)
    End If
    
    Bestand = Dir(ActiveDocument.Path & "\" & bnaam & "`*.doc")
    
    Do While Bestand <> ""
      VolgNo = Mid(Bestand, InStr(1, Bestand, "`") + 1, 3)
      If IsNumeric(VolgNo) Then
        If VolgNo > TopVolgNo Then
            TopVolgNo = CInt(VolgNo)
        End If
        Bestand = Dir
      End If
    Loop
    
    NieuwVolgno = Format(TopVolgNo + 1, "000")
    fname = bnaam & "`" & NieuwVolgno & ".doc"
    
    ActiveDocument.Bookmarks("bijgewerkt").Select
    Selection.Delete Unit:=wdWord, Count:=3
    ActiveDocument.Bookmarks("bijgewerkt").Range.Text = cobVan2.Value
    
    ActiveDocument.Bookmarks("datumBijgewerkt").Select
    Selection.Delete Unit:=wdCharacter, Count:=21
    ActiveDocument.Bookmarks("datumBijgewerkt").Range.Text = Date$ & " - " & Time$
    
    ActiveDocument.Bookmarks("versie").Select
    Selection.Delete Unit:=wdWord, Count:=1
    ActiveDocument.Bookmarks("versie").Range.Text = NieuwVolgno
    
    ActiveDocument.Bookmarks("versie2").Select
    Selection.Delete Unit:=wdWord, Count:=1
    ActiveDocument.Bookmarks("versie2").Range.Text = NieuwVolgno
    
    ActiveWindow.View.Type = wdPrintView
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    ActiveWindow.View.Type = wdPrintView
    Selection.HomeKey Unit:=wdStory
           
    Set conn = CreateObject("ADODB.Connection")
    
    Dim bnaam2 As String
    posn2 = InStr(1, bnaam, "-")
    If posn2 <> 0 Then
        bnaam2 = Right(bnaam, Len(bnaam) - (posn2 + 1))
    End If
    
    Dim wsh
    Set xls = CreateObject("Excel.Application")
    Set wkb = xls.Workbooks.Open(ActiveDocument.Path & "\" & "\paspoort.xls")
    wsh = wkb.Worksheets("Paspoort").Activate
    
    With ActiveSheet
        i = 1
        oud = bnaam2 & Chr$(96) & Format(TopVolgNo, "000")
        nieuw = bnaam2 & Chr$(96) & NieuwVolgno
        
        Do
         
            If ActiveSheet.Range("G" & i).Value <> oud Then
                i = i + 1
            Else
                ActiveSheet.Range("G" & i).Value = nieuw
            End If
        Loop While i < (Range("G65536").End(xlUp).Row + 1)
     
    End With
    xls.Workbooks.Close: Set xls = Nothing
    
    Unload Me
    
    Application.ScreenUpdating = False
    
    ActiveDocument.SaveAs (ActiveDocument.Path & "\" & fname)
        

    Dim wdobj As Object
    Set wdobj = CreateObject("Scripting.FileSystemObject")
    StrSrc = ActiveDocument.Path & "\" & bnaam & "`" & Format(TopVolgNo, "000") & ".doc"
    StrDest = ActiveDocument.Path & "\backup\" & bnaam & "`" & Format(TopVolgNo, "000") & ".doc"
    
    wdobj.Copyfile StrSrc, StrDest
    Set wdobj = Nothing


End If

End Sub

[ Voor 0% gewijzigd door Jarcol op 29-08-2007 08:34 . Reden: pakt bold niet in code ]


Acties:
  • 0 Henk 'm!

  • Jarcol
  • Registratie: Februari 2004
  • Laatst online: 12-07 10:26
Sorry sorry sorry!

De laatste code die ik poste kopieerde het bestand al! Het enige wat nu nog moet gebeuren is dat het bestand ge-unlocked wordt zodat het bestand wat nu dubbel is (ik heb namelijk versie`001 in de hoofdmap en backup-map staan. daarnaast staat versie`002 ook in de hoofdmap) verwijderd kan worden!

Iemand tips?

Ik ben al dispose() tegen gekomen, maar ik weet niet hoe deze toe te passen op dit document

Ik ben nu ook unlock tegen gekomen, maar dan moet ik weten welk bestandsnummer het huidige bestand heeft..

[ Voor 25% gewijzigd door Jarcol op 29-08-2007 10:24 ]


Acties:
  • 0 Henk 'm!

Verwijderd

dus versie '001 in de hoofdmap wil je schrappen?
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub t()
  Dim DocumentMap As String
  Dim NewCopy     As Document
  
  DocumentMap = ActiveDocument.Path
  Set NewCopy = Documents.Add(ActiveDocument.FullName)
  NewCopy.SaveAs (DocumentMap & "\" & bnaam & "`" & TopVolgNo & ".doc")
  NewCopy.SaveAs (DocumentMap & "\backup\" & bnaam & "`" & TopVolgNo & ".doc")
  NewCopy.Close
  Set NewCopy = Nothing
  'verdere (bookmark)bewerkingen op het oorspronkelijke, ongenummerde document
  '....
End Sub
het ado experiment om je excelsheet aan te vullen (Set conn = CreateObject("ADODB.Connection")) kan je ook schrappen, en de copyfile code wordt normaal gezien overbodig.

edit: de unlock de je tegengekomen bent is alleen geldig in de context van zelf een bestand openen/creëren met schrijfrechten.

[ Voor 8% gewijzigd door Verwijderd op 29-08-2007 21:16 ]


  • Jarcol
  • Registratie: Februari 2004
  • Laatst online: 12-07 10:26
Verwijderd schreef op woensdag 29 augustus 2007 @ 21:14:
dus versie '001 in de hoofdmap wil je schrappen?
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub t()
  Dim DocumentMap As String
  Dim NewCopy     As Document
  
  DocumentMap = ActiveDocument.Path
  Set NewCopy = Documents.Add(ActiveDocument.FullName)
  NewCopy.SaveAs (DocumentMap & "\" & bnaam & "`" & TopVolgNo & ".doc")
  NewCopy.SaveAs (DocumentMap & "\backup\" & bnaam & "`" & TopVolgNo & ".doc")
  NewCopy.Close
  Set NewCopy = Nothing
  'verdere (bookmark)bewerkingen op het oorspronkelijke, ongenummerde document
  '....
End Sub
het ado experiment om je excelsheet aan te vullen (Set conn = CreateObject("ADODB.Connection")) kan je ook schrappen, en de copyfile code wordt normaal gezien overbodig.

edit: de unlock de je tegengekomen bent is alleen geldig in de context van zelf een bestand openen/creëren met schrijfrechten.
Dit werkt perfect! Super bedankt! ....maar....

Toch nog een kleinigheidje!
Ik werk met een sjabloon.dot bestand. Dit betekend dat als een nieuw document gemaakt wordt er automatisch een usrform gestart wordt waar een gebruiker geselecteerd kan worden.
Als ik
Visual Basic:
1
Set NewCopy = Documents.Add(ActiveDocument.FullName)
doe, wordt ook dit usrform gestart. Is het mogelijk deze te 'hide-en' als ik vanaf een bestaand document dit nieuwe document open?

ik hoop dat dit een beetje duidelijk is :?

[ Voor 24% gewijzigd door Jarcol op 30-08-2007 10:36 . Reden: dubbele quote ]


Verwijderd

voeg volgende opdracht in voor de documents.add instructie:
Visual Basic:
1
WordBasic.DisableAutoMacros 1
daarachter best het uitvoeren van automacro's herstellen met
Visual Basic:
1
WordBasic.DisableAutoMacros 0
Deze functie werd nooit omgezet naar vba, vandaar dat je het oude wordbasic object dient te gebruiken.

  • Jarcol
  • Registratie: Februari 2004
  • Laatst online: 12-07 10:26
Verwijderd schreef op donderdag 30 augustus 2007 @ 11:07:
voeg volgende opdracht in voor de documents.add instructie:
Visual Basic:
1
WordBasic.DisableAutoMacros 1
daarachter best het uitvoeren van automacro's herstellen met
Visual Basic:
1
WordBasic.DisableAutoMacros 0
Deze functie werd nooit omgezet naar vba, vandaar dat je het oude wordbasic object dient te gebruiken.
Kerel, jij bent echt een life-savior! Heel erg bedankt!!
Pagina: 1