none
mehrere Datensätze im UFO markieren per VBA

    Frage

  • Hallo Leute,

    in einem UFO habe ich über ein Checkbox mehrere Datensätze (zusammenhängend) markiert, damit ich Änderungen über das Hauptformular durchführen kann.

    Nun möchte ich nach allen Änderungen wieder den Focus auf das UFO setzen und alle Datensätze die checkbox=ja haben wieder markieren.

    Wie mache ich das?

    Hier mein bisheriger Ansatz. Mir fehlt nur noch die Markierung.

    Private Sub cmdEdit_Click() Dim i As Long Dim F As Form Dim RS As Recordset Dim sNewValue As Variant Set F = Me!frmRechnungen.Form Set RS = CurrentDb.OpenRecordset("SELECT tblRechnungen.* FROM tblRechnungen WHERE (((tblRechnungen.chkEdit)=True));", dbOpenDynaset) RS.MoveLast RS.MoveFirst Do While RS.EOF = False Select Case Rahmen3 Case 3 If chkErhöhung = True Then sNewValue = Text16.Value + i Else sNewValue = Text16.Value End If Case Else sNewValue = Text16.Value End Select With RS .Edit .Fields(Rahmen3.Value - 1) = sNewValue .Update .MoveNext End With i = i + 1 Loop F.Recalc Dim iFirst As Long Dim iLast As Long Set RS = F.RecordsetClone For i = 1 To RS.RecordCount If RS.Fields(5) = True Then If iFirst = 0 Then iFirst = i End If iLast = i ElseIf RS.Fields(5) = False And iFirst > 0 And iLast > 0 Then Exit For

    End If RS.MoveNext Next Me!frmRechnungen.SetFocus

    'erster Datensatz
    DoCmd.GoToRecord , , acGoTo, iFirst RunCommand acCmdSelectRecord

    'letzer Datensatz DoCmd.GoToRecord , , acGoTo, iLast RunCommand acCmdSelectRecord End Sub


    Vielen Dank im voraus.

    Gruß Ahmed

    Donnerstag, 12. Dezember 2013 07:51

Antworten

  • Hallo NG,

    heute Morgen am Frühstückstisch beim Kaffeetrinken kam mir die Lösung, und die ist so einfach.

    Dim F as Form
    Dim RS as Recordset
    Dim iFirst as Long
    Dim iLast As Long

    Set F = Me!frmRechnungen.Form
    Set RS = F.RecordsetClone RS.MoveFirst 'ersten Datensatz finden, der bearbeitet wurde RS.FindFirst ("chkEdit=true") iFirst = RS.AbsolutePosition + 1
    Do While RS.EOF = False iLast = iLast + 1 If RS!chkEdit = False Then 'da nur zusammenhängende DS markiert werden können '=> Aussprung an dieser Stelle Exit Do End If RS.MoveNext Loop 'Focus auf UFO setzen Me!frmRechnungen.SetFocus DoCmd.GoToRecord , , acGoTo, iFirst
    'Ganzen DS markieren RunCommand acCmdSelectRecord 'Im UFO einfach die Markierung erweitern Me!frmRechnungen.Form.SelHeight = iLast - 1


    Gruß Ahmed

    Freitag, 13. Dezember 2013 06:55

Alle Antworten

  • Am 12.12.2013 schrieb Ahmed Martens:

    in einem UFO habe ich über ein Checkbox mehrere Datensätze (zusammenhängend) markiert, damit ich Änderungen über das Hauptformular durchführen kann.

    Nun möchte ich nach allen Änderungen wieder den Focus auf das UFO setzen und alle Datensätze die checkbox=ja haben wieder markieren.

    Wie mache ich das?

    Evtl. hilft dir dieser Ansatz: 4.5 Gleicher Datensatz nach Requery
    http://www.donkarl.com?FAQ4.5


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Donnerstag, 12. Dezember 2013 17:19
  • Hallo Winfried,

    vielen Dank für die Info. Aber mein Problem ist nicht das Finden der Datensätze, sondern die Selection des Bereiches. Ich meine die Selection über den Datensatzmarkierer.

    Ich mache folgendes:

    1. Es werden im UFO mehrere Datensätze markiert und alle markierten DS erhalten eine Checkbox=True
    2. Im Hauptformular wird über ein Button alle markierten DS (Checkbox=True) abgeändert.
    3. Anschließend möchte ich wieder in das UFO springen und alle DS mit Checkbox=True wieder markieren.

    Den ersten und den letzten DS kann ich über die Checkbox ermitteln. Aber wie selektiere ich diese mit VBA?

    Ich springe immer nur auf den ersten DS.

    Gruß Ahmed

    Donnerstag, 12. Dezember 2013 18:26
  • Hallo NG,

    heute Morgen am Frühstückstisch beim Kaffeetrinken kam mir die Lösung, und die ist so einfach.

    Dim F as Form
    Dim RS as Recordset
    Dim iFirst as Long
    Dim iLast As Long

    Set F = Me!frmRechnungen.Form
    Set RS = F.RecordsetClone RS.MoveFirst 'ersten Datensatz finden, der bearbeitet wurde RS.FindFirst ("chkEdit=true") iFirst = RS.AbsolutePosition + 1
    Do While RS.EOF = False iLast = iLast + 1 If RS!chkEdit = False Then 'da nur zusammenhängende DS markiert werden können '=> Aussprung an dieser Stelle Exit Do End If RS.MoveNext Loop 'Focus auf UFO setzen Me!frmRechnungen.SetFocus DoCmd.GoToRecord , , acGoTo, iFirst
    'Ganzen DS markieren RunCommand acCmdSelectRecord 'Im UFO einfach die Markierung erweitern Me!frmRechnungen.Form.SelHeight = iLast - 1


    Gruß Ahmed

    Freitag, 13. Dezember 2013 06:55