acCmdCopy - acCmdPaste probleem

Status
Niet open voor verdere reacties.

JohanRVT

Gebruiker
Lid geworden
2 mrt 2011
Berichten
545
Hallo Groep, een probleem bij het dupliceren van een bestaande record uit een tabel "ziekte", in dit geval ziektes van personeelsleden, treedt op wanneer ik de onderstaande procedure gebruik om één record te kopiëren en diezelfde gegevens te gebruiken om één nieuwe periode te startten 1 dag later dan het verstrijken van dus de oude periode. Veel ziekteperioden worden nml gewoon verlengd en dat geeft rompslomp en tijdverlies om hetzelfde meerdere malen in te tikken.
Nu gebeurt het regelmatig dat er ipv één meerdere (en soms heel veel) records worden aangemaakt. Dit is natuurlijk frustrerend voor de gebruikers want ipv tijd te winnen verliezen ze nu tijd omdat ze de junk moeten verwijderen.
Zou dit kunnen komen doordat er, door onoordeelkundig gebruik, soms lege records (zonder ContractId dus die de ziekteperioden linkt aan een tabel "contracten") voorkomen?

Code:
Private Sub CmbDuplicate_Click()
On Error GoTo Err_CmbDuplicate_Click

If MsgBox("Bent U zeker de gegevens van deze afwezigheid met ID " & Me.TxtZiekteID.Value & "" & vbCrLf & _
          "te gebruiken om een nieuwe afwezigheidsperiode aan te maken met dezelfde gegevens," & vbCrLf & _
          "één dag later beginnend?", vbInformation + vbYesNo) = vbYes Then
     
    Me.TxtZiekteID.SetFocus
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdCopy
    DoCmd.RunCommand acCmdRecordsGoToNew
    DoCmd.RunCommand acCmdSelectRecord
    DoCmd.RunCommand acCmdPaste
    Me.KzlAfwezigheidID = ""
    Me.TxtPeriodestart = DateAdd("d", 1, TxtPeriodestop)
    Me.TxtPeriodestop = ""
    Me.LstAfwezigheidsperioden.Requery
    Me.TxtLstAfwezigheidsperioden.Requery
    Me.TxtPeriodestart.SetFocus
     
        
Else
    Exit Sub
End If

Exit_CmbDuplicate_Click:
    Exit Sub

Err_CmbDuplicate_Click:
    MsgBox Err.Description
    Resume Exit_CmbDuplicate_Click
    
End Sub
 
Waarom gebruik je niet de eigenschap DefaultValue? En waarom eerst RecordsGoToNew en dan SelectRecord? Je staat toch al op een nieuw record?

Code:
    Me.txtAantal.DefaultValue = Me.txtAantal
    Me.txtPeriodeStart.DefaultValue = DateAdd("d", 1, Me.TxtPeriodestop)
    ....  
    etc.
    DoCmd.RunCommand (acCmdRecordsGoToNew)
 
DefaultValue van een veld kan ik niet gebruiken in het formulier omdat die steeds verandert of zou je die ergens in je VBA gebruiken?
Ik heb er het volgende van gemaakt.(met dus eerst verwijderen van de lege records in de tabel sub ziekte)
En uitvinken van de 2° DoCmd.RunCommand acCmdSelectRecord regel leidt ertoe dat de focus niet kan verplaatst worden naar het TxtPeriodeStart veld (zie bijgevoegde printscreen)
Private Sub CmbDuplicate_Click()
On Error GoTo Err_CmbDuplicate_Click
Dim strsql As String

If MsgBox("Bent U zeker de gegevens van deze afwezigheid met ID " & Me.TxtZiekteID.Value & "" & vbCrLf & _
"te gebruiken om een nieuwe afwezigheidsperiode aan te maken met dezelfde gegevens," & vbCrLf & _
"één dag later beginnend?", vbInformation + vbYesNo) = vbYes Then
' records in de tabel sub ziekte verwijderen als ze niet gekoppeld zijn aan een personeelsnummer
strsql = "DELETE [sub ziekte].* " & vbCrLf & _
"FROM [sub ziekte] " & vbCrLf & _
"WHERE [sub ziekte].[Nummer ziekte] Is Null;"
DoCmd.RunSQL strsql

Me.TxtZiekteID.SetFocus
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.RunCommand acCmdRecordsGoToNew
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
Me.KzlAfwezigheidID = ""
Me.TxtPeriodestart = DateAdd("d", 1, TxtPeriodestop)
Me.TxtPeriodestop = ""
Me.LstAfwezigheidsperioden.Requery
Me.TxtLstAfwezigheidsperioden.Requery
Me.TxtPeriodestart.SetFocus


Else
MsgBox "Geannuleerd door de gebruiker!", vbInformation + vbOKOnly, "Bevestiging van annulatie!"

Exit Sub
End If

Exit_CmbDuplicate_Click:
Exit Sub

Err_CmbDuplicate_Click:
MsgBox Err.Description
Resume Exit_CmbDuplicate_Click

End Sub
 

Bijlagen

  • Focus_verplaatsen_fout.jpg
    Focus_verplaatsen_fout.jpg
    109,9 KB · Weergaven: 43
DefaultValue van een veld kan ik niet gebruiken in het formulier omdat die steeds verandert of zou je die ergens in je VBA gebruiken?
Dat is inderdaad het antwoord. DefaultValue is prima te gebruiken als het niet uitmaakt wat de standaardwaarde van een veld is. In feite misbruik je de standaardwaarde dan om de waarde van het laatste record te 'parkeren' zodat je bij het maken van een nieuw record gelijk de laatste waarden terugziet. Bij invullen van nieuwe waarden en een nieuw record aanmaken herhaalt het proces zich, zodat je dan ook de laatste waarden weer ingevuld krijgt.
Nogmaals: als er in een veld écht een standaardwaarde moet zijn, dan werkt dit natuurlijk niet (goed). Al kun je er dan ook nog wel voor zorgen dat de oorspronkelijke standaardwaarden in een (matrix) variabele worden opgeslagen, die je dan bij het sluiten van het formulier weer terugzet in de velden.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan