Avatar billede oz1aiv Nybegynder
05. januar 2007 - 16:03 Der er 3 kommentarer og
3 løsninger

VBA svarende til copy c:\sti1\*%1.* c:\sti2\%1.xml

Jeg har brug for at kopiere filer, som jeg kun kender den sidste del af navnet på til en ny mappe, hvor navnet skal være den del af navnet, som jeg kender med extension xml.

Eksempel:
copy c:\sti1\*78887.* c:\sti2\78887.xml
virker fra en dos promt.

Jeg anvender MS Access 2003 og vil køre funktionen fra en makro.

Når denne funktion komme til at virke, skal den udbygges, så den henter en stribe filer angivet i en tabel.


Følgende virker ikke:

Function partnamecopy()
  Dim source, destination, filepartname As String
  Dim ofs As Object
 
  Set ofs = CreateObject("Scripting.FileSystemObject")
 
    With ofs
        filepartname = "78887"
        source = "C:\sti1\*" & filepartname & ".*"
        destination = "C:\sti2\" & filepartname & ".xml"
   
    '  Debug.Print source, destination
       
        FileCopy source, destination
   
    End With
End Function



Debug.Print source, destination
giver resultatet:
C:\sti1\*78887.*            C:\sti2\78887.xml
hvilket for mig ser fornuftigt ud.

FileCopy source, destination - giver fejl
FileCopy(source, destination) - giver også fejl


Jeg er ret ny inden for VBA, men forsøger ihærdigt.

Glæder mig til at få nogle gode svar.

Peter
Avatar billede fdata Forsker
05. januar 2007 - 16:53 #1
Så bliv i DOS  ;o)
Brug: 
Shell "cmd /c copy C:\Source\*.* C:\Destination\test.xml"
Avatar billede oz1aiv Nybegynder
07. januar 2007 - 01:28 #2
Tak fot tippet.

Hvordan er det lige at min sub skal se ud. Jeg kan ikke få det til at virke. Jeg har forsøgt mig med diverse varianter af:


Sub test()
Dim filepartname As String
Dim X
    filepartname = "78887"
    X = Shell("cmd /c copy C:\sti1\*" & filepartname & ".* C:\sti2\" & filepartname & ".xml")
End Sub

Jeg får ikke syntaxfejl, men der sker ikke nogen kopiering.

I øvrigt virker det heller ikke med disse 2 shell's:
X = Shell("cmd /c copy C:\sti1\f78887.abc C:\sti2\f78887.xml")
Shell "cmd /c copy C:\sti1\f78887.abc C:\sti2\f78887.xml"
Avatar billede kjulius Novice
07. januar 2007 - 02:40 #3
Du kan bruge VB funktionen Dir til at lave en liste over filer der skal kopieres. Denne liste kan du så loope igennem og kopiere filerne individuelt. Eks:

Option Compare Database
Option Explicit

Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" _
    (ByVal lpExistingFileName As String, _
    ByVal lpNewFileName As String, _
    ByVal bFailIfExists As Long) As Long
   
Public Function PartnameCopy(Partname As String, ToPath As String, Overskriv As Boolean, Optional FromPath As Variant) As Integer
    Dim DirFilter As String
    Dim File As String
    Dim FromPath2 As String
    Dim ToPath2 As String
    Dim FromFile As String
    Dim ToFile As String
    DirFilter = "*" & Partname
    If InStr(1, Partname, ".") > 0 Then
        DirFilter = DirFilter & "*"
    Else
        DirFilter = DirFilter & "*.*"
    End If
    If IsMissing(FromPath) Then
        'Der er ikke opgivet et dir, hvor filerne skal findes. Current dir bruges.
    Else
        If Right(FromPath, 1) = "\" Then
            FromPath2 = FromPath
        Else
            FromPath2 = FromPath & "\"
        End If
        DirFilter = FromPath2 & DirFilter
    End If
   
    'Topath skal slutte med en backslash. Sørg for det...
    If Right(ToPath, 1) <> "\" Then
        ToPath2 = ToPath & "\"
    Else
        ToPath2 = ToPath
    End If
   
    ' Foretag kopieringen iht. til kriteriet...
    File = Dir(DirFilter, vbNormal)
    Do While File <> ""
        FromFile = FromPath2 & File
        ToFile = ToPath2 & File
        CopyFile FromFile, ToFile, Overskriv
        PartnameCopy = PartnameCopy + 1 ' Rapporter tilbage hvor mange filer der er kopieret
        File = Dir() ' Læs den næste fil, der blev valgt på grundlag af filteret...
    Loop
   
    'Funktionen returnerer antal filer der er kopieret...
End Function
Avatar billede fdata Forsker
07. januar 2007 - 17:36 #4
Du skal ikke sætte "X=" foran. Bare fyr Shell af.
Har testet
  Shell "cmd /c copy C:\sti1\f78887.abc C:\sti2\f78887.xml"
med samme sti og filnavne - og den fungerer perfekt. Mystisk.
Avatar billede oz1aiv Nybegynder
07. januar 2007 - 23:11 #5
Har fundet fejlen. Den fil jeg forsøgte at kopiere var "skjult" !##??! - dvs. dos ikke kan se den.

Det virker - pyh ha - jeg troede lige, at jeg ved at tungnem.

Jeg deler pointene, fordi I begge virkelig har forsøgt at hjælpe. Håber, at det er ok.

Peter
PS: Jeg vender nok snart tilbage med andre problemer.
Avatar billede fdata Forsker
08. januar 2007 - 22:39 #6
Helt ok. Tak for point ;o)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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