Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Formular nur anzeigen, aber trotzdem ein Feld ändern können

Begonnen von Duke634, Dezember 15, 2012, 17:08:49

⏪ vorheriges - nächstes ⏩

Duke634

Hallo,

ich öffne ein Formular "nur anzeigen", möchte aber, dass  das Feld Referenz(RG-Nr) wieder geändert werden kann.

Mein Ansatz war, dass ich das Feld wieder aktiviere und entsperre.

DoCmd.OpenForm "0700Buch02Lief", acViewNormal, , "[0700Kat] =  3", acFormReadOnly
Forms![0700Buch02Lief].SetFocus
Forms![0700Buch02Lief]![Bezeichnungsfeld8].Caption = "Eingangsrechnung anzeigen"
Forms![0700Buch02Lief]![Bezeichnungsfeld71].Caption = "Lieferant:"
Forms![0700Buch02Lief]![0700ERNr].Locked = False
Forms![0700Buch02Lief]![0700ERNr].Enabled = True
Forms![0700Buch02Lief].SetFocus
Forms![0700Buch02Lief]!Reg.Pages(0).Visible = False ' Positionen AR
Forms![0700Buch02Lief]!Reg.Pages(1).Visible = True ' Positonen ER mit Bestellung
Forms![0700Buch02Lief]!Reg.Pages(2).Visible = False ' Ablage
Forms![0700Buch02Lief]!Reg.Pages(3).Visible = True ' Buchung
Forms![0700Buch02Lief]![RG-Nr.].SetFocus

Funktioniert leider nicht.

Was mache ich falsch??

Gruß
Yoschi

bahasu

N'abend,

und warum nicht ein "beschreibbares" Formular und alle Felder bis auf das gewünschte schreibschützen?
So etwas ist auch per for each-Schleife machbar.

Harald
Servus

Duke634

Hallo,

ich habe gedacht, dass dies die einfachste Lösung ist.

Wie würde denn die Schleife aussehen, bzw. gibt es Beispiele, wie z. B. bei DonKarl ?

Gruß

Yoschi

bahasu

Servus

Duke634

Hallo,

es funktioniert leider nicht.

Mein Ansatz ist:

Dim ctl As Control
For Each ctl In Me.Controls
  If ctl = ctl![0700ERNr] Then
     ctl.Locked = False
   Else
      ctl.Locked = True
  End If
Next ctl

Laufzeitfehler 438:Objekt unterstützt diese Eigenschaft oder Methode nicht

Ist das die richtige Syntax oder wie funktioniert das??

Gruß

Yoschi

bahasu

#5
Hi

probier mal:
me.0700ERNr.setfocus

Dim ctl As Control

For Each ctl In Me.Controls
    If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
         ctl.Locked = ctl.Name <> "0700ERNr"
  End If
Next ctl

Eventuell sind beim ControlType noch weitere aufzuführen. Das dient dazu, die Bezeichnungsfelder zu umgehen.

Harald
Servus

Duke634

Hallo,
funktioniert perfekt.

DANKE

Habe jetzt das ganze in einem anderen Formular versucht umzusetzen. Das klappt aber nicht so perfekt. In dem neuen Formular gibt es noch ein Kontrollkästchen (JA/NEIN), dass sich nicht deaktivieren lässt. Den ControlType habe ich in der ACCESS-Hilfe als acCheckBox herausgesucht.

Der Code:
DoCmd.OpenForm "0741BkListeHF"
Forms![0741BkListeHF].SetFocus
Forms![0741BkListeHF]![0741BkListeUF].SetFocus
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acCheckBox Then
ctl.Locked = ctl.Name <> "0701Bemerkung"
End If
Next ctl

Kannst Du mir noch einmal helfen? Ist der ControlType richtig?

Gruß
Yoschi

bahasu

Hi Yoschi,

das Verhalten, dass mit der obigen Routine ein Ja_Nein-Feld nicht lockbar ist, kann ich nicht nachvollziehen.
"acCheckBox" ist ok.

Hoffentlich ist der Fokus nicht auf diesem Ja_Nein-Feld.
Wenn dem so sein sollte, hilft eine Anweisung in der Art:
   Me.0701Bemerkung.setfocus               
und diese Anweisung vor die "for each"-Schleife setzen.

Harald
Servus

Duke634

Hallo,

meine Annahme war falsch, dass das erste Formular funktioniert. Durch das viele herumprobieren, ist mir nicht aufgefallen, dass die Felder alle gesperrt waren.

Nach der Entdeckung habe ich weiter probiert und herausgefunden, dass das Problem die Zeile

For Each ctl In Me.Controls     

war.

Das Formular wurde nicht erkannt.

Ich habe das Me.Controls durch den Namen des  Formulars ersetzt = Forms![0700Buch02Lief].Controls.

Jetzt funktioniert alles so wie gewollt.

Nochmals DANKE und ein schönes FEST und einen GUTEN RUTSCH.

Gruß

Yoschi