Formulier over formulier

Status
Niet open voor verdere reacties.

remmie63

Gebruiker
Lid geworden
4 jan 2011
Berichten
396
Ik gebruik een werkschermformulier om mijn db te besturen. Als ik via de knoppen van het werkscherm een tweede formulier open wil ik dat het werkscherm automatisch naar de achtergrond gaat. Hoe maak ik dit?
 
Zet in een willekeurige module (geen formuliermodule) deze functie:
Code:
Function fIsLoaded(ByVal strFormName As String) As Integer
'Returns a 0 if form is not open or a -1 if Open
    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then
        If Forms(strFormName).CurrentView <> 0 Then fIsLoaded = True
    End If
End Function

Het formulier met de knop krijgt dan deze toevoeging:
Code:
    Me.Form.Visible = False
    DoCmd.OpenForm "Formulier2"
    Etc.

En op het tweede formulier zet je deze code:
Code:
Private Sub Form_Close()
    If fIsLoaded("Formulier1") Then
        Forms!Formulier1.Form.Visible = True
    Else
        DoCmd.OpenForm "Formulier1"
    End If
End Sub
 
Als het formulier(werkscherm) met de knop niet aan een recordbron gekoppeld is gaat het dan ook?
Hij geeft hier nl de foutmelding: "een variabele is niet gedefinieerd". Dit m.b.t. het formulier "Werkscherm".
 
Laatst bewerkt:
Yep. Maar dan moet je natuurlijk op een andere manier je tweede formulier triggeren.
 
Geen idee hoe je het nu doet. Je geeft zelf aan dat je knoppen gebruikt, dus daarom gaf ik ook een oplossing voor een knop.
Als ik via de knoppen van het werkscherm een tweede formulier open ...
Nu ga je het dus niet doen met knoppen?
 
Dat begrijp ik. En nee ik blijf graag bij knoppen. Het is een soort schakelbord om de db te bedienen. Maar mijn vraag wat er gebeurt als het formulier niet aan een recordbron gekoppeld heeft blijft dan staan!
 
Maar mijn vraag wat er gebeurt als het formulier niet aan een recordbron gekoppeld heeft blijft dan staan!
Is dat a) een vraag en b) Nederlands? Ik heb mijn twijfels :)
(On)zichtbaar maken van een formulier heeft niks te maken met of een formulier aan een recordbron is gekoppeld of niet. Het verbergt het formulier, verder niks. De Else tak in de functie kan weg als je het formulier niet specifiek wilt openen als het niet is geopend. Een situatie die optreedt als je formulier2 zelfstandig opent, zonder dus formulier1 te gebruiken. In dat geval kun je met de ELSE het formulier alsnog openen.
 
De correcte vraag:
Maar mijn vraag "wat er gebeurt als het formulier niet aan een recordbron gekoppeld is" blijft dan staan!

Dan begrijp ik de foutmelding niet: "een variabele is niet gedefinieerd" en dit m.b.t. het formulier werkscherm.
 
Zonder voorbeeldje (of tenminste de gebruikte code) kan ik natuurlijk niet zien wat er fout gaat. Al heb ik een flauw vermoeden: je hebt de code letterlijk gekopieerd, en je hebt geen formulier dat Formulier1 (of Formulier2) heet. Namen moet je uiteraard wel aanpassen in dat geval.
 
:P Laat ik daar nou aan gedacht hebben!

Maar ik neem aan dat dit stukje code niet compleet is?
Code:
Me.Form.Visible = False
    DoCmd.OpenForm "Planten T+K"

Het zal toch beginnen met "Private Sub.....en eindigen met End Sub. De vraag is dan alleen wat komt er na "Private Sub..."
 
Je hebt al een knop die het formulier opent. de Visible regel zet je op exact de plek die je hierboven aangeeft. De Close functie zet je op het formulier <Planten T+K> en de functie in een willekeurige module. Eventueel zonder de Else als je het startformulier niet wilt openen als het al niet geopend was.
 
Laatst bewerkt:
Ja, het werkt! Het werkscherm wordt nu geminimaliseerd.

Alleen bij afsluiten van <Planten T+K> krijg ik een foutmelding:
Fout 2450 tijdens uitvoering:
kan het formulier Form_werkscherm niet vinden waarnaar wordt verwezen in een macro-expressie of in Visual basic-programmacode.

En op de onderstreepte regel in de programma code:
foutopsporing ontbreekt

Code:
Private Sub Form_Close()
    If fIsLoaded("Werkscherm") Then
        [U]Forms!Werkscherm.Form.Visible = True[/U]    Else
        DoCmd.OpenForm "Werkscherm"
    End If
End Sub.
 
Als deze code letterlijk is overgenomen, dan klopt het wel. De Else moet op een eigen regel staan.
 
Dan is dat het probleem niet :) In de code zit helemaal geen foutafvanging, dus die kan niet ontbreken. Kan hij net zo goed zeggen dat je vandaag nog geen tientje hebt overgemaakt naar Greenpeace (tenzij je dat natuurlijk wel gedaan hebt). Of je met ergens zelf nog een On Error hebben ingebouwd, die niet bestaat, dat kan natuurlijk weer wel.
 
Hij werkt nu zonder foutmelding! Spellingsfoutje :evil:
Dank weer voor de moeite.

Groet, Remco
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan