05. januar 2007 - 16:03Der 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")
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"
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
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.
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.