Hej. Lägg följande i en modul: Smart att kunna använda funktionen överallt. Du gör inget fel. Det är Microsofts fel. Just anrop från kontrollers egenskaper, t.ex. ControlSource eller händelser, är lite speciella i Access. Då Access använder datorns decimalseparator i kontrollers egenskaper. Används ;-tecknet som parameterseparator: Kom på att jag skulle behöva anropa detta innifrån koden eftersom jag gör en del andra kontroller först innan formuläret ska öppnas. Hur gör man då med anropet? Du kan skriva: Gör jag gärna! Öppna formulär med filter
Ett formulär har ett rapportnr. Jag öppnar ett annat formulär med detta nummer. Det går jättebra. Men sedan vill jag kunna bläddra till ett annat rapportnummer. Som det ser ut just nu så kommer jag bara åt just det formulär som har det rätta rapportnumret och bläddringsknapparna fungerar inte.
stDocName = "frmInrapporteringA"
stLinkCriteria = "[RapportNr]=" & Me![TestRuta]
DoCmd.OpenForm stDocName, , , stLinkCriteria
EvaSv: Öppna formulär med filter
<code>
Public Function FindRecord(Form As Form, Criteria As String) As Boolean
Dim rs As DAO.Recordset
Set rs = Form.RecordsetClone
rs.FindFirst Criteria
If rs.NoMatch Then
MsgBox "Det gick inte att finna rapporten.", vbInformation
FindRecord = False
Else
Form.Bookmark = rs.Bookmark
FindRecord = True
End If
End Function
Public Function VisaRapport(RapportNr As Variant)
Const strDocName = "frmInrapporteringA"
On Error GoTo VisaRapport_Err
'Öppnar formulär
DoCmd.OpenForm strDocName
'Söker fram post
If Not IsNull(RapportNr) Then
FindRecord Forms(strDocName), "[RapportNr]=" & RapportNr
End If
VisaRapport_Exit:
Exit Function
VisaRapport_Err:
MsgBox Err.Description, vbCritical, Err.Source
Resume VisaRapport_Exit
End Function
</code>
Du behöver inte längre en händelseprocedur för knappen. Utan du kan ersätta [Händelseprocedur] med =VisaRapport([TestRuta]). Du kan dessutom återanvända funktionen från flera formulär.Sv: Öppna formulär med filter
Har försökt att skicka med formulärnamnet som en variabel men inte lyckats.
Har prövat på många sätt men får inte till syntaxen
Funktionen
Public Function VisaRapport(strDocName As String, RapportNr As Variant)
'Const strDocName = "frmInrapporteringA"
Anropet
=VisaRapport (frmInrapporteringA,[TestRuta])
=VisaRapport ("frmInrapporteringA",[TestRuta])
=VisaRapport (["frmInrapporteringA"],[TestRuta])
=VisaRapport ([("frmInrapporteringA")],[TestRuta])
=VisaRapport (("frmInrapporteringA"),[TestRuta])
evaSv:Öppna formulär med filter
Försök med:
<code>
=VisaRapport ("frmInrapporteringA";[TestRuta])
</code>Sv:Öppna formulär med filter
En funktion returnerar ju ett värde. Måste jag deklarera en variable för svaret. Eller ska jag göra om funktionen till en subprocedur? Det försökte jag göra men lyckades inte anropa proceduren.
evaSv: Öppna formulär med filter
<code>
VisaRapport "frmInrapporteringA", [TestRuta]
</code>
Eller:
<code>
Call VisaRapport("frmInrapporteringA", [TestRuta])
</code>
Om du inte är intreserad av returvärdet.Sv:Öppna formulär med filter
NU har jag en följdfråga.
Jag tar fram ett ärende i formulärA. Anropar formulärB med funktionen. Funkar jättebra. Men om ärendet nyss är skapat i formulärA så finns det inte i FormulärB ännu. Då vill jag skapa ett nytt ärende där det medskickade rapportnumret är ifyllt i en kontroll.
Jag gjorde då i funktionen vid rs.NoMatch följande kod
DoCmd.GoToRecord,,acNewrecord ´För att formulärB säkert ska vara vid en ny post.
Forms!FormulärB!RapportNr = Criteria 'För att fylla i kontrollen.
Det gick ju bra men när jag sedan går tillbaks till funktionen VisaRapport så hamnar jag i felmeddelandekoden med beskedet att fältet är för litet för de data som ska infogas. Det fattar jag ingenting av.
Känns som jag bara krånglar till det mer och mer.
Alltså:
Vad jag vill göra är:
Jag tar fram/skapar ett nytt ärende i ett formulärA. Jag anropar ett annat formulärB med rapportNr. Om ärendet finns i formulärB (i bakomliggande tabellen så klart) så ska det plockas fram. Men det ska gå att bläddra med bläddringspilarna till ett annat ärende. Om ärendet inte finns så ska FormulärB hamna på NewRecord och rapportNr ska fyllas i i en kontroll.
//eva b