VBA Tipp: Feldeigenschaften per VBA ändern/auslesen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich will die Eigenschaften eines Tabellenfelds (z.B. "Format") per VBA ändern bzw. auslesen.

Lösung

Dazu muss man an die Properties-Auflistung des Field-Objekts eine neue Property anfügen bzw. die vorhandene Property ändern:

Public Function SetFieldProperty(TblName, FldName, _
   Optional PrpName = "Format", Optional PrpVal = "Standard", _
   Optional PrpType = dbText)
 
Dim DB As Database, Tbl As DAO.TableDef, Fld As DAO.Field, Prp As DAO.Property
 
Set DB = CurrentDb
  Set Tbl = DB.TableDefs(TblName)
  Set Fld = Tbl.Fields(FldName)
  On Error Resume Next
  If PrpVal = "" Then ' remove property
    Fld.Properties.Delete PrpName
  Else
    Fld.Properties(PrpName) = PrpVal
    If Err.Number = 3270 Then ' property not yet defined
      On Error GoTo 0
      Set Prp = Fld.CreateProperty(PrpName, PrpType, PrpVal)
      Fld.Properties.Append Prp
    End If
  End If
End Function
 
Public Function GetFieldProperty(TblName, FldName, _
   Optional PrpName = "Format")
 
Dim DB As Database, Tbl As DAO.TableDef, Fld As DAO.Field, Prp As DAO.Property
  GetFieldProperty = Null
  Set DB = CurrentDb
  Set Tbl = DB.TableDefs(TblName)
  Set Fld = Tbl.Fields(FldName)
  On Error Resume Next
  GetFieldProperty = Fld.Properties(PrpName)
End Function

Aufruf

Z. B. zur Änderung des Formats des Feldes "MeinFeld" in der Tabelle "MeineTabelle" auf "Währung":

SetFieldProperty "MeineTabelle","MeinFeld","Format","Currency"

Zum Löschen der Beschreibung des Feldes "Feld1" in der Tabelle "MeineTabelle" auf "Währung":

SetFieldProperty "MeineTabelle","Feld1","Description",""

Die obige Funktion kann analog auch für andere Properties-Auflistungen verwendet werden (fast jedes Objekt hat ja eine derartige Auflistung). Die Funktion ist allerdings nicht zum Ändern "inhärenter" Eigenschaften geeignet - im Falle eines Tabellenfelds also z.B. ungeeignet, um die Size- oder die Type-Eigenschaft zu ändern (das ginge nur bei der Neuanlage des Felds per CreateField!).

Zur Ermittlung der Beschreibung des Feldes "MeinFeld" in der Tabelle "MeineTabelle":

GetFieldProperty ("MeineTabelle","MeinFeld","Description")