[ neptuncokg @ 16.08.2010. 13:08 ] @
Za kopiranje fajlova iz "udaljenog" foldera koristim VBA-funkciju "FileCopy". To lepo radi, ali problem se javlja kad korisnik pogresi pri odluci da preuzme fajl, tj. kad se "predomisli". U standardnom windows kopiranju, kad vec postoji fajl pod istim imenom pojavi se "pitalica":
"Would you like to replace the existing file", gde korisnik izborom NO moze da odustane od kopiranja. Kod FileCopy funkcije, pitalica se ne pojavljuje, vec se kopiranje bezuslovno izvrsi. To povremeno napravi problem. Pokusao sam da stavim "Application.DisplayAlerts = True", ali nema uticaja. Evo procedure:

Sub ARJ2010()
a = "Y:\2010\2010.ARJ" 'lokacija odakle se kopira fajl
b = "E:\2010\2010.ARJ" 'loakcija gde se kopira fajl - pod istim imenom
Application.DisplayAlerts = True 'nema uticaja
FileCopy a, b
End Sub

Da li uopste postoji mogucnost da se kopiranje na ovaj nacin ipak ogranici? Hvala unapred.
[ Jpeca @ 17.08.2010. 09:12 ] @
Ne znam da li postoji lakši način, ali je jedna mogućnost da ispitaš da li fajl već postoji pre nego što odradiš kopiranje i zavisno od toga prikažeš svoj dijalog za potvrdu. Rezultat dijaloga (šta je korisnik izabrao) koristiš da odrediš da li da se izvrši kopiranje ili ne.

Funkcija koja proverava da li fajl već postoji je dosta jednostavan i ja sam je preuzeo sa http://word.tips.net/Pages/T00...ermining_if_a_File_Exists.html

Code:
Function FileThere(FileName As String) As Boolean
    FileThere = (Dir(FileName) > "")
End Function


Sada to iskoristiš u svom kodu

Code:
Sub TestCopy()
Dim strSource As String, strDest As String
Dim Izbor As VbMsgBoxResult

strSource = "C:\Temp\Test1.zip" 'lokacija odakle se kopira fajl
strDest = "C:\Temp\Test2.zip"   'lokacija gde se kopira fajl

If FileThere(strDest) Then
   Izbor = MsgBox("Fajl " & strDest & " vec postoji.  Želite da ga obrišete?", vbOKCancel, "Potvrdi")
Else
   Izbor = vbOK
End If
If Izbor = vbOK Then
    FileCopy strSource, strDest
End If
End Sub
[ neptuncokg @ 17.08.2010. 16:00 ] @
Pokusacu da prilagodim svojoj proceduri. Hvala na odgovoru.Pozdrav
[ neptuncokg @ 22.08.2010. 19:56 ] @
Funkcija FileCopy odlicno funkcionise, a u mom slucaju posebno dobro, sa "pitalicom" o postojanju fajla koji se kopira. Iznenadjen sam cinjenicom da neki veci fajl, za cije kopiranje standardnom metodom Copy-Paste je potrebno npr. 10-ak sekundi, funkcija FileCopy to odradi za, recimo, 1 sekundu, ili manje (?!). Aforizam o Rembrantu, na kraju JPecinog posta me inspirisao na jos jedno pitanje iz oblasti komunikacije sa "udaljenim" fajlovima. Naime, ja u svojim aplikacijama stalno "komuniciram" sa bazama iz DOS-ovog knjigovodstvenog programa. Funkcijom FileCopy kopiram prethodno "ARJ"-ovan fajl iz nekog foldera (npr. sa "D:\2010.2010.arj") u rezervni folder na drugom disku (npr. "Y:\2010"). Klasicno arhivarivanje podataka. I tako nekoliko puta dnevno, iz preventivnih razloga. E, taj fajl koji kopiram (npr. 2010.arj) prethodno "spakujem", nekim arhiverom, a najcesce iz DOS-a, dos-ovom komandom: " arj a -r -jt -wc: D:\2010\2010 *.dbf *.ntx ". Ovom komandom "spakujem" sve dbf i ntx podatke iz foldera "2010" i svih njegovih pod-foldera u jedan fajl - 2010.arj. Tek onda primenim FileCopy. Moje pitanje, koje je mozda (?) pretenciozno za VBA bi bilo: Mogu li pre FileCopy da dodam neku proceduru koja bi odradila ovo moje "pakovanje" dalekog foldera "D:\2010" u fajl "2010.arj" ? Time bih znacajno smanjio setanje iz excela u DOS i obratno. Pozdrav.
[ Jpeca @ 23.08.2010. 09:09 ] @
Da pozoveš dos komande iz VBA omogućava ti komanda shell. U tvom slučaju arhiviranje bi trebalo dase odradi sa
shell "arj a -r -jt -wc: D:\2010\2010 *.dbf *.ntx"

Kao parametar za Shell može da se zada tip prozora (vbNormalFocus, vbHide ...). Možeš i da vratiš vrednost i ispitaš da li je pakovanje uspešno završeno. Pogledaj primer u helpu
[ neptuncokg @ 23.08.2010. 11:53 ] @
Funkcija Shell je pravo otkrovenje za mene. Kao i FileCopy, i ona neverovatno brzo izvrsava zadate operacije. Samo nesto da pojasnimo. Da bi se obavilo pakovanje nekog foldera, potrebno je prvo da se folder izabere. Ja sam to uradio sa Dir:
Dir ("e:\2010\BAZA\") 'otvaranje foldera koji se pakuje, pa onda pakovanje
Shell "arj a baza" 'pakovanje foldera u fajl "baza.arj"
E sad, novoformiran fajl "baza.arj" se automatski smesta u My Documents !!! Pokusam sa:
Sheel "arj a baza: D:\ARHIVA" - da bi se smestio u "D:\ARHIVA", ali bezuspesno. Onda se ne smesti nigde, jednostavno ga nema nigde na hardu. Nasuprot tome, iz prvobitnog primera - Shell "arj a -r -jt -wc: D:\2010\2010 *.dbf *.ntx" - novi fajl "2010.arj" je uredno smesten tamo gde treba, u "D:\2010".
U helpu nisam nasao primer za proveru uspesnosti procedure. Ima samo primer za pozivanje windowsovog kalkulatora. Hvala i pozdrav.