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 Sub SetFieldProperty(TableName As String, FieldName As String, _
                            Optional PropertyName As String = "Format", _
                            Optional PropertyValue As Variant = "Standard", _
                            Optional PropertyType As DAO.DataTypeEnum = dbText)
 
   'Quelle: http://www.dbwiki.net/
 
   Dim db  As DAO.Database
   Dim tdf As DAO.TableDef
   Dim fld As DAO.Field
   Dim prp As DAO.Property
 
   Set db = CurrentDb
   Set tdf = db.TableDefs(TableName)
   Set fld = tdf.Fields(FieldName)
 
   On Error Resume Next
 
   If PropertyValue = vbNullString Then ' Property entfernen
      fld.Properties.Delete PropertyName
   Else
      fld.Properties(PropertyName) = PropertyValue
      If Err.Number = 3270 Then ' Property ist noch nicht vorhanden
         Err.Clear
         Set prp = fld.CreateProperty(PropertyName, PropertyType, PropertyValue)
         fld.Properties.Append prp
      End If
   End If
End Sub
 
 
Public Function GetFieldProperty(TableName As String, FieldName As String, _
                                 Optional PropertyName As String = "Format")
 
   'Quelle: http://www.dbwiki.net/
 
   Dim db  As DAO.Database
   Dim tdf As DAO.TableDef
   Dim fld As DAO.Field
   Dim prp As DAO.Property
 
   GetFieldProperty = Null
   Set db = CurrentDb
   Set tdf = db.TableDefs(TableName)
   Set fld = tdf.Fields(FieldName)
   On Error Resume Next
   GetFieldProperty = fld.Properties(PropertyName)
End Function

Aufruf

Z. Bsp. zur Änderung des Formats des Felds 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", vbNullString

Die vorstehende Methode kann analog auch für andere Properties-Auflistungen verwendet werden (fast jedes DAO-Objekt hat 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:

   Debug.Print GetFieldProperty("MeineTabelle", "MeinFeld", "Description")

Weblinks