| Yaslaw.Info > VB / VBA > [VBA] Objecte als 'Static' deklarieren |
Impressum ∞ |
[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
'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
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
FSO.FileExists("C:\Temp\myFile.txt")
End Sub
