Auto_Open-macro die checkt op reeds geopende MS Excel-applicatie

Status
Niet open voor verdere reacties.

pkempenaars

Gebruiker
Lid geworden
21 mrt 2011
Berichten
8
Ik ben op zoek (krijg niet hetgeen gevonden via Google en op dit forum) naar een stukje code die ik in de Auto_Open-macro plaats en checkt of MS Excel (dus de applicatie) reeds geopend is en mij een melding geeft (msgbox) dat ik eerst die applicatie dien te sluiten (iets in de zin van "Er is al een MS Excelbestand geopend; sluit eerst dit bestand om verder te kunnen gaan!")

Dit moet volgens mij een redelijk simpel stukje code zijn, echter kom ik alleen maar geavanceerde code tegen.

Waarom? Omdat mijn bestand zoveel matrixformules, SOM ALS-functies en subtotalen bevat dat ik de volgende code al in de opstartmacro heb staan:

Code:
Sub Aut_Berekenen()
'Aanzetten
With Application
.Calculation = xlManual
.MaxChange = 0.001
End With
'Uitzetten
With Application
.Calculation = xlAutomatic
.MaxChange = 0.001
End With
ActiveWorkbook.PrecisionAsDisplayed = False
End Sub

Deze code zorgt voor het inschakelen van handmatig berekenen van de applicatie, alleen werkt dus niet wanneer de applicatie via een ander MS Excelbestand reeds geopend is. Indien er al een bestand is geopend, loopt het zaakje vast!

Alvast dank!
 
Ik begrijp het eigenlijk niet goed. Moet er gecheckt worden of het BESTAND ('Er is al een MS Excelbestand geopend') of de APPLICATIE ('dus de applicatie') al geopend is?
 
Er moet gecheckt worden of de applicatie MS Excel al draait (in de meeste gevallen in het 'normale kantoorleven' is er dan ook een bestand geopend) en ik wil hem de melding geven dat er nog een bestand openstaat, dat klinkt wat 'normaler' dan:
"Er staat nog een MS Excelapplicatie open".

Hopelijk kun je me aan de simpele code helpen!
 
Laat dit zaakje eens openen in Excel:

Code:
Sub f()

    MsgBox Workbooks.Count

End Sub

Of:

Code:
Sub f2()

    For i = 1 To Workbooks.Count
        MsgBox Workbooks(i).Name
    Next

End Sub
 
Dit werkt niet... Heb deze code in de Auto_Open-macro geplaatst, echter begint MS Excel al met het berekenen van het werkblad (wat niet de bedoeling is, nu wordt 'cellen berekenen' niet op handmatig gezet doordat de applicatie reeds geopend is) voordat hij de msgbox toont.

Daarnaast is de melding niet dwingend; er mag niet verder gegaan worden met het openen van dit bestand.

Hopelijk snap je wat ik bedoel!
 
Werk als volgt:

- zet de code in een andere file, bvb. Personal.xls of Personal.xlsb (Excel 2007/2010)
- die code bevat het zetten op manueel, en vervolgens het openen van de file die je nodig hebt
- gebruik geen code in de Auto_Open sectie
- klaar

Wigi
 
Dit gaat denk ik niet werken; heb nu in de macro Persnlk.xls (heb MS Excel 2003) gezet:

Code:
Sub BijOpenen()
'Aanzetten
With Application
.Calculation = xlManual
.MaxChange = 0.001
End With

For i = 1 To Workbooks.Count
        MsgBox Workbooks(i).Name
Next

'Uitzetten
With Application
.Calculation = xlAutomatic
.MaxChange = 0.001
End With
ActiveWorkbook.PrecisionAsDisplayed = False


End Sub

Hij doet nu helemaal niets, heb de andere macro gedeactiveerd met " ' "-jes...
Het handmatig berekenen moet louter ingeschakeld worden voor de specifieke werkmap waarin ik bovenstaande codes wil oproepen. De code voor handmatig berekenen wordt alleen geactiveerd wanneer je de applicatie MS Excel initieel opstart.

Daarnaast moet de melding dwingend zijn en geen melding die je met <OK> verder kunt overrulen.

Gaat dit lukken denk je?
 
Laatst bewerkt:
Ik heb het probleem niet helemaal gevolgd, maar volgens mij heb je de aanwijzing van Wim niet helemaal begrepen. Volgens mij stelt hij voor om een werkboek te maken en vanuit dit werkboek het werkboek te openen wat de calculation manual nodig heeft.

ruwe code:

Code:
sub test()
With Application
.Calculation = xlManual
.MaxChange = 0.001
End With

Workbooks.Open "DE MOEILIJKE FILE.XLS"

end sub

Overigens was de overige code van Wim om te testen hoeveel andere files open zijn, zodat er actie op kan worden ondernomen.

Ik vraag me ook af waar je de code nu hebt staan in je workbooks?

indien ik dit gebruik:

Code:
Private Sub Workbook_Open()

Application.Calculation = xlCalculationManual

End Sub

wordt bij mij netjes de calculatie op manual gezet, ook al is er een andere excel file open.
 
Ik zou je willen vragen om toch even naar mijn informatiebehoefte te kijken, alvorens je reageert....

1.) Ik heb 1 grote, geavanceerde rapportagetool gebouwd en louter voor dat bestand moet manuele calculatie ingeschakeld worden. Dus voor geen enkel ander bestand moet manuele calculatie ingeschakeld worden de Workbook_Open-variant valt dan dus af.

2.) Daarnaast wil ik dat MS Excel bij openenen van dit bestand een dwingende melding geeft aangaande het feit dat er nog een ander MS Excelbestand openstaat. Dus geen informatieve melding, want dan ben je al te laat indien je die wegklikt met <OK>!

Heb je hier een oplossing voor?
 
Mogelijk begrijp ik het inderdaad niet helemaal, maar indien ik mijn code in een bestand stop wordt dit uitgevoerd. dus indien je workbook_open in je grote file gebruikt zou calculation manual afgedwongen moeten worden.

Het is een beetje een kip&ei probleem. Indien je hebt een macro wil gebruiken in excel moet deze zich bevinden in een soort schil OF in de file die de situatie wil afdwingen.

De enige andere mogelijkheid is een externe stap. je kunt bijvoorbeeld een aparte instance van excel afdwingen door op te starten met een klein C#/.net programmaatje. Je file draait dan in een afgeschermde instance van excel zonder de noodzaak om andere files te sluiten.

Indien je geen workbook_open event wil gebruiken kun je NOOIT voorkomen dat iemand op een andere manier de file opent. Mogelijk kun je een password op je file aanbrengen en dan een schil gebruiken om het af te dwingen. Zonder extra handgreep is 2) niet mogelijk, behalve dat je de grote file meteen weer sluit met een waarschuwing (er is nog een andere file open sluit die eerst, deze file sluit nu zichzelf)
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan