Just nu i M3-nätverket
Gå till innehåll

Spara och stäng


Luffaren

Rekommendera Poster

Hej, har ett makro som ska spara och stänga alla inaktiva arbetsböcker, det har fungerat i flera år, men har slutat att fungera. Det som händer är att den inaktiva boken aktiveras, en fråga kommer om man vill spara men den sparas och stängs inte.

Kod

Sub StangAllaInaktiva()

Dim Wb As Workbook

Dim AWb As String

AWb = ActiveWorkbook.Name

'SaveAll

For Each Wb In Workbooks

If Wb.Name <> AWb Then

Wb.Close savechanges:=True

End If

Next Wb

Application.StatusBar = "Alla arbetsböcker har stängts"

End Sub

 

Länk till kommentar
Dela på andra webbplatser

Det som händer är att den inaktiva boken aktiveras, en fråga kommer om man vill spara men den sparas och stängs inte.

Märkligt. Eftersom du har angett

Wb.Close SaveChanges:=True

så skall den faktiskt inte fråga!!!

Testa att ta bort SaveChanges och skriv bara:

Wb.Close

 

Vad kör du för excelvariant. Det verkar fungera som du tänkt dig på min Excel 2000 i alla fall.

 

Med risk för att låta dum; Var har du sparat makrot? Om det ligger i t.ex Egna.xls så kommer ju arbetsboken med makrot att stängas innan makrot är färdigt. Du kanske skall utöka villkoret till:

If (Wb.Name <> AWb) And (Wb.Name <> ThisWorkbook.Name) Then

 

 

För att den sista raden:

Application.StatusBar = "Alla arbetsböcker har stängts"

Garanterat skall fungera så bör du lägga till en rad:

 

Application.DisplayStatusBar = True

Application.StatusBar = "Alla arbetsböcker har stängts"

Probelemet är att du aldrig ger tillbaks kontrollen till excel. Dvs det kommer att stå "Alla arbetsböcker har stängts" oavsett vad du gör.

 

Personligen föredrar jag att slänga upp en Message-box

msgbox("Alla arbetsböcker har stängts")

Statusbaren passar bättre när man vill visa att ett arbete pågår om man har en "jobbig" makrokörning. Då kan man lägga in kod som "ger tillbaks" statusfältet till excel när körningen är färdig. Typ:

Application.StatusBar = False

 

Länk till kommentar
Dela på andra webbplatser

Tack för ditt svar, jag kör Excel 2000, jag har faktiskt funderat på om det är programmet som inte fungerar som det ska.

Jag ska testa dina förslag.

UN

 

Länk till kommentar
Dela på andra webbplatser

Hej, har testat dina förslag, men inte lyckats,..

det fungerade hos dig,. men hade du gjort ändringar i de öppna arbetsböckerna då?

Makrot fungerar hos mig, såtillvida att om jag har flera böcker öppna utan ändringar i så stängs dem ned.

Om det är ändringar i någon bok så frågas om ändringar ska sparas, trycker yes, men inget händer, mystiskt.

 

//UN

 

Länk till kommentar
Dela på andra webbplatser

Sitter med Excel XP just nu.

Testade ditt orginalmakro. Om jag bara ser till att makrot ligger i samma arbetsbok som är "aktuellt" så stänger den ner alla andra snyggt och prydligt.

 

Gamla dokumen med ändringar sparas utan fråga.

Gamla dokumen utan ändringar stängs bara ner.

Nya dokument som har ändrats får upp en fråga och de sparas

Nya dokument som inte ändrats stängs bara ner

 

Ok, det är nu officiellt mysko.

 

Hmmm. Kan det vara sökvägarna som spökar? Kolla VAR filerna sparas.

Nej. De sparas där de låg även om jag öppnar filer i olika mappar.

 

Har du kopierat filerna från en cd? De kanske är skrivskyddade (ok, det där var långsökt)

 

Ähhhh. Det har var inte lätt.

Verkyg->alternativ->spara verkar inte ha något mystiskt kryss som kan förklara det heller.

 

Baaah. Bara för att testa en helt ny vinkel. Vad händer om du ändrar syntax helt? Typ:

Wb.Close Filename:=Wb.Path & "\" & Wb.Name

(den här koden tillåter inte savechanges:=True för då hamnar alla nya dokument under din rotkatalog. och det är ju inte meningen)

 

Nej. Det enda jag kan komma på är att testa på någon annan dator eller att uppdatera din officeinstallation.

 

Du skulle även kunna testa Dennis gamla favorittrick, att registrera om Excel:

Stäng av Excel:

Start-Kör

Excel.exe /unregserver

 

Direkt följt av:

Start-Kör

Excel.exe /regserver

 

(eventuellt får du ange sökvägen till excels programfil)

Ähh, har slut på gissningar så du kan ju testa i alla fall.

 

 

Har Monshi eller någon annan en idé om ni råkar läsa det här?

 

[inlägget ändrat 2007-01-13 00:31:36 av MH2]

Länk till kommentar
Dela på andra webbplatser

Inga idéer annat än ta en väg runt Excel egna rutiner:

[color="#0000ff"]Sub[/color] StangAllaInaktiva()
[color="#0000ff"]Dim[/color] Wb As Workbook
[color="#0000ff"]Dim[/color] AWb As Workbook
[color="#0000ff"]Set[/color] AWb = ActiveWorkbook

[color="#006400"]'SaveAll[/color]
[color="#0000ff"]For[/color] [color="#0000ff"]Each[/color] Wb [color="#0000ff"]In[/color] [b]Application[/b].Workbooks
    [color="#0000ff"]If[/color] Wb.Name <> AWb.Name [color="#0000ff"]Then[/color]
        [color="#0000ff"]If[/color] [color="#0000ff"]Not[/color] Wb.Saved [color="#0000ff"]Then[/color]
            [color="#0000ff"]If[/color] Wb.Path = [GRÅ]""[/GRÅ] [color="#0000ff"]Then[/color]
                Wb.Activate
                Wb.[b]Application[/b].Dialogs(xlDialogSaveAs).Show
                AWb.Activate
            [color="#0000ff"]Else[/color]
                Wb.Save [color="#006400"]' savechanges:=True[/color]
            [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
        [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
        [color="#0000ff"]If[/color] Wb.Saved [color="#0000ff"]Then[/color]
            Wb.Close
        [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

    [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[color="#0000ff"]Next[/color] Wb
[b]Application[/b].StatusBar = [GRÅ]"Alla arbetsböcker har stängts"[/GRÅ]
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Dvs kontrollera om en bok är sparad eller ej.

Om aldrig sparad, dvs helt ny bok (Path = "") tas spara som dialogen upp.

Om boken sedan sparats, kollar om koden ovan lyckats spara den, stängs den annars får den vara kvar.

 

Kanske en On Error Resume Next sats ska vara på sin plats för att hantera eventuella fel vid sparandet av boken. Sedan ska du kanske köra en OnTime procedur som rensar statusfältet efter några sekunder. Bara för att snygga till det lite.

 

edit:

Aktiverar kodtaggar

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2007-01-13 13:49:01 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...