Net geopende applicatie sluit na end sub

Status
Niet open voor verdere reacties.

Piebepost

Gebruiker
Lid geworden
10 mrt 2010
Berichten
19
Beste Helpmij'ers,

Ik schaam mij altijd een beetje om jullie te moeten vragen. Met mijn beperkte kennis en ervaring ben ik namelijk nooit bemachtigd om een ander van oplossingen te voorzien. Helaas zit ik nu zo met mijn handen in het haar dat ik de drempel toch opgeklommen ben.

Ik wil eigenlijk iets heel simpels: vanuit Outlook een Access form openen. Ik gebruik daarvoor de volgende code:

Code:
Sub OpenAccess()
   
      
   Set oapp = CreateObject("Access.Application")
   oapp.Visible = True
   
   oapp.OpenCurrentDatabase "C:\JB-test\JB.accdb"
   
   oapp.DoCmd.OpenForm "bestellingen", , , , , acDialog
End Sub
Dit gaat prima tot de End Sub, daarna sluit Access. Ik wil Access open houden. Wat doe ik verkeerd? Ik heb op internet de oplossing niet kunnen vinden :(
 
Laatst bewerkt door een moderator:
Waar heb je de variabele oapp gedeclareerd?
 
Bedankt voor je reactie Edmoor. Ik heb niks gedeclareerd, zoals de code hierboven staat zo heb ik 'm. Hoe moet ik dat doen?
 
Standaard begint een project met de setting: Option Explicit
Dat betekend dat alle variabelen die je gebruikt gedeclareerd moeten zijn en dus een datatype hebben.
De variabele oapp is nu dus niet gedeclareerd en daarom "leeft" hij zolang je subroutine draait.
Het is dus logisch dat bij de End Sub, waar de locale variabelen worden vrijgegeven, Access gesloten wordt.

Declareer daarom de variabele bovenin je project, buiten de subroutines:
Dim oapp As Object

Access zal dan pas worden gesloten als je Outlook afsluit.

Je probleem heeft te maken met de scope, of het bereik van variabelen.
Lees dit eens:
http://support.microsoft.com/kb/141693/nl
 
Laatst bewerkt:
Als je Variabelen declareren niet afdwingt in de opties, met Option Explicit, dan kun je nog steeds prima programmeren. Code zal dan meestal wel werken, omdat het bronprogrammamma zelf de variabelen wel instelt. Gebruik je Option Explicit wèl, en declareer je de variabelen niet, dan zal de code überhaupt niet draaien. Maar dat was dus het probleem niet.
Met Set leg je een variabele vast, die wordt verwijderd als de procedure stopt. En dan ben je Access dus kwijt. Wellicht werkt het wèl als je oApp public maakt.
 
Dat stukje extra uitleg over Option Explicit had ik er inderdaad niet bij vermeld.
Zelf vind ik wel handig om aan te hebben staan, zodat de compiler controleert of de gebruikte variabelen wel zijn gedeclareerd.
Het voordeel als je zelf de variabelen declareert is dat je ze meteen van het juiste datatype kunt voorzien en dat kan in geheugen gebruik nogal schelen in een groot project.

Dank voor de extra info :thumb:
 
Bedankt voor uw reacties. De code is nu als volgt:

Code:
Sub OpenAccess()

   Dim oapp As Object
     
   Set oapp = CreateObject("Access.Application")
   oapp.Visible = True
   
   oapp.OpenCurrentDatabase "C:\persoanlik\troep\JB-test\JB.accdb"
   
   oapp.DoCmd.OpenForm "bestellingen", , , "Id = 5", , acDialog
End Sub

Helaas zonder het gewenste resultaat, Access sluit nog steeds na de End Sub :(

Ik heb het ook geprobeert met option explicit, ik krijg dan helaas de foutmelding "Ongeldig in procedure".
 
Laatst bewerkt door een moderator:
Die Dim staat nu nog steeds IN de subroutine en hij moet er buiten staan.
De Option Explicit is niet noodzakelijk maar moet, als je deze wilt gebruiken, ook buiten de routine staan. Het kan ook zijn dat je Public moet gebruiken in plaats van Dim.

Code:
Option Explicit
Dim oapp As Object

Sub OpenAccess()
    Set oapp = CreateObject("Access.Application")
    oapp.Visible = True

    oapp.OpenCurrentDatabase "C:\persoanlik\troep\JB-test\JB.accdb"
    oapp.DoCmd.OpenForm "bestellingen", , , "Id = 5", , acDialog
End Sub
 
Laatst bewerkt:
Fantastisch! Ik ben zo blij als een klein kind. Hartstikke bedankt!
 
Ok dan :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan