Variablen bei workbook_open deklarieren

03/10/2010 - 14:39 von CL | Report spam
Hallo Zusammen,
beim öffnen eines Worksbook deklariere ich bereits einige Variablen
mit Workbook_Open damit ich diese nicht in jedem neuen Modul erneut
deklarieren muss. Diese sollen dann auch in jedem Modul ansprechbar
sein.
Wenn ich nun ein neues Modul erzeuge und zb. auf WB mit WB.Name
zugreifen will bekomme ich eine Fehlermeldung. Ich dachte wenn man die
Variablen als public deklariert kann man von jemdem Modul direkt
zugreifen. Wo ist der Denkfehler?

Option Explicit
Public WB, WBN As Workbook ' WB=Workbook, WBN=New
Workbook
Public WS, WSN As Worksheet ' WS=Worksheet, WSN New Worksheet

Public Sub Workbook_Open()
Dim rgKTR As Range
Dim rgWGR As Range

Set WB = ThisWorkbook
Set WS = WB.Worksheets(1)
Set rgKTR = WS.Range("Path_KTR")
Set rgWGR = WS.Range("Path_WGR")
End Sub

Gruß
 

Lesen sie die antworten

#1 Andreas Killer
03/10/2010 - 16:04 | Warnen spam
Am 03.10.2010 14:39, schrieb CL:

beim öffnen eines Worksbook deklariere ich bereits einige Variablen
mit Workbook_Open damit ich diese nicht in jedem neuen Modul erneut
deklarieren muss.


Naja, das ist technisch so nicht richtig, denn wenn Du sie im Workbook_Open deklarieren würdest, dann müsste in der Sub
ein "ReDim WB as WorkBook" stehen.

Du weist Deinen Global deklarierten Variablen nur ein Objekt zu, deklariert sind sie schon, allerdings (vermute ich) im
Modul "DieseArbeitsmappe".

Diese sollen dann auch in jedem Modul ansprechbar sein.


Ja, das geht auch.

Sub Test()
MsgBox DieseArbeitsmappe.WB.Name
End Sub

Wenn ich nun ein neues Modul erzeuge und zb. auf WB mit WB.Name
zugreifen will bekomme ich eine Fehlermeldung. Ich dachte wenn man die
Variablen als public deklariert kann man von jemdem Modul direkt
zugreifen. Wo ist der Denkfehler?


Das Modul "DieseArbeitsmappe" ist ein Klassenmodul, genau wie die Codemodule der Tabellen.

Man kann zwar aus anderen Modulen auf Public-Variablen in diesen Modulen zugreifen, musste jedoch dabei die Referenz
über das Objekt herstellen.

Wenn Du das nicht möchtest, dann verlagere die Variablen in ein normales Modul, diese Public Variablen lassen sich ohne
(aber auch mit!) Referenz ansprechen, z.B.:

Sub Test()
MsgBox WB.Name
MsgBox Modul1.WB.Name
End Sub

Deine Deklaration sollte dann auch so aussehen:

Public WB As Workbook, WBN As Workbook
Public WS As Worksheet, WSN As Worksheet

So wie Du es gemacht hast ist WB ein Variant, in VB muss man jeden Typ explicit angeben.

Andreas.

Ähnliche fragen