Yaslaw.Info > VB / VBA > [VBA] Objecte als 'Static' deklarieren
Impressum Stopp Acta

[VBA] Objecte als 'Static' deklarieren

In vba gibt es keine wirklichen Staitc-Classes. Dies hat zur Folge, dass man jede Klasse jedes mal instanzieren muss. Am Beispiel der Microsoft-Klasse FileSystemObject will ich hier zeigen wie man das lösen kann, damit man nicht in jeder Mehtode wo wir diese Klasse brauchen eine Instanz anlegen müssen. Ein weiterer Vorteil dieser Methode ist auch, dass wir uns nicht drum kümmern müssen das Objekt irgendwo global zu instanzieren.

Dies ist nützlich bei Klassen von der man häufig genua eine Instanz braucht. Also Factories, FSO etc.

Trotz vielen Unzugänglichkeiten in VBA gibts etwas ganz nettes. Wir können eine Funktion gleich bennen wie eine Klasse. Die nutze ich aus (hier bei RegExp).

staticClass
'-------------------------------------------------------------------------------
'File         : StaticClass
'Type         : Module
'               mpl by ERB software
'               All rights reserved
'Environment  : Access 2000/XP
'Version      : 1.0
'Name         : Static Class
'Description  : Ermöglicht definierte Klassen Statisch anzuwenden
'Author       : Stefan Erb (ERS)
'History      : 15.12.2011 - ERS - Creation
'-------------------------------------------------------------------------------

Option Explicit
Option Compare Database

'-------------------------------------------------------------------------------
' Private members
'-------------------------------------------------------------------------------
Private staticFSO                   As FileSystemObject
Private staticRegExp                AS RegExp

'-------------------------------------------------------------------------------
' Public methodes
'-------------------------------------------------------------------------------

'/**
' * @return     FileSystemObject
' * @example    Call FSO.DeleteFile("C:\temp\test.txt")
' */
Public Function FSO() As FileSystemObject
    If staticFSO Is Nothing Then Set staticFSO = New FileSystemObject
    Set FSO = staticFSO
End Function

'/**
' * @return     RegExp
' * @example    Call RegExp.pattern = "<tag>([^<]+)</tag>"
' *             If RegExp.test(myString) Then
' */
Public Function RegExp() As RegExp
    If staticRegExp Is Nothing Then Set staticRegExp = New RegExp
    Set RegExp = staticRegExp
End Function


Wenn wir dies so erstellt haben, können wir von überall her auf FSO zugriffen ohne sie jedes mal zu instanzieren

Anwendug bisher:
public Sub test_1
    Set FSO = new FileSystemObject
    FSO.FileExists("C:\Temp\myFile.txt")
    Set FSO = Nothing
End Sub


Anwendung neu:
public Sub test_1
    FSO.FileExists("C:\Temp\myFile.txt")
End Sub
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki