1 formulier voor bekijken en invoer

Status
Niet open voor verdere reacties.

Nico84

Gebruiker
Lid geworden
21 jul 2011
Berichten
191
Vanuit mijn doorlopend formulier debiteur overzicht kan ik de debiteurenkaart bekijken van de geselecteerde klant (via een knop)
of een nieuwe debiteur aanmaken door op de knop nieuwe debiteur te klikken.

De onderstaande code gebruik op het doorlopend formulier
Code:
Private Sub cmdOpen_Click()
Dim stOpenArgs As String

''Geef als openArgs B; en het huidige record (=Klantnr) mee. B staat voor bestaande debiteur.
    stOpenArgs = "B;" & Me.txtKlantnr

''Open de debiteuren kaart en sluit het huidige formulier
    DoCmd.OpenForm "frmDebiteurKaart", acNormal, , , , acWindowNormal, stOpenArgs
    DoCmd.Close acForm, Me.Form.Name
    
End Sub

Private Sub cmdNieuwedebiteur_Click()
Dim stOpenArgs As String

''Nieuwe debiteur aanmaken en geef als openArg N; mee. N staat voor nieuw.
    stOpenArgs = "N;"

''Open de debiteuren kaart en sluit het huidige formulier
    DoCmd.OpenForm "frmDebiteurKaart", acNormal, , , , acWindowNormal, stOpenArgs
    DoCmd.Close acForm, Me.Form.Name
End Sub

En deze code op de debiteurkaart
Code:
Private Sub Form_Open(Cancel As Integer)
Dim Args As Variant

''De OpenArg splitsen om zo te kunnen bepalen of het een Bestaande (B) of een nieuwe(N) debiteur is
Args = Split(Me.OpenArgs, ";")

''Bij een bestaande debiteur moet het klantnr geplaatst worden
''Er kunnen geen nieuwe records toegevoegd worden
If Not IsNull(Me.OpenArgs) Then
    If Args(0) = "B" Then
        Me.DataEntry = False
        Me.AllowAdditions = False
            With Me.RecordsetClone
                .FindFirst "Klantnr=" & Args(1)
                Me.Bookmark = .Bookmark
            End With
''Als het een nieuwe debiteur betreft dan moet de toevoegingen toestaan aan staan
''Nieuwe klantnr plaatsen in het txtveld Klantnr.
    ElseIf Args(0) = "N" Then
        Me.DataEntry = True
        Me.AllowAdditions = True
        Me.txtKlantnr = Nz(DMax("Klantnr", "tblDebiteur") + 1)
    End If
    
End If

Me.txtNaam.SetFocus
End Sub

Naar mijn idee is dit erg omslachtig.
Welke instellingen en code gebruik je om 1 formulier te gebruiken voor het bekijken en invoeren van gegevens?
 
Je kunt op deze manier werken, wat prima is, of je opent de formulieren gelijk in de juiste modus.
Code:
    DoCmd.OpenForm "frmDebiteurKaart", acNormal, , , acFormAdd, acWindowNormal, stOpenArgs
    DoCmd.OpenForm "frmDebiteurKaart", acNormal, , , acFormEdit, acWindowNormal, stOpenArgs
Je hebt nog wel een procedure nodig die al dan niet het record opzoekt, al kun je het formulier in de B-modus ook filteren, en dat kan dan weer vanaf het startformulier
 
Bedankt voor je reactie. Heb de code iets kunnen inkorten.

Voor een nieuwe debiteur gebruik ik. Wat je zegt formulier wordt gelijk in de goede modus gestart.
Code:
DoCmd.OpenForm "frmDebiteurKaart", acNormal, , , acFormAdd, acWindowNormal

Om een bestaande debiteur te bekijken gebruik ik op het overzicht
Code:
stOpenArgs = Me.txtKlantnr
DoCmd.OpenForm "frmDebiteurKaart", acNormal, , , , acWindowNormal, stOpenArgs

en op de debiteurkaart zet ik toevoegingen toestaan Nee en Gegevensinvoer Nee
Zo kan ik op de debiteurkaart ook door de records heen bladeren en kan er geen nieuw record aangemaakt worden.
Code:
Args = Me.OpenArgs
If Not IsNull(Me.OpenArgs) Then
        With Me.RecordsetClone
            .FindFirst "Klantnr=" & Args
            Me.Bookmark = .Bookmark
        End With
End If
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan