none
Access 2003 Formular öffnen VBA Dialog - aber nicht Popup - oder Code anhalten nach öffnen

    Frage

  • Hallo ich durchlaufe eine tabelle und je nach ergebniss öffne ich ein formular

      'Sind Nachrichten für den Sachbearbeiter da
      Dim IFS As Recordset
      Set IFS = CurrentDb.OpenRecordset("SELECT tblAdressen_InfoFuerSachbearbeiter.* FROM tblAdressen_InfoFuerSachbearbeiter WHERE tblAdressen_InfoFuerSachbearbeiter.Adresse Is Null AND tblAdressen_InfoFuerSachbearbeiter.SachbearbeiterID=" & SBAID, dbOpenDynaset)
        Do Until IFS.EOF
          DoCmd.OpenForm "frmAB_InfoFuerSachbearbeiter", , , "ID =" & IFS!ID, , acDialog
          IFS.MoveNext
        Loop
      IFS.Close
      Set IFS = Nothing
    
    

    nur möchte ich nicht das dieses dann PopUp geöffnet wird weil es sonst einen rahmen bekommt und über der obersten Access leiste liegt

    kann ich die ausfürung von Code irgendwie sinnvoll anhalten? also ohne eine schleife zu bauen

    Donnerstag, 1. September 2011 05:57

Antworten

  • MCDPone wrote:

    Hallo ich durchlaufe eine tabelle und je nach ergebniss öffne ich ein formular

     'Sind Nachrichten für den Sachbearbeiter da
     Dim IFS As Recordset
     Set IFS = CurrentDb.OpenRecordset("SELECT
       tblAdressen_InfoFuerSachbearbeiter.* FROM
         tblAdressen_InfoFuerSachbearbeiter WHERE
         tblAdressen_InfoFuerSachbearbeiter.Adresse Is Null AND
       tblAdressen_InfoFuerSachbearbeiter.SachbearbeiterID=" & SBAID,
     dbOpenDynaset) Do Until IFS.EOF DoCmd.OpenForm
     "frmAB_InfoFuerSachbearbeiter", , , "ID =" & IFS!ID, , acDialog
    IFS.MoveNext Loop IFS.Close Set IFS = Nothing

    nur möchte ich nicht das dieses dann PopUp geöffnet wird weil es sonst
    einen rahmen bekommt und über der obersten Access leiste liegt

    kann ich die ausfürung von Code irgendwie sinnvoll anhalten? also ohne
    eine schleife zu bauen

    Die übliche Methode, den Code anzuhalten ist in der FAQ 6.9 Code anhalten für Dialog (http://www.donkarl.com?FAQ6.9) beschrieben. Diese läuft aber eben über den Formular Dialog.
    Die einzige mir bekannte Alternative ist, eine Schleife zu bauen, welche prüft, ob das Formular geladen ist und falls ja, dann eben ein DoEvent() auszuführen, damit Access nicht blockiert wird. Ich habe bisher noch keine Probleme damit gehabt.

    Also etwa so:

    ..
    DoCmd.OpenForm "frmAB_InfoFuerSachbearbeiter", , , "ID =" & IFS!ID
    While SysCmd(acSysCmdGetObjectState, acForm, "frmAB_InfoFuerSachbearbeiter")
     > 0 Then
     DoEvents()
    Wend
    ..

    Alternativ dazu kannst Du

    DoCmd.OpenForm "frmAB_InfoFuerSachbearbeiter", , , "ID =" & IFS!ID
    While CurrentProject.AllForms("frmAB_InfoFuerSachbearbeiter").IsLoaded > 0 Then
     DoEvents()
    Wend

    machen.

    Gruss
    Henry

    • Als Antwort markiert MCDPone Donnerstag, 1. September 2011 10:12
    Donnerstag, 1. September 2011 06:17

Alle Antworten

  • MCDPone wrote:

    Hallo ich durchlaufe eine tabelle und je nach ergebniss öffne ich ein formular

     'Sind Nachrichten für den Sachbearbeiter da
     Dim IFS As Recordset
     Set IFS = CurrentDb.OpenRecordset("SELECT
       tblAdressen_InfoFuerSachbearbeiter.* FROM
         tblAdressen_InfoFuerSachbearbeiter WHERE
         tblAdressen_InfoFuerSachbearbeiter.Adresse Is Null AND
       tblAdressen_InfoFuerSachbearbeiter.SachbearbeiterID=" & SBAID,
     dbOpenDynaset) Do Until IFS.EOF DoCmd.OpenForm
     "frmAB_InfoFuerSachbearbeiter", , , "ID =" & IFS!ID, , acDialog
    IFS.MoveNext Loop IFS.Close Set IFS = Nothing

    nur möchte ich nicht das dieses dann PopUp geöffnet wird weil es sonst
    einen rahmen bekommt und über der obersten Access leiste liegt

    kann ich die ausfürung von Code irgendwie sinnvoll anhalten? also ohne
    eine schleife zu bauen

    Die übliche Methode, den Code anzuhalten ist in der FAQ 6.9 Code anhalten für Dialog (http://www.donkarl.com?FAQ6.9) beschrieben. Diese läuft aber eben über den Formular Dialog.
    Die einzige mir bekannte Alternative ist, eine Schleife zu bauen, welche prüft, ob das Formular geladen ist und falls ja, dann eben ein DoEvent() auszuführen, damit Access nicht blockiert wird. Ich habe bisher noch keine Probleme damit gehabt.

    Also etwa so:

    ..
    DoCmd.OpenForm "frmAB_InfoFuerSachbearbeiter", , , "ID =" & IFS!ID
    While SysCmd(acSysCmdGetObjectState, acForm, "frmAB_InfoFuerSachbearbeiter")
     > 0 Then
     DoEvents()
    Wend
    ..

    Alternativ dazu kannst Du

    DoCmd.OpenForm "frmAB_InfoFuerSachbearbeiter", , , "ID =" & IFS!ID
    While CurrentProject.AllForms("frmAB_InfoFuerSachbearbeiter").IsLoaded > 0 Then
     DoEvents()
    Wend

    machen.

    Gruss
    Henry

    • Als Antwort markiert MCDPone Donnerstag, 1. September 2011 10:12
    Donnerstag, 1. September 2011 06:17
  • OK - DoEvents - klar - DANKE - funktioniert einwandfrei
    Donnerstag, 1. September 2011 10:12