Avatar billede swamboo Seniormester
28. januar 2024 - 22:50 Der er 8 kommentarer og
1 løsning

Kill er død

Hvorfor virker denne KILL ikke?
KillFile = "Plan.PDF"



    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & "\fortrolig")
    For Each oFile In oFolder.Files
        If Right(oFile, Len(KillFile)) = KillFile Then
          ' MsgBox oFile
            Kill "" & oFile & ""
        End If
    Next oFile
Avatar billede erikjacobsen Ekspert
29. januar 2024 - 08:56 #1
Det burde være alt rigeligt at skrive

          Kill  oFile

Ellers - hvad mener du med "virker ikke"?
Avatar billede swamboo Seniormester
29. januar 2024 - 16:00 #2
Hejsa.

Med virker ikke mener jeg at filen ikke bliver slette :-)

Hvis jeg kun skriver Kill oFile så får jeg fejlen:
ByRef argument type mismatch.
Avatar billede swamboo Seniormester
29. januar 2024 - 16:06 #3
Og det er ret underligt: Hvis jeg sætter MsgBox oFile til, så kan jeg se den bare står og popper op med den samme MsgBox fil igen og igen...
Jeg kan bare ikke finde ud af hvorfor, og hvad jeg har skrevet forkert...
Avatar billede erikjacobsen Ekspert
29. januar 2024 - 16:42 #4
Din oFile er et objekt, og kill kræver en streng. Det kunne jeg måske godt have set...

Men sådan et objekt har en metode, der giver dig filnavnet, uden at du skal lege med "-ere og &-ere. Prøv lige:

  Kill oFile.name
Avatar billede Dan Elgaard Ekspert
31. januar 2024 - 08:53 #5
Prøv med:

For Each oFile In oFolder.Files
    If Right(oFile.Name, Len(KillFile)) = KillFile Then Kill oFile.Name
Next oFile

For en mere 'robust' kode kan du skrive:

For Each oFile In oFolder.Files
    If LCase$(Right(oFile.Name, Len(KillFile))) = LCase$(KillFile) Then Kill oFile.Name
Next oFile

På den måde behøver du ikke bekymre dig om store og små bogstaver i fil navnet.
Avatar billede swamboo Seniormester
05. februar 2024 - 20:25 #6
Jeg forstår INGEN TING!!!!

Hvis koden hedder:
On Error GoTo 0

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & "\fortrolig2")

    For Each oFile In oFolder.Files
        If LCase$(Right(oFile.Name, Len(KillFile))) = LCase$(KillFile) Then
            MsgBox oFile
        End If
    Next oFile
-så får jeg en fin msgbox op med den præcise fil jeg gerne vil slette.

Hvis jeg skriver
On Error GoTo 0

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & "\fortrolig2")

    For Each oFile In oFolder.Files
        If LCase$(Right(oFile.Name, Len(KillFile))) = LCase$(KillFile) Then
            MsgBox oFile
            Kill oFile.Name
        End If
    Next oFile
- så får jeg igen og igen en msgbox med navnet på den fil jeg gerne vil slette.
Hvad er det der gør at den starter på for each igen og igen, istedet for bare at slette den s**** fil...??? 😁😁
Avatar billede swamboo Seniormester
05. februar 2024 - 21:01 #7
EJ - GLEM DET - JEG HAR VIST SOVET I TIMEN.

Jeg har lige opdaget at jeg - meget usmart - har kaldt den private sub for KILL - så hver gang jeg ville slette noget aktiverede den bare sub'en igen...

UNDSKYLD!! 🤪🙃
Nu tester jeg jeres forslag, og vender tilbage...
Avatar billede erikjacobsen Ekspert
05. februar 2024 - 21:02 #8
Prøv

  For Each oFile In oFolder.Files
        If LCase$(Right(oFile.Name, Len(KillFile))) = LCase$(KillFile) Then
            MsgBox oFile
            Kill oFile.Name
            Exit For
        End If
    Next oFile
Avatar billede swamboo Seniormester
05. februar 2024 - 21:19 #9
Det fungerer MEN der skal kun stå Kill oFile  (Altså uden .name)

1000 tak for al jeres hjælp - og undskyld jeg selv gjorde kodningen sværere end nødvendigt... 🤣🤣
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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