• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Werkbook afsluiten en ander werkbook openen

Status
Niet open voor verdere reacties.

Figaro75

Gebruiker
Lid geworden
12 dec 2011
Berichten
91
Heren en dames,

Ik heb het forum al doorzocht en ook wat dingen uit geprobeerd maar ik kom er niet uit.

Net als voorgaande jaren zijn wij in 2015 weer gestart met een nieuwe weekstaat.
Als iemand zijn weekstaat invult en afsluit moet er de vraag komen of hij ook nog zijn declaratieformulier (of kilometerlijst etc.) wil invullen.
Bij ja, zou Excel het huidige bestand moeten afsluiten en het nieuwe bestand opstarten.
In 2014 en Office 2010 had ik daar een macro voor geschreven maar die krijg ik nu met office 2013 (en ook 2010) niet meer aan de praat.
Volgens mij heeft hij het wel gedaan maar ik maakte er zelf geen gebruik van.
Het was voor onze buitenmedewerker.

Hij opent het bestand maar dan ben ik wel heel de menustructuur van Excel (2013) kwijt en hij sluit het voorgaande bestand niet af.
Bij Office 2010 behoudt hij in ieder geval de menustructuur (knoppenbalk, afsluitknop etc.).
Hieronder de door mij geschreven macro.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
Sheets("Controle").Range("D2").Value = 1
    
    If Not Me.Saved Then
        msg = "Wil je de wijzigingen opslaan in "
        msg = msg & Me.Name & "?"
        Ans = MsgBox(msg, vbQuestion + vbYesNoCancel)
        Select Case Ans
            Case vbYes
                 Sheets("Controle").Range("D2").Value = 1
                 'StopCatchPaste
                 Application.CellDragAndDrop = True
                 Me.Save
                 Melding = MsgBox("Wil je nu ook het declaratieformulier invullen?", vbYesNo + vbExclamation, "Afsluiten...")
                 If Melding = vbYes Then
                 Workbooks.Open Filename:="C:\Temp\Declaratie 2015\Declaratiestaat intern.xlsx"
                 End If
            
            Case vbNo
                Sheets("Controle").Range("D2").Value = 1
                'StopCatchPaste
                Application.CellDragAndDrop = True
                Melding = MsgBox("Wil je nu ook het declaratieformulier invullen?", vbYesNo + vbExclamation, "Afsluiten...")
                If Melding = vbYes Then
                 Workbooks.Open Filename:="C:\Temp\Declaratie 2015\Declaratiestaat intern.xlsx"
                End If
                Me.Saved = True
            
            Case vbCancel
                Cancel = True
                Exit Sub
        End Select
    End If
End Sub

Wie kan mij hiermee helpen want ik kom er na een dag stoeien niet uit.
Ik heb een voorbeeldbestand toegevoegd.
Bekijk bijlage Uren 2015 - Sjabloon.xlsm
Bekijk bijlage Declaratiestaat intern.xlsx
 
En dit heb je zelf gemaakt?

Het openen van je eerste bestand geeft een foutmelding.
Code:
Sheets("Controle").Range("D10").FormulaLocal = "=som(D8-1)"

Hierdoor blijven tabjes verborgen en beveiligd wat het geheel niet leesbaar maakt. Verder heb je code staan in modules en bladmodules die elkaar in de weg kunnen zitten.

Code:
If Not Me.Saved Then
lijkt mij iets uit een formulier maar die kan ik in het bestand niet vinden.

Dus graag even een correct voorbeeldje.
 
Ja, dit heb ik zelf gemaakt.

Mijn bestand geeft geen foutmelding maar deze kan veroorzaakt worden als je binnen 10 seconden het bestand weer probeert af te sluiten.
In het originele bestand wordt er bij de eerste keer opstarten de gebruiker verplicht om het bestand als xlsm bestand op te slaan.
Bij de volgende keer opstarten wordt de controle berekening aangepast omdat hij anders steeds opnieuw wil dat je het bestand opslaat.

Maar om een lang verhaal kort te maken heb ik nu een leeg blad met enkel de afsluitmacro erin.

Me.saved is gewoon standaard VBA

http://msdn.microsoft.com/en-us/library/office/ff194765(v=office.15).aspx

Aangepast 'leeg' bestand
Bekijk bijlage Uren 2015 - Sjabloon.xlsm

Dus bij het afsluiten 'ziet' Excel dat het bestand nog niet is opgeslagen en krijg ik de vraag of ik dit wil doen.
Deze vraag wil ik ook !! Ik wil niet dat hij automatisch opslaat.
Vervolgens krijg ik (of ik nu ja of nee kies) de vraag of ik een ander bestand wil openen.
Bij Nee sluit hij netjes af.
Maar bij ja opent hij het gevraagde bestand maar dan mis ik heel het excel menu.
En het andere bestand blijft open en moet ik nogmaals afsluiten.
 
Dat heb ik hier even getest met je "lege" bestand en zie ik inderdaad ook gebeuren maar het gekke is dat dat niet constant is. De ene keer gebeurd het wel en de andere keer gaat het gewoon goed. Ik ben er niet achter gekomen wat de oorzaak ervan is maar het lijkt dus niet een probleem in de code te zijn.
 
Met Excel 2010 start hij het 2e bestand goed op maar sluit hij niet het eerste bestand.
Met Excel 2013 start hij het 2e bestand op zonder alle menu's en sluit hij het eerste bestand ook niet af.

Lijkt net of hij bij 2013 het 2e bestand fullscreen opstart, zoals Rudi het bij post #3 vermeld.
http://www.helpmij.nl/forum/showthr...-excell-openen-fullscreen-en-op-begin-positie

Maar hoe krijg ik Excel zover dat hij in ieder geval het eerste bestand afsluit?
Edit hoe ipv hij
 
Laatst bewerkt:
Ik heb Office 2013 en er gebeurt wat ik zei in #4.
 
Bedoel je dat bij jou het 2e bestand wel wordt geopend EN het eerste bestand wordt gesloten?

Want momenteel werkt bij mij het zowel bij 2010 als 2013 niet.
 
Zoals ik al zei. De ene keer gaat het goed en de andere keer niet. Er zit ook geen regelmaat in. Geen idee waarom dat zo gaat :(
 
@edmoor in ieder geval bedankt voor het uitproberen.
Lijkt net of excel zo snel het tweede bestand opstart dat er geen tijd is om het restant van de macro af te draaien.

blijft 'vaag' waarom ik bij 2010 wel het excel menu behoud en bij 2013 (3 verschillende computers) niet.
Het afsluiten van het eerste bestand lukt bij mij nergens. (zowel op het werk niet als hier thuis).

Misschien dat iemand anders iets opmerkelijks in de code ziet of een toevoeging kan maken?

Ben er al 2 dagen mee bezig en ik kom niet veel verder.
 
Zoals ik al zei. De ene keer gaat het goed en de andere keer niet. Er zit ook geen regelmaat in. Geen idee waarom dat zo gaat :(
Probeer dit eens:

Code:
If Melding = vbYes Then
      Workbooks.Open Filename:="C:\Temp\Declaratie 2015\Declaratiestaat intern.xlsx"
Else
      Application.Quit
End If
 
Het afsluiten bij Nee werkte al dus de code Else Application.Quit voegt helaas niets toe aan de code.
En in principe wil ik dat hij bij het openen van het declaratie bestand alleen de urenstaat afsluit.
Stel dat er nog andere excel bestanden open staan hoeft hij deze bestanden niet af te sluiten.

Dus hij moet wel het Workbook sluiten maar niet altijd Excel (als er nog andere bestanden open staan)
 
Excel 2013

Ik heb op verschillende plekken al geprobeerd om het eerste bestand af te sluiten na het openen van het 2e bestand maar niets lukt.

Als ik de code handhaaf zoals hij is dan opent hij het 2e bestand zonder excel menu en sluit het 1e bestand niet af.
Als ik na het openen

Code:
Workbooks("Uren 2015 - Sjabloon.xlsm").Close
of
Workbooks("Uren 2015 - Sjabloon.xlsm").Close savechanges:=False
of
ActiveWorkbook.Close

ergens plaats begint de macro weer van voor af aan, dus weer de vraag of ik wil opslaan etc.
Wie helpt mij verder?
 
Ik heb momenteel de code als volgt aangepast en dan werkt het zoals bedoeld ECHTER onder 1 specifieke voorwaarde: er MOET een ander excel bestand open staan.
Als dat niet zo is wordt geheel excel afgesloten :evil:

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
                
    Sheets("2").Range("A1").Value = 1
    
    If Not Me.Saved Then
        msg = "Wil je de wijzigingen opslaan in "
        msg = msg & Me.Name & "?"
        Ans = MsgBox(msg, vbQuestion + vbYesNoCancel)
        Select Case Ans
            Case vbYes
                Application.CellDragAndDrop = True
                Me.Save
                 Melding = MsgBox("Wil je nu ook het declaratieformulier invullen?", vbYesNo + vbExclamation, "Afsluiten...")
                 If Melding = vbYes Then
                 Workbooks.Open Filename:="C:\Temp\Declaratiestaat intern.xlsx"
                 End If
                
                 Windows("Uren 2015 - Sjabloon.xlsm").Activate
                 Me.Saved = True
            
            Case vbNo
                Application.CellDragAndDrop = True
                Melding = MsgBox("Wil je nu ook het declaratieformulier invullen?", vbYesNo + vbExclamation, "Afsluiten...")
                If Melding = vbYes Then
                 Workbooks.Open Filename:="C:\Temp\Declaratiestaat intern.xlsx"
                End If
                
                Windows("Uren 2015 - Sjabloon.xlsm").Activate
                Me.Saved = True
            
            Case vbCancel
                Cancel = True
                Exit Sub
        End Select
    End If
End Sub

Ik heb geen ideeën meer, ik hoop dat iemand met Excel 2013 en meer VBA kennis dan mij dit voor mij kan oplossen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan