2017-08-22 8 views
2

Meine öffentlichen Variablen verlieren ihren Geltungsbereich, wenn die Ausführung in eine Unterkomponente in einem anderen Modul verschoben wird. Ich kann nicht verstehen, warum das passiert.Öffentliche Variable überschreitet den Gültigkeitsbereich

Modul A:

Option Compare Database 

Public db As DAO.Database 
Public xlApp As Excel.Application 

Sub Main() 

Dim db As DAO.Database 

Set db = CurrentDb 

ProcessFiles ' upload the data from the report files 
AppendToPentana ' transfer the data from the main tables to the pentana export table 
ProduceFinalExport ' export the final data to Excel 

End Sub 

Modul B:

Sub ProcessFiles() 

Dim recSet As Recordset 

' open a recordset containing keywords to look for in the file names to identify the area 
Set recSet = db.OpenRecordset("tblFiles") 

' rest of code 

End Sub 

In Modul B die Variable db hat auf Nothing festgelegt worden, und ich bekomme ein Objekt ref Fehler. Ich habe versucht, die ältere 'Global'-Deklaration anstelle von' Public 'mit demselben Ergebnis zu verwenden.

Öffentliche Variablen werden häufig verwendet, ich verstehe nicht, was hier falsch läuft.

+0

'Global' ist * genau * das selbe wie' Public' (außer es kann nicht überall 'Public' verwendet werden). Das Aufkommen von "Public" machte "Global" vor ein paar Jahrzehnten obsolet. –

Antwort

6
Sub Main() 

Dim db As DAO.Database 

Set db = CurrentDb 

Sie haben eine zusätzliche lokale Variable db in Main, und das ist die, die Sie festgelegt. Lokale Variablen haben Vorrang vor globalen.

Entfernen Sie einfach diese Dim Linie von Main und es wird funktionieren.

+0

Doh! Ich brauche einen Kaffee :) Danke – Absinthe

+0

Für die Aufzeichnung, entfernen Sie die "Dim" Zeile in ihrer Gesamtheit. Entfernen Sie nicht einfach das "Dim" (für jeden, der in Zukunft auf dieses Problem stoßen könnte). –

Verwandte Themen