Anweisung Property

A property, also called field or attribute, characterizes a given object or piece of information. Properties can be used to control access to data. It is common use to include instructions at setting or reading time of properties. Code can vary from simple assignment to complex context dependent routines. Using Get, Let or Set accessors enforces properties' consistency when necessary.

warning

Diese Anweisung erfordert, dass Option Compatible vor dem ausführbaren Programmcode in einem Modul platziert wird.


Syntax:

Diagramm der Anweisung Property Get


         [Private | Public] Property Get name[char | As typename]
         End Property
      

Diagramm der Anweisung Property Set


         [Private | Public] Property [Let | Set] name[char] [([Optional [ByRef | ByVal]]value[char | As typename])] [As typename]
         End Property
      

Parameter:

name: Der Eigenschaftsname.

argument: Wert, der an die Setter-Routine Property übergeben werden soll.

note

Property-Setter verwenden oft ein einzelnes Argument. Mehrere Argumente werden gleichermaßen akzeptiert.


argument fragment

Fragment für argument


      {[Optional [ByRef|ByVal]]|ParamArray} argument {{As typename|char}[ = expression]|[()]As Variant}
    
Parameter

Optional: Das Argument ist nicht obligatorisch.

ByRef: Das Argument wird als Referenz übergeben. NyRef ist die Standardeinstellung.

ByVal: Das Argument wird als Wert übergeben. Sein Wert kann von der aufgerufenen Routine geändert werden.

char: Typdeklarationszeichen.

typename: Primitiver Datentypname. Bibliotheks- oder moduldefinierte Typen können ebenfalls angegeben werden.

= expression: Geben Sie einen Standardwert für das Argument an, der seinem deklarierten Typ entspricht. Optional ist für jedes Argument erforderlich, das einen Standardwert angibt.

ParamArray: Verwenden Sie ParamArray, wenn die Anzahl der Parameter unbestimmt ist. Ein typisches Szenario ist das einer benutzerdefinierten Calc-Funktion. Die Verwendung von ParamArray sollte auf das letzte Argument einer Routine beschränkt sein.

tip

Die Verwendung von ParamArray oder = expression erfordert, dass Option Compatible vor dem ausführbaren Programmcode in einem Modul platziert ist.


warning

Bei Verwendung von Option VBASupport 1 werden Argumente Optional ohne Standardwert (= expression) entsprechend ihrem Datentyp initialisiert, außer wenn Variant.


typename fragment

Fragment primitiver Datentypen


      {Boolean|Byte|Currency|Date|Double|Integer|Long|Object|Single|String|Variant}
    
char fragment

Zeichen-Typdeklaration


      { % | & | ! | # | $ | @ }
    

Beispiele


      Option Compatible
      Sub Main
          ProductName = "Office"
          Print ProductName ' Zeigt "LibreOffice"
      End Sub
      
      Private _office As String
      Property Get ProductName As String
          ProductName = _office
      End Property
      Property Let ProductName(value As String)
          _office = "Libre"& value
      End Property
      
tip

In Abwesenheit von Property Let oder Property Set hilft Property Get dabei, geschützte Informationen zu definieren, die nicht versehentlich von einem fremden Modul geändert werden können:



      Option Compatible
      Public Property Get PathDelimiter As String ' Schreibgeschützte Variable
          Static this As String
          If this = "" Then : Select Case GetGuiType()
              Case 1 : this = ";" ' Windows
              Case 4 : this = ":" ' Linux oder macOS
              Case Else : Error 423 ' Eigenschaft oder Methode nicht definiert: PathDelimiter
          End Select : End If
          PathDelimiter = this
      End Property ' Schreibgeschützter PathDelimiter
      
      Sub Main
          PathDelimiter = "a sentence" ' Nichts passiert
      End Sub
      
note

Verwenden Sie Let oder Set beim Umgang mit UNO-Diensten oder Klassenobjekten:



      Option Compatible
      Sub Main
          'Set anObject = CreateUnoService( "com.sun.star.frame.Desktop" )
          anObject = CreateUnoService( "com.sun.star.frame.Desktop" )
          Print anObject.SupportedServiceNames(0) ' displays "com.sun.star.frame.Frame"
      End Sub
      
      Property Get anObject As Object
          Set anObject = _obj
      End Property
      
      Private _obj As Object
      
      'Property Set anObject(value As Object)
          'Set _obj = value.CurrentFrame
      'End Property
      Property Let anObject(value As Object)
          Set _obj = value.CurrentFrame
      End Property