VBA EXCEL bestand maken/-overschrijven

Status
Niet open voor verdere reacties.

franzeman

Gebruiker
Lid geworden
2 sep 2006
Berichten
98
Beste VBA-ers,

Ik genereer vanuit een Excel werkboek mbv een Auto_Close macro een nieuw Excel-bestand, genaamd: helpmij.xls.
Tot zover geen probleem, maar:
- Als dit bestand al bestaat, dan wil ik dat het overschreven wordt door het nieuwe gelijknamige bestand zonder boodschappen of vragen op het scherm, en
- als ditzelfde bestand 'helpmij.xls', om welke reden dan ook, geopend is, wil ik dat het alsnog zonder vragen gesloten wordt en alsnog wordt overschreven door het nieuwe bestand.

Ik heb al een stukje code, maar het werkt niet goed:
Set fs = Application.FileSearch
With fs
.LookIn = "C:\Mijn documenten\"
.Filename = "helpmij.xls"
If .FoundFiles.Count > 0 Then
If Workbook.Open Then
Workbook.Close
End If
Kill "helpmij.xls" 'werkt niet
' Object.DeleteFile "helpmij.xls" 'werkt ook niet
End If
End With

'voeg nieuw bestand 'hallo' toe
Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
"C:\Mijn documenten\helpmij.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

'etc.

Graag jullie hulp en groetjes van Franzeman :confused:
 
Beste VBA-ers,

Ik genereer vanuit een Excel werkboek mbv een Auto_Close macro een nieuw Excel-bestand, genaamd: helpmij.xls.
Tot zover geen probleem, maar:
- Als dit bestand al bestaat, dan wil ik dat het overschreven wordt door het nieuwe gelijknamige bestand zonder boodschappen of vragen op het scherm, en
- als ditzelfde bestand 'helpmij.xls', om welke reden dan ook, geopend is, wil ik dat het alsnog zonder vragen gesloten wordt en alsnog wordt overschreven door het nieuwe bestand.

Ik heb al een stukje code, maar het werkt niet goed:
Set fs = Application.FileSearch
With fs
.LookIn = "C:\Mijn documenten\"
.Filename = "helpmij.xls"
If .FoundFiles.Count > 0 Then
If Workbook.Open Then
Workbook.Close
End If
Kill "helpmij.xls" 'werkt niet
' Object.DeleteFile "helpmij.xls" 'werkt ook niet
End If
End With

'voeg nieuw bestand 'hallo' toe
Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
"C:\Mijn documenten\helpmij.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

'etc.

Graag jullie hulp en groetjes van Franzeman :confused:

Om bepaalde waarschuwingen uit te zetten, kun je het volgende commando geven:
Application.DisplayAlerts = False

Vergeet niet het weer aan te zetten vanaf het moment dat je de meldingen wel weer wilt zien:
Application.DisplayAlerts = true
 
Om bepaalde waarschuwingen uit te zetten, kun je het volgende commando geven:
Application.DisplayAlerts = False

Vergeet niet het weer aan te zetten vanaf het moment dat je de meldingen wel weer wilt zien:
Application.DisplayAlerts = true

'------------------------------------------------------------------------------------------------------------------------------
...dan krijg ik bij het volgende codegedeelte alsnog een foutmelding 1004 waarin ik er op gewezen wordt dat het 'hallo'-bestand reeds geopend is en of ik dat maar eerst maar wil afsluiten!

'voeg nieuw bestand 'hallo' toe
Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
"C:\Mijn documenten\helpmij.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

Als ik vooraf meld: On Error Resume Next, dan werkt het.

Maar met alle dank voor het meedenken: het verdient qua programmeren niet de schoonheidsprijs. Toch?

Groetjes van franzeman :confused:
 
Dag Franzeman,

Voeg toe voordat er een nieuw bestand wordt aangemaakt.

With CreateObject("Scripting.FileSystemObject")
If .FileExists(Pad & "HelpMij.xls") Then .DeleteFile Pad & "HelpMij.xls"
End With

Succes,

Axel.
 
Dag Franzeman,

Voeg toe voordat er een nieuw bestand wordt aangemaakt.

With CreateObject("Scripting.FileSystemObject")
If .FileExists(Pad & "HelpMij.xls") Then .DeleteFile Pad & "HelpMij.xls"
End With

Succes,

Axel.


Sorry, ik krijg het niet aan de praat.
Als ik jouw code in klop met kleine letters, dan ziet het er als volgt uit:

With CreateObject("scripting.filesystemobject")
If .fileexists("C:\Mijn documenten") & "HelpMij.xls" Then
.deletefile ("C:\Mijn documenten") & "HelpMij.xls"
End If 'heb ik er zelf maar even bijgevoegd
End With

Vele beginletters in de code zouden dan automatisch hoofdletters moeten worden. Toch?
En als HelpMij.xls reeds geopend is, dan worden er extra lege mappen aangemaakt...

Dus ik ben er nog niet uit.

Groetjes van Franzeman
 
Ik denk dat je een "\" mist.
Je refereert naar "C:\Mijn documenten" en direct daarna naar "Helpmij.xls"
Daartussen zal een "\" moeten staan.
Maak er eens "C:\Mijn documenten\" van.

groet,
Dave.
 
Ik denk dat je een "\" mist.
Je refereert naar "C:\Mijn documenten" en direct daarna naar "Helpmij.xls"
Daartussen zal een "\" moeten staan.
Maak er eens "C:\Mijn documenten\" van.

groet,
Dave.


Krijg het niet voor mekaar; de code is niet goed.

Franzeman
 
Om een bestand te verwijderen gebruik je deze code:
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(Pad & "\helpmij.xls") Then
objFSO.DeleteFile (Pad & "\helpmij.xls")
End If


groet,
Dave.
 
Om een bestand te verwijderen gebruik je deze code:



groet,
Dave.

Sorry Dave,
Maar als ik de hieronder staande code letterlijk in geef met kleine letters, dan blijft fileexists en deletefile hetzelfde als ik naar de volgende regel ga. Je mag toch verwachten, dat het resp. FileExists en DeleteFile wordt? Dus denk ik dat de code niet correct.

Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists("C:\Mijn documenten" & "\HelpMij.xls") Then
objFSO.DeleteFile ("C:\Mijn documenten" & "\HelpMij.xls")
End If

Groetjes van Franzeman
 
Okay.
Ik heb 2 xls sheetjes in een RAR file geplaatst.
Ik hoop dat je RAR kan uitpakken.

Zet deze twee xls sheetjes in je C:\ (dus in de root!).
Kopieer eerst even "VerwijderMe.xls" zodat je kan oefenen ;) en open daarna Macro.xls.
Zorg dat je macro's mag uitvoeren.
Ik heb in de sheet aangegeven wat je moet doen (op [Ctrl]-[a] klikken).
Kijk nu in C:\ en zie dat VerwijderMe.xls er niet meer is.
Hernoem nu "Copy van VerwijderMe.xls" naar VerwijderMe.xls en je kan het nogmaals proberen.

groet,
Dave.
 

Bijlagen

En mocht je geen RAR hebben, dan hierbij nog de ZIP variant!
 

Bijlagen

En mocht je geen RAR hebben, dan hierbij nog de ZIP variant!

Dank je wel voor de moeite.
Heb helaas niet meer gelegenheid om te VBA-en. Ga het weekend verder en houd je (jullie) op de hoogte.

Groetjes van Franzeman
 
Dag Franzeman,

Kijk eens in het menu Extra - Verwijzingen of Microsoft Run Time wel is ingeschakeld. Zo niet, zoek deze library op en vink hem aan. Dat is om CreateObject("Scripting.FileSystemObject") te kunnen gebruiken.

Overigens is Kill alleen maar te gebruiken als het te 'killën bestand bestaat.

Succes,

Axel.
 
Code:
On Error Resume Next
Kill ...

Dankjewel Axel en Wigi voor het meedenken.
Ik heb nu vierkante ogen van het programmeren (of wat daar voor door gaat) voor vandaag. Met het weekend ga ik verder en houd ik jullie op de hoogte.
Nogmaals: dankjewel voor het meedenken.

Met vriendelijke groet,
Franzeman
 
Dankjewel Axel en Wigi voor het meedenken.
Ik heb nu vierkante ogen van het programmeren (of wat daar voor door gaat) voor vandaag. Met het weekend ga ik verder en houd ik jullie op de hoogte.
Nogmaals: dankjewel voor het meedenken.

Met vriendelijke groet,
Franzeman

Hallo Axel en Wigi,

Het functioneert nu zoals ik wil. De truc was natuurlijk onder meer het inschakelen van de Microsoft Office Runtime (Extra -Vewijzingen). Was ik nooit opgekomen!

Als ik er ooit nog eens achter kom hoe ik een reeds geopend Word of Excel bestand vanuit een ander geopend Excel bestand zonder foutmeldingen kan afsluiten ben ik helemaal gelukkig! :D

Heren bedankt en groetjes van

Franzeman
 
Dag Franzeman,

Fijn dat het nu werkt.

Een bestand van uit een ander bestand sluiten? Documents("TeSluitenBestand").Close

Succes,

Axel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan