Discussion:
Bedingte Formatierung per VBA acfieldhasfocus
(zu alt für eine Antwort)
Dietmar Thesing
2005-11-29 23:12:05 UTC
Permalink
Hallo liebe Helfer!
Ich möchte mir per VBA bedingte Formatierungen einstellen - eigentlich ganz
simpel, nur eine Formatierung für wenn das Feld den Fokus hat. (txtbox oder
combobox). Aber es klappt nicht. Es soll ein allgemeiner Code für alle
Formulare werden. Zum Probieren habe ich aber einfach erst mal einer
Befehlsschaltfläche in einem Formular mit mehreren Unterformularen den
folgenden Code zugewiesen:

Private Sub Befehl63_Click()
Dim c As Control
Dim frc As FormatConditions
Set c = Me!ctrfrmZutatenVerpMaßeUF!ctrVerpackungsbeschreibung
c.FormatConditions.Delete
Set frc = c.FormatConditions.Add(acFieldHasFocus)
With c.FormatConditions(0)
.backcolour = 16777215 'weiß
End With
End Sub

In der Zeile "Set frc = c.FormatConditions.Add(acFieldHasFocus)" erhalte ich
erst die Fehlermeldung 13 "Typen unverträglich" und dann nach F8 den Fehler
7968 "Der angegebene Typ für die bedingte Formatierung ist ungültig."
Ich arbeite zugegebenermaßen zum ersten Mal per VBA mit bedingter
Formatierung. Den Thread "Bedingte Formatierung per VBA" habe ich mir
angesehen, half aber nicht weiter. Vielleicht bin ich ja nur zu blöd? Aber
eigentlich habe ich Spaß an Access VBA, weil ich das so schön finde, das man
für jedes Problem eine Lösung findet. Na gut, es ist spät abends, da werde
ich etwas weitschweifig ....

Vielen Dank für Eure Hilfe!
--
Herzlicher Gruß
Dietmar
Win98SE, Office XP Dev (2002)
Jürgen Volke
2005-11-30 07:57:52 UTC
Permalink
Hallo Dietmar
Post by Dietmar Thesing
Ich möchte mir per VBA bedingte Formatierungen einstellen -
eigentlich ganz simpel, nur eine Formatierung für wenn das Feld den
Fokus hat. (txtbox oder combobox). Aber es klappt nicht. Es soll ein
allgemeiner Code für alle Formulare werden. Zum Probieren habe ich
aber einfach erst mal einer Befehlsschaltfläche in einem Formular mit
Private Sub Befehl63_Click()
Dim c As Control
Dim frc As FormatConditions
Set c = Me!ctrfrmZutatenVerpMaßeUF!ctrVerpackungsbeschreibung
c.FormatConditions.Delete
Set frc = c.FormatConditions.Add(acFieldHasFocus)
With c.FormatConditions(0)
.backcolour = 16777215 'weiß
End With
End Sub
In der Zeile "Set frc = c.FormatConditions.Add(acFieldHasFocus)"
erhalte ich erst die Fehlermeldung 13 "Typen unverträglich" und dann
nach F8 den Fehler 7968 "Der angegebene Typ für die bedingte
Formatierung ist ungültig."
bekomme ich auch, wenn schon eine Bedingte Formatierung existiert.
Wenn ich die raus schmeiße, klappt der Code.

ich würde allerdings With frc schreiben, statt With c.FormatConditions(0)

HTH Jürgen
Karl Donaubauer
2005-11-30 11:04:34 UTC
Permalink
Post by Dietmar Thesing
Hallo liebe Helfer!
Ich möchte mir per VBA bedingte Formatierungen einstellen -
eigentlich ganz simpel, nur eine Formatierung für wenn das Feld den
Fokus hat. (txtbox oder combobox). Aber es klappt nicht. Es soll ein
allgemeiner Code für alle Formulare werden. Zum Probieren habe ich
aber einfach erst mal einer Befehlsschaltfläche in einem Formular mit
Private Sub Befehl63_Click()
Dim c As Control
Dim frc As FormatConditions
Dim frc As FormatCondition
Post by Dietmar Thesing
Set c = Me!ctrfrmZutatenVerpMaßeUF!ctrVerpackungsbeschreibung
c.FormatConditions.Delete
Set frc = c.FormatConditions.Add(acFieldHasFocus)
With c.FormatConditions(0)
.backcolour = 16777215 'weiß
.backcolor = 16777215 'weiß
Post by Dietmar Thesing
End With
End Sub
In der Zeile "Set frc = c.FormatConditions.Add(acFieldHasFocus)"
erhalte ich erst die Fehlermeldung 13 "Typen unverträglich" und dann
nach F8 den Fehler 7968 "Der angegebene Typ für die bedingte
Formatierung ist ungültig."
Zudem, entweder, wie Jürgen schon schrieb:

Dim c As Control
Dim frc As FormatCondition
Set c = Me!ctrfrmZutatenVerpMaßeUF!ctrVerpackungsbeschreibung
c.FormatConditions.Delete
Set frc = c.FormatConditions.Add(acFieldHasFocus)
With frc
.backcolor = 16777215 'weiß
End With

oder:

Dim c As Control
Set c = Me!ctrfrmZutatenVerpMaßeUF!ctrVerpackungsbeschreibung
c.FormatConditions.Delete
c.FormatConditions.Add(acFieldHasFocus)
With c.FormatConditions(0)
.backcolor = 16777215 'weiß
End With
--
HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
Datenbank-Profis: http://www.dbdev.org
Dietmar Thesing
2005-11-30 12:23:02 UTC
Permalink
Hallo Karl,
herzlichen Dank!
Die falsche Deklaration war die Ursache. (bis zu der falschen
Rechtschreibung der Farbe bin ich ja nicht gekommen)
Ich habe die letzte Variante genommen, die funktioniert. Jetzt kann ich den
Code umbauen, um meine Felder in allen Formularen durchzuformatieren. Noch
mal, DANKE, auch an Jürgen.
--
Herzlicher Gruß
Dietmar
Win98SE, Office XP Dev (2002)
Karl Donaubauer
2005-11-30 12:43:29 UTC
Permalink
.backcolour...
.backcolor...
...bis zu der falschen
Rechtschreibung der Farbe bin ich ja nicht gekommen...
Die Rechtschreibung ist völlig korrekt nach britischem Englisch.
Nur sind die Access-Hersteller halt Amerikaner.
--
:-)
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
Datenbank-Profis: http://www.dbdev.org
Dietmar Thesing
2005-11-30 18:36:03 UTC
Permalink
Hallo Karl,

"Karl Donaubauer" schrieb
Post by Karl Donaubauer
Die Rechtschreibung ist völlig korrekt nach britischem Englisch.
Nur sind die Access-Hersteller halt Amerikaner.
und ich kann das Amerikanisch offensichtlich (noch) nicht.
Aber wenn du oder jemand anders Lust hat zu antworten, es ist noch ein weiterer Fehler aufgetreten, den ich behoben, aber nicht
verstanden habe. Ich hab die Prozedur für alle Formulare in einem allgemeinen Modul gemacht. Sie klappte aber nur mit Formularen
ohne Unterformular.
Hier der Code abzüglich Kopf und Fehlerbehandlung:
Dim obj As AccessObject, dbs As Object, strFrmName As String
Dim ctr As Control
Dim strCtr As String

Set dbs = Application.CurrentProject

' Alle Formulare öffnen
For Each obj In dbs.AllForms
strFrmName = obj.Name
Debug.Print vbCrLf & "-------------- " & strFrmName & " --------------"
DoCmd.OpenForm strFrmName, acDesign, , , acFormEdit
With Forms(strFrmName)
For Each ctr In .Controls
If ctr.ControlType = acTextBox Or ctr.ControlType = acComboBox Then
ctr.FormatConditions.Delete
strCtr = ctr.Name
Debug.Print strCtr
ctr.FormatConditions.Add (acFieldHasFocus)
With ctr.FormatConditions(0)
.BackColor = 16777215
End With
End If
Next ctr
End With

Die nächste Zeile funktioniert:
DoCmd.RunCommand acCmdSave
Diese Zeile hat nicht funktioniert, Fehlermeldung 29068, kann Aktion nicht vervollständigen:
' DoCmd.Save acForm, strFrmName
Auch diese Zeile hat nicht funktioniert, aber keine Fehlermeldung - nur die bedingten Formatierungen, die korrekt waren, wurden
nicht gespeichert:
DoCmd.Close acForm, strFrmName, acSaveYes
Next obj

Herzlicher Gruß, Danke für alle Hilfe
Dietmar

Loading...