Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
984to988
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Objekt-Verweise gehen verloren bei Application.Run

Objekt-Verweise gehen verloren bei Application.Run
18.06.2008 17:16:00
Kolja
Hallo Zusammen,
ich habe mal wieder ein sehr spezielles Problem:
In einer Excel-Datei werden in der Workbook_Open-Prozedur zwei Verweise auf Arbeitsblatt-Objekte in
Objektvariablen gespeichert :
Private Sub Workbook_Open()
Dim lastVersion As String
Dim lastSaveDate As String
' Worksheet-Objekte in Variablen speichern
Set ws_ml = ThisWorkbook.Worksheets(WS_Masterlist)
Set ws_history = ThisWorkbook.Worksheets("Historie")
.
.
.
Diese Verweise werden (zwecks Abkürzung der Arbeitsblatt-Qualifizierung) in etlichen anderen Makros in der Arbeitsmappe benutzt. Dies funktioniert eigentlich auch einwandfrei.
Nun existiert eine zweite Excel-Mappe, die dazu dient, verschiedene administrative Dinge innerhalb der oben genannten Excel-Datei zu verändern (u.A. eine rudimentäre Benutzer-/Berechtigungsverwaltung).
Dies bringt mehrmaliges Aktivieren/Deaktivieren der Datei 1 mit sich, und dabei wird natürlich jedesmal das entsprechende Ereignis "Workbook_Activate" der Datei 1 gefeuert. Beim ausführen des Event-Handlers wird innerhalb Datei 1 ein Makro aufgerufen, in welchem die genannten Objektvariablen verwendet werden:
currentTBK_Split = Split(ws_ml.Cells(currentTBK_StartRow, 1).Value, Chr(10))
^
^
An dieser Stelle bricht die Ausführung ab mit dem Hinweis "Objektvariable oder With-Blockvariable nicht festgelegt".
Warum ist das so? Offensichtlich werden die Verweise im Kontext der Datei 1 irgendwann zurückgesetzt.
Hat jemand eine Idee?
Der Fehler macht mir ziemliche Probleme, ich habe auch keine brauchbare Möglichkeit gefunden, ihn zu umgehen.
Ich habe auch schon versucht, diesen durhc mehrmaliges hin- und herschalten zwischen Datei 1 und einer beliebigen anderen Arbeitsmappe zu reproduzieren, ohne Erfolg.
Ich habe lange Zeit gedacht, das das Phänomen aufgrund mehrmaligen An-/Abschaltens der Events (Application.EnableEvents) entsteht. Jedoch ist sichergestellt, daß die Datei 1 durch Datei 2 mit angeschalteten Events geöffnet wird.
Hoffentlich hat jemand eine Idee!
Schönen Gruß,
Kolja

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objekt-Verweise gehen verloren bei Application.Run
Nepumuk
Hallo Kolja,
wenn's dich tröstet, das habe ich auch in einer Mappe. Da werden in einem Chart-Event per Run-Methode Daten aus einer anderen Mappe geholt und angezeigt. Wenn die aufgerufene Prozedur abgearbeitet ist, sind in der aufrufenden Mappe alle öffentlichen Variablen zurückgesetz. Ich hab versucht das ganze in einer anderen Mappe unter einfacheren Bedingungen nachzuvollziehen, das ist mir nicht gelungen. Nur unter den ganz bestimmten (mir leider schleierhaften) Gründen passiert das. Ich hab mir mit einer separaten Initialisierungroutine beholfen, die ich nach den Verlust der Daten aufrufe.
Ist das bei dir auch so, dass die Variablen immer zurückgesetzt sind, oder ist das bei dir sporadisch mal so und mal anders?
Wie sieht denn dein Aufruf aus? Eventuell ist eine gemeinsamkeit erkennbar.
Meiner:
Application.Run "Auftraege_eines_Werkzeuges.xls!Show1", Left$(Tabelle1.Cells(Zeile, 3).Value), _
    Len(Tabelle1.Cells(Zeile, 3).Value - 1) & "/", von_Monat, von_Jahr, bis_Monat, _
    bis_Jahr, False, Tabelle1.Cells(Zeile, 1).Value

Gruß
Nepumuk

Anzeige
AW: Objekt-Verweise gehen verloren bei Application.Run
18.06.2008 18:19:00
Luschi
Hallo Kolja,
Variablen (egal ob normale oder Objekt-Variablen) gehören der Arbeitsmappe, in der sie _ definiert werden. Sie sind also nicht excelweit in der selben Instanz definiert. Wenn Ich mir Variablenwerte aus einer anderen Mappe holen möchte, dann passiert das bei mir so:

'in Datei1 (Datei1.xls)
'diese Tabellen-Objekte müssen beim Öffnen der AM noch definiert werden
Public ws_ml As Worksheet
Public ws_history As Worksheet
Function set_WS(x_Ws As String) As Worksheet
Dim y_Ws As Worksheet
Select Case x_Ws
Case "ws_ml"
Set y_Ws = ws_ml
Case "ws_history"
Set y_Ws = ws_history
End Select
Set set_WS = y_Ws
Set y_Ws = Nothing
End Function
'in Datei2 (Admin.xls)
Public ws_XYZ As Worksheet
Function get_WS(xWs As String) As Worksheet
Dim z_Ws As Worksheet
Set z_Ws = Application.Run("Datei1.xls!getWS", xWs)
Set get_WS = z_Ws
Set z_Ws = Nothing
End Function
Sub test1()
Set ws_XYZ = get_WS("ws_ml")
currentTBK_Split = Split(ws_XYZ.Cells(currentTBK_StartRow, 1).Value, Chr(10))
End Sub


Gruß von Luschi
aus klein-Paris

Anzeige
AW: Objekt-Verweise gehen verloren bei Application.Run
18.06.2008 18:23:06
Kolja
Hallo Luschi,
ich glaube, da hast Du mich missverstanden. Ich will nicht auf die Objektreferenzen aus einer anderen Datei zugreifen. Es sind einfach globale Variablen innerhalb des Kontextes der Datei 1. Und nur hier wird auf die Referenzen zugegriffen.
Gruß,
Kolja

AW: Objekt-Verweise gehen verloren bei Application.Run
18.06.2008 18:39:23
Luschi
Hallo Kolja,
dann erneuere doch die Definitieion der Varianlen in Datei1 wie folgt:

Private Sub Workbook_Activate()
If ws_ml Is Nothing Then
Set ws_ml = ThisWorkbook.Worksheets(WS_Masterlist)
End If
If ws_history Is Nothing Then
Set ws_history = ThisWorkbook.Worksheets("Historie")
End If
End Sub

Gruß von Luschi
aus klein-Paris

Anzeige
AW: Objekt-Verweise gehen verloren bei Application
18.06.2008 18:49:17
Uduuh
Hallo,
wenn du die Referenzen auf die Tabellen nur innerhalb der gleichen Datei brauchst: Warum arbeitest du nicht mit den Code-Namen der Tabellen? Mache ich fast immer so. Damit sparst du dir auch die Setterei. Einfach den Tabellen schöne knackig kurze Codenamen geben. z.B.ws_ml und ws_history.
Gruß aus’m Pott
Udo

AW: Objekt-Verweise gehen verloren bei Application.Run
18.06.2008 18:29:16
Luschi
Hallo Kolja,
Variablen (egal ob normale oder Objekt-Variablen) gehören der Arbeitsmappe, in der sie definiert werden.
Sie sind also nicht excelweit in der selben Instanz ansprechbar (auch wenn sie als 'Public' definiert sind).
Wenn Ich mir Variablenwerte aus einer anderen Mappe holen möchte, dann passiert das bei mir
so:

'in Datei1 (Datei1.xls)
'diese Tabellen-Objekte müssen beim Öffnen der AM noch definiert werden
Public ws_ml As Worksheet
Public ws_history As Worksheet
Function set_WS(w_Ws As String) As Worksheet
Dim y_Ws As Worksheet
Select Case w_Ws
Case "ws_ml"
Set y_Ws = ws_ml
Case "ws_history"
Set y_Ws = ws_history
End Select
Set set_WS = y_Ws
Set y_Ws = Nothing
End Function
'in Datei2 (Admin.xls)
Public ws_XYZ As Worksheet
Function get_WS(x_Ws As String) As Worksheet
Dim z_Ws As Worksheet
Set z_Ws = Application.Run("Datei1.xls!set_WS", x_Ws)
Set get_WS = z_Ws
Set z_Ws = Nothing
End Function
'hier wird mit den Variablen aus Datei1 gearbeitet!
Sub Test1()
Set ws_XYZ = get_WS("ws_ml")
currentTBK_Split = Split(ws_XYZ.Cells(currentTBK_StartRow, 1).Value, Chr(10))
'usw.
Set ws_XYZ = Nothing
End Sub


Gruß von Luschi
aus klein-Paris

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige