Failo ištrynimas VBA

VBA naudojimas, kaip galiu:

  • patikrinkite, ar failas egzistuoja, ir jei taip,
  • pašalinti?
97
16 сент. nustatyti inglesp 16 rugsėjis 2008-09-16 02:08 '08 at 2:08 2008-09-16 02:08
@ 9 atsakymai

1.) Patikrinkite čia . Tai daugiausia:

 Function FileExists(ByVal FileToTest As String) As Boolean FileExists = (Dir(FileToTest) <> "") End Function 

Aš paliksiu jums išsiaiškinti, ar reikalingas klaidų apdorojimas, tačiau jie susiję su klaidų apdorojimu, kuriuos apsvarstysiu:

  • Patikrinkite, ar praėjo tuščia eilutė.
  • Patikrinkite, ar failo pavadinime / kelyje neteisinga eilutė su simboliais

2.) Kaip ištrinti failą. Pažvelkite į tai. Dažniausiai naudokite „Kill“ komandą, bet jums reikia leisti prieigą prie failo kaip tik skaitomą. Čia yra jūsų funkcija:

 Sub DeleteFile(ByVal FileToDelete As String) If FileExists(FileToDelete) Then 'See above ' First remove readonly attribute, if set SetAttr FileToDelete, vbNormal ' Then delete the file Kill FileToDelete End If End Sub 

Vėlgi, aš paliksiu jums klaidų tvarkymą, ir tai dar kartą manau:

  • Ar jis turėtų elgtis kitaip katalogui ar failui? Ar vartotojas turėtų aiškiai nurodyti, kad nori ištrinti katalogą?

  • Ar norite, kad kodas automatiškai atkurtų tik skaitymo atributą, arba vartotojas turėjo nurodyti tam tikrą nuorodą, kad yra nustatytas tik skaitomas atributas?


Redaguoti: pažymėkite šį atsakymą kaip bendruomenės wiki, kad kiekvienas galėtų jį pakeisti, jei reikia.

136
16 сент. Atsakymą pateikė Onorio Catenacci 16 rugsėjis 2008-09-16 02:12 '08 at 2:12 2008-09-16 02:12

Gali būti ir alternatyvus Brettsky atsakymo kodavimo būdas, su kuriuo bendrai sutinku

 With New FileSystemObject If .FileExists(yourFilePath) Then .DeleteFile yourFilepath End If End With 
border=0

Tas pats poveikis, bet mažiau (faktiškai) nėra kintamųjų deklaracijų.

„FileSystemObject“ yra tikrai naudinga priemonė ir turėtumėte rūpintis draugiškumu. Be kitų dalykų, rašant tekstinius failus, kartais tai gali būti greitesnė nei alternatyva, kuri gali nustebinti kai kuriuos žmones. (Mano patirtis, bent jau YMMV).

43
16 сент. Atsakymas, kurį pateikė Mike Woodhouse , rugsėjo 16 d 2008-09-16 14:03 '08 at 2:03 pm 2008-09-16 14:03

Tikriausiai mokėsiu už tai, bet kas yra egzistavimo vieta, jei tik ketinate ją pašalinti? Vienas iš mano pagrindinių naminių gyvūnėlių žudikų yra programa, kurioje rodomas dialogo >

 On Error Resume Next aFile = "c:\file_to_delete.txt" Kill aFile On Error Goto 0 return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted. 

Jei failo nėra, misija baigta!

10
16 сент. JohnFx atsakymas, pateiktas rugsėjo 16 d 2008-09-16 02:34 '08 at 2:34 nuo 2008-09-16 02:34

Jei norite patikrinti failo buvimą, galite naudoti šiuos veiksmus: ir tada ištrinti.

 Dim aFile As String aFile = "c:\file_to_delete.txt" If Len(Dir$(aFile)) > 0 Then Kill aFile End If 
9
16 сент. Rugsėjo 16 d. Atsakymą pateikė Rich Adams . 2008-09-16 02:12 '08 at 2:12 2008-09-16 02:12

VB dažniausiai Dir suranda failų katalogą. Jei jis nėra tuščias, jis yra, tada naudokite Kill , kad atsikratytumėte failo.

 test = Dir(Filename) If Not test = "" Then Kill (Filename) End If 
6
16 сент. Leo Moore atsakymas 2008-09-16 02:11 '08 at 2:11 am 2008-09-16 02:11

nuoroda į „Scripting.Runtime“ biblioteką ir tada naudokite „FileSystemObject“:

 Dim fso as New FileSystemObject, aFile as File if (fso.FileExists("PathToFile")) then aFile = fso.GetFile("PathToFile") aFile.Delete End if 
4
16 сент. Atsakymas pateikiamas Brettski 16 sep . 2008-09-16 02:40 '08 at 2:40 2008-09-16 02:40

Štai patarimas: ar pakartotinai naudojate failo pavadinimą arba planuojate ką nors padaryti, kurį reikia nedelsiant pašalinti?

Ne?

Jūs galite priversti VBA paleisti DEL komandą "C: TEMP scratchpad.txt" / F iš komandinės eilutės asinchroniškai naudodami VBA.Shell:

Shell "DEL" ir chr (34) ir strPath ir chr (34) ir "/ F", vbHide

Pažymėkite dvigubas kabutes (ASCII simbolis 34) aplink failo pavadinimą: manau, kad turite tinklo kelią arba ilgą failo pavadinimą, kuriame yra tarpų.

Jei tai didelis failas, arba jei tai yra lėtas tinklo ryšys, tai yra būdas eiti ir pamiršti. Žinoma, jūs niekada nežinote, ar jis veikia, ar ne; tačiau tuoj pat atnaujinsite savo „VBA“, ir yra kartų, kai tai geriau nei laukti tinklo.

3
02 окт. Nigel Heffernan atsakymas 02 sp 2014-10-02 20:09 '14 at 20:09 2014-10-02 20:09

Galite nustatyti nuorodą į „Scripting.Runtime“ biblioteką ir tada naudoti „FileSystemObject“. Jis turi „DeleteFile“ metodą ir „FileExists“ metodą.

Žr. MSDN straipsnį čia .

2
16 сент. atsakymą pateikė Darrel Miller 16 sep. 2008-09-16 02:12 '08 at 2:12 2008-09-16 02:12

2 kodų eilutės VBA ..

 Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FileExists(strPath) Then FSO.DeleteFile (""  strPath  "") 
0
20 марта '18 в 2:56 2018-03-20 02:56 atsakymas duotas Zach Minot kovo 20 d. 18 val. 2:56 2018-03-20 02:56

Kiti klausimai apie žymes „ arba Užduoti klausimą