Avatar billede folj Forsker
07. oktober 2014 - 10:33 Der er 16 kommentarer og
1 løsning

Filhåndtering med VBA - kopiere fil fra mappe uden at åbne filen

Jeg vil gerne have en eksperts hjælp til at kopiere en .notebook-fil over i en mappe som jeg har dedikeret til formålet.

Det skal ende med at jeg tager en daglig kopi, og den filtype (".notebook) jeg vil kopiere kan ikke automatiseres på nogen måde, derfor er jeg nødt til at afvikle det fra de vba-procedurer jeg i forvejen afvikler i en Excel-fil.
Kan det lade sig gøre og hvordan?
Jeg har startet på nedenstående procedure til at lave den første testversion.


Sub TstCopy()
  Dim StdFolder As String
  Dim CopyToFolder As String
  Dim CopyFileName As String

StdFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer"
CopyToFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer\backups\driftstavle\"

' nedenstående linie genererer eksempelvis strengen "AutoKopi_20141007.Notebook"
CopyFileName = "\AutoKopi_" & Format(Now, "YYYYMMDD") & ".Notebook"

'Her vil jeg så gerne kalde filen "MitFilNavn.notebook")
der ligger i StdFolder, og skal kopieres over i min backupmappe CopyToFolder.
'Gerne uden at åbne filen. (Proceduren afvikles fra en excelfil, så det er ikke sikkert at brugeren har installeret et program der kan åbne filtypen ".notebook")

End Sub
Avatar billede folj Forsker
09. oktober 2014 - 13:28 #1
Jeg skal lige præcicere at det handler om at kopiere en fil fra VBA der afvikles i et excelark.

Der kan ikke indbygges et automatiseret SavaCopyAs i den filtype jeg gerne vil have kopieret.

jeg håber blot det er muligt at kopiere filen ved hjælp af VBA, og derefter omdøbe den kopierede fil til eksempelvis backUp fra en given dato.
Avatar billede kabbak Professor
09. oktober 2014 - 19:53 #2
Prøv at lave en .vbs fil og så sæt koden derind,  NB ikke testet

Sub TstCopy()

StdFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer"
CopyToFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer\backups\driftstavle\"
CopyFileName = "\AutoKopi_" & Format(Now, "YYYYMMDD") & ".Notebook"

Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile StdFolder &  "MitFilNavn.notebook", CopyToFolder & CopyFileName
End Sub
Avatar billede folj Forsker
10. oktober 2014 - 08:32 #3
Vil det sige at man ikke kan afvikle lidt filhåndtering fra en excel-fil med macro (xlsm-fil)?
Avatar billede kabbak Professor
10. oktober 2014 - 09:41 #4
Jo, men mente at det andet var nemmere,  så kan du jo få Windows til at gøre det en gang i døgnet.
Avatar billede kabbak Professor
10. oktober 2014 - 09:42 #5
Du kan bare sætte koden i Excel i stedet,  hvis du hellere vil det
Avatar billede folj Forsker
10. oktober 2014 - 10:23 #6
Har jeg ikke ret i at så bevæger vi os over i visual basic?
Kræver det ikke programmer installeret specielt til at afvikle dette?
Hvis ja, så er det sandsynligvis udenfor de rammer vi almindelige brugere på Novo Nordisk har, at holde os indenfor.
Avatar billede kabbak Professor
10. oktober 2014 - 10:33 #7
.vbs filer er lige til at afvikle, det er noget i stil med .bat filer, ren tekst
Avatar billede folj Forsker
10. oktober 2014 - 11:09 #8
@kabbak
Jeg har forsøgt at afvikle dit forslag fra min excelfil, men den svarer "Path/file access error".

Og jeg har selvfølgelig dobbelttjekket stien til filen...
kan ikke finde fejl på den.
Avatar billede kabbak Professor
10. oktober 2014 - 11:13 #9
der skal en \ efter

StdFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer"
skal være

StdFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer\"
Avatar billede folj Forsker
10. oktober 2014 - 11:51 #10
Yes, men den detalje har jeg fået styr på, men den returnerer alligevel fejlen "Path/file access error".
Avatar billede kabbak Professor
10. oktober 2014 - 12:03 #11
Fjern \ i
CopyFileName = "\AutoKopi_" & Format(Now, "YYYYMMDD") & ".Notebook"
Avatar billede kabbak Professor
10. oktober 2014 - 12:05 #12
Sub TstCopy()
  StdFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer\"
CopyToFolder = "\\server\drev\mappe\undermappe\Smart Board\Vore smartboard filer\backups\driftstavle\"
CopyFileName = "AutoKopi_" & Format(Now, "YYYYMMDD") & ".Notebook"

Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile StdFolder & "MitFilNavn.notebook", CopyToFolder & CopyFileName
End Sub
Avatar billede folj Forsker
10. oktober 2014 - 12:32 #13
Jeg har udviklet lidt videre, men det der sker er stadig det samme, og fejlen er stadig den samme...

Scriptet tjekker om mappen findes ellers opretter det mappen.
Første gang jeg kørte scriptet, oprettede den mappen, men efterfølgende bliver den ved med at svare at mappen findes ikke i forvejen, og så fejler den også på lineien MkDir til opret mappe.

Sub TstCopy()
  Dim StdFolder As String
  Dim MyFileName As String
  Dim CopyToFolder As String
  Dim CopyFileName As String

StdFolder = "\\server\drev\mappe\undermappe\undermappe\undermappe\undermappe"
' forlænges med stien til mappen med backupfiler
CopyToFolder = StdFolder & "\Arkiv\BackUps 2014\driftstavle"
CopyFileName = "\AutoKopi_" & Format(Now, "YYYYMMDD") & ".Notebook" ' genererer eksempelvis strengen AutoKopi_20141007.Notebook"

MyFileName = "\Drifttavle_current.notebook"

  If Dir(CopyToFolder) = "" Then 'hvis mappen til BackUp  ikke allerede findes
      MsgBox "Mappen:" & Chr(10) & CopyToFolder & Chr(10) & "findes ikke i forvejen - oprettes"
      MkDir CopyToFolder ' opret mappen
  End If

Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile StdFolder & "\" & MyFileName, CopyToFolder & "\" & CopyFileName

End Sub
Avatar billede folj Forsker
10. oktober 2014 - 12:53 #14
Jeg skal lige skynde mig at rette...
Jeg tror jeg fik hul på det.

Jeg kørete lige scriptet hvor jeg havde kommenteret ud de linier til oprettelse af mappe, så jeg undgår fejl fra linien MkDir.

Nu kørte det lige igennem, og der blev oprette det kopi jeg ønskede at få...

nu mangler jeg blot at finde fejlen, der gør at den bliver ved med at svare at mappen ikke findes i forvejen.
Avatar billede kabbak Professor
10. oktober 2014 - 14:17 #15
If Dir(CopyToFolder, vbDirectory) = "" Then 'hvis mappen til BackUp  ikke allerede findes
      MsgBox "Mappen:" & Chr(10) & CopyToFolder & Chr(10) & "findes ikke i forvejen - oprettes"
      MkDir CopyToFolder ' opret mappen
  End If
Avatar billede folj Forsker
10. oktober 2014 - 18:24 #16
@kabbak
Tak for dit svar...

Jer er taget på weekend, og håber det kan vente til jeg er inde på kontoret igen, så vil jeg teste det af i næste uge...

Go' weekend.
Avatar billede folj Forsker
13. oktober 2014 - 10:53 #17
@kabbak
Nu har jeg haft tid til at teste det.
Dit bud på løsningen var lige i øjet - det virker perfekt.

Tak for dit engagement i problemløsningen...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester