Oprettet ons. d. 01. september 2010 kl. 16:49:08

svla
svla (12.242 point. Point ude: 60)

Tjekke med VBA om mappe exsisterer.

Hej!

Jeg har et excelark med en hel masse VBA-kode, og denne kode slutter med og kopierer mit excelark, oprette et dokumentnavn  og herefter gemme det ned i en mappe som er oprettet dertil.

Spørgsmål 1:
Er der nogen som kan hjælpe med lidt kode som kan tjekke om den mappe som excelarket gemmes i er oprettet/eksisterer på computeren før arket gemmes.

Spørgsmål 2:
Hvis excelarket tidligere er gemt anmoder Excel automatisk om den tidligere gemte fil skal overskrives, og hvis der svares ja til dette bliver den overskrevet, men hvis der svares nej eller annuller melder VBA-fejl og den kopierede excelfil er nu på skærmen uden at blive gemt.
Er der nogen som f.eks har et forslag til en VBA-fejlbehandler som ved denne fejl kan slette det kopierede excelark.

Håber lige nogen kan hjælpe ??

Skrevet ons. d. 01. september 2010 kl. 17:00:46| #1

220661
220661 (55.223 point)
Jeg kører Xp pro her
Hvor mange mapper arbejder du i da?
Hvad med en gem som makro der henviser til en bestemt mappe efter nogle bestemte kriterier.

Skrevet ons. d. 01. september 2010 kl. 17:18:00| #2

svla
svla (12.242 point)
Den mappe hvor jeg har mit excelark med VBA-koden hedder f.eks. "Projekt", i denne mappe er der oprettet en undermappe f.eks. "Færdigt Projekt" og det er denne mappe som jeg gerne vil have at VBA-koden tjekker om den er oprettet.
Håber det gav lidt mening.

Skrevet ons. d. 01. september 2010 kl. 19:35:17| #3

anlu
anlu (8.670 point)
www.anlu.dk
Til dit spm. 1:

Public Function CheckFolderExists(fname As String) As Boolean
    Dim fs As Object
    Set fs = CreateObject("Scripting.FileSystemObject")
    CheckFolderExists = fs.FolderExists(fname)
End Function

Skrevet ons. d. 01. september 2010 kl. 21:11:25| #4

svla
svla (12.242 point)
Tak for dit forslag.
Jeg arbejder lige lidt med det, jeg skal lige finde ud af hvorledes din funktion skal bruges
Vender tilbage

Skrevet ons. d. 01. september 2010 kl. 22:01:10| #5

svla
svla (12.242 point)
Til anlu
Jeg kan ikke rigtig få det til og virke.

I min VBA-kode er der en string variabel med navnet sStiTilGem som indeholder stien til mappen J:\ ... \Færdigt Projekt, og det er den sti med mappenavnet "Færdigt Projekt som skal tjekkes om det existerer.
Kan du hjælpe mig på vej hvorledes jeg får din funktion til og virke?

Skrevet ons. d. 01. september 2010 kl. 22:38:41| #6

svla
svla (12.242 point)
Hej igen !

Har fået det til og virke, din funktion var bare perfekt, jeg fik det til og virke via denne IF:

If CheckFolderExists(sStiTilGem) = True Then
MsgBox ("Mappen er oprettet")
Else
MsgBox ("Mappe er ikke oprettet")
End If

Kan du hjælpe med Spørgsmål 2 ??

Skrevet tor. d. 02. september 2010 kl. 18:43:48| #7

anlu
anlu (8.670 point)
www.anlu.dk
Mht. spm. 2 har jeg nok behov for lidt ekstra info. Vil du gerne undgå at den spørger om filen skal overskrives, eller vil du kunne håndtere at man siger nej til det? Og hvad skal den så gøre, hvis man siger nej?
Du må også gerne lige angive den kode du bruger til at gemme filen med.

Skrevet tor. d. 02. september 2010 kl. 21:56:09| #8

svla
svla (12.242 point)
Hej
Jeg skal kort forklare hvad mit projekt går ud på.
Mit excelark henter en kommasepareret Txt-fil ind når det åbnes, Textfilen formateres og tilrettes, der kan via  en Userform slettes kolonner og byttes om på grupperede rækker, og sideopsætning tilrettes.
Til slut oprettes der ud fra celler på excelaket et dokumentnavn.
Arket kopieres og gemmes nu ned i en dertil opretttet mappe med det nye dokumentnavn, og lukkes herefter.
Hele processen kan nu gentages hvis det ønskes, og det er faktisk her det går galt når makroen gemmer det kopierede ark, og opdager at der lige er lagt et tidligere med samme dok.navn, så spørger excel om der skal overskrives, hvis der svares ja er det ok, men hvis der svares nej eller annuller så melder makroen fejl, og der kopierede ark som nu er på skærmen er ikke blevet lukket, og skal derfor slettes.

Herunder kan du lige se den sidste del af koden hvor det går
galt, og hvor der evt. skal vare en "fejlbehandler"

  If CheckFolderExists(sStiTilGem) = True Then
    'MsgBox ("Mappen er oprettet")
    sStiTilGem = txtStiTilGem
  Else
    'MsgBox ("Mappe er ikke oprettet")
    sStiTilGem = Application.ActiveWorkbook.Path & "\" & sDokNavn
  End If
 
  Application.ScreenUpdating = False

  Sheets("FormaterArk").Select
  Sheets("FormaterArk").Copy

  ActiveWorkbook.SaveAs Filename:=sStiTilGem & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

  Rem Det er lige her det går galt!!!!!!

  ActiveWindow.Close
  Range("A8").Select
 
  SletTilNy
 
  Application.ScreenUpdating = True
  End

Skrevet fre. d. 03. september 2010 kl. 19:41:20| #9

anlu
anlu (8.670 point)
www.anlu.dk
Tja, hermed et par forslag

Mulighed 1: Hvis du altid vil gemme filen uden at brugeren bliver spurgt om han/hun ønsker at overskrive kan du bruge Application.DisplayAlerts:

---- kode start
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=sStiTilGem & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True
---- kode slut

(Du kan overveje om du også vil lukke vinduet inden du sætter DisplayAlerts = True igen)

Mulighed 2: Hvis du gerne vil spørge brugeren og bare vil lukke vinduet i tilfælde af at "SaveAs"-fejler, hvilket jo typisk vil være når brugeren siger nej til at overskrive filen, er en mulig løsning at benytte "On Error Resume Next" - du skal så blot angive at filen ikke skal gemmes i ActiveWindow.Close

---- kode start
On Error Resume Next
ActiveWorkbook.SaveAs Filename:=sStiTilGem & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close SaveChanges:=false
---- kode slut

Ulempen er at hvis saveas fejler af en anden grund, bliver dette ikke håndteret. Hvis du ikke kan leve med det kræver det noget yderligere fejlhåndtering.

Skrevet fre. d. 03. september 2010 kl. 22:12:16| #10

svla
svla (12.242 point)
Tak for dit forslag.
Jeg vil gerne forsøge mig med begge forslag, idet mit projekt skal bredes ud til flere brugere.
Lige nu skal jeg noget privat hele week-enden, men jeg forsøger mig lidt frem hvis jeg kan få et par øjeblik ved PC'en, men ellers vil jeg vende tilbage igen mandag, måske før - undskyld.
Jeg  vil nok satse på forslag 2.
Vender tildage hurtigst muligt.

Skrevet man. d. 06. september 2010 kl. 13:31:33| #11

svla
svla (12.242 point)
Til anlu

Jeg fik ikke din kode i "Mulighed 2" til og virke, måske du kan hjælpe igen.
Jeg lægger lige hele koden, som starter med og og tjekke om gemmemappen existerer og herefter bliver arket kopieret og til slut gemt, og det er lige her fejlen opstår hvis arket har været gemt en gang før, så kommer feltet hvor man bliver spurgt om man vil overskrive den eksisterende fil, hvis man så svarer nej eller annuller opstår fejlen og linien  ActiveWorkbook.SaveAs Filename.......... bliver fejl(farvet gul)
Håber du lige kan hjælpe med hvorledes fejlen Kan/skal behandles
På forhånd tak

Private Sub cmdFortsæt_Click()

  sStiTilGem = Application.ActiveWorkbook.Path & "\" & sMappeNavn
 
  If CheckFolderExists(sStiTilGem) = True Then
    ''MsgBox ("Mappen er oprettet")
    sStiTilGem = txtStiTilGem
  Else
    ''MsgBox ("Mappe er ikke oprettet")
    sStiTilGem = Application.ActiveWorkbook.Path & "\" & sDokNavn
  End If
 
  Application.ScreenUpdating = False

  Sheets("FormaterArk").Select
  Sheets("FormaterArk").Copy

  ActiveWorkbook.SaveAs Filename:=sStiTilGem & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
 
  Range("A8").Select
 
  SletTilNy ' Sletter formateret ark og starter forfra med ny.
 
  Application.ScreenUpdating = True
  End
End Sub

Skrevet man. d. 06. september 2010 kl. 18:42:44| #12

anlu
anlu (8.670 point)
www.anlu.dk
Hvad sker der hvis du indsætter linjen "On Error Resume Next" før dit kald af ActiveWorkbook.SaveAs? Dvs. bare vælger at ignorere fejl i kaldet (og efterfølgende fejl i proceduren)?

Skrevet man. d. 06. september 2010 kl. 21:24:34| #13

svla
svla (12.242 point)
Hej det prøver jeg lige og vender tilbage, er lige på arbejde nu.

Skrevet man. d. 06. september 2010 kl. 23:12:53| #14

svla
svla (12.242 point)
Hej Igen
Som du skriver, så har jeg sat "On error Resume Next" ind før ActiveWorkbook.SaveAS....... og nu fungerer det tilfredsstillende, brugeren bliver nu spurgt en ekstra gang om han vil gemme, og det virker fint nok, ingen fejl længere.

Jeg har ikke tidligere beskæftiget mig med fejlbehandling, og satte din kode ind efter fejlen opstod, og derfor virkede det ikke.
Jeg må nok hellere få sat mig lidt mere ind i fejlbehandling og har fundet ud af at det jo kan gøres på flere måder, men lige nu klarer jeg mig fint med den måde det er blevet løst på.

Tak for hjælpen, selv om det trak lidt ud.
Point går til dig.

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Hjælp til formel rente/antal dage

Oprettet den 11. februar 2012 kl. 12.14
petert giver 30 point for svar | Giv et svar »

Problemløser, "HVIS" formel, eller andet til optimering?

Oprettet den 11. februar 2012 kl. 02.36
Olav123 giver 150 point for svar | Giv et svar »

Rullemenu kan ikke fjernes i excel

Oprettet den 10. februar 2012 kl. 22.12
concepo giver 30 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger