Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1616to1620
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
Inhaltsverzeichnis

Objektvariablen zum Zweiten

Objektvariablen zum Zweiten
28.03.2018 21:11:55
Daniel
Geschätzte Excel Liebhaber
Für ein Projekt möchte ich nun Objektvariablen definieren. Nachdem ich den ganzen Nachmittag Theorie gebüffelt habe, komme ich trotzdem nicht auf einen grünen Zweig. Was ich will:
Die Objektreferenz Sheets("A1") soll für alle Prozeduren in der gesamten Arbeitsmappe "A1" lauten, d.h. z.B. A1.Range("D1") = 3
Die Deklaration ist das eine, wo aber kann ich die Set-Anweisung (Set A1 = Sheets("A1")) unterbringen, damit ich nicht in jeder Prozedur die Set-Anweisung wiederholen muss? In einem Modul? Als Prozedur, die ich dann wieder aufrufen muss? Momentan scheint Nichts zu klappen...
Dieser Code am Anfang des Moduls erkennt z.B. eine in einer UserForm hinterlegte Prozedur nicht:
Option Explicit
Dim A1 As Worksheet
Set A1 = Sheets("A1")
[...]
Wäre um Hilfestellung sehr erfreut

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objektvariablen zum Zweiten
28.03.2018 21:43:06
Gerd
Hallo Daniel,
das Exceleigene Schachbrettmuster für Tabellennamen und Variablennamen zu verwenden,
ist Plasphemie. :-)
Public MeinBlatt As Worksheet
Sub Egal()
Set MeinBlatt = Worksheets("Tabelle1")
End Sub

Gruß Gerd
AW: Objektvariablen zum Zweiten
28.03.2018 22:27:00
Daniel
Salü Gerd
Danke für die Antwort, das mit dem Schachbrett ist mir gerade etwas zu hoch. Was meinst du damit?
Deine Vorschlag hatte ich bereits früher diesen Nachmittag in einem Modul platziert, aber es hat nicht funktioniert. Ich möchte, dass irgendwo eine Objektvariable platziert ist, die ich ändern kann, damit alle anderen Prozeduren in UserForms, Tabellen etc. diese Variable so übernehmen. Wie und wo mache ich dies? Wenn ich also als Beispiel die Objektvariable myVar = Sheets("A1") in Sheets("A2") ändere, sollen alle Prozeduren in der ganzen Arbeitsmappe entsprechend auf Sheet A2 Bezug nehmen.
Die Sache mit der Set-Anweisung in einer Prozedur im Modul hat das Problem, dass sie in einer Prozedur in einer UserForm oder in einem Tabellenblatt - wie denn auch? - nicht erkannt wird.
Weisst du weiter?
Anzeige
AW: Objektvariablen zum Zweiten
28.03.2018 22:27:02
Daniel
Salü Gerd
Danke für die Antwort, das mit dem Schachbrett ist mir gerade etwas zu hoch. Was meinst du damit?
Deine Vorschlag hatte ich bereits früher diesen Nachmittag in einem Modul platziert, aber es hat nicht funktioniert. Ich möchte, dass irgendwo eine Objektvariable platziert ist, die ich ändern kann, damit alle anderen Prozeduren in UserForms, Tabellen etc. diese Variable so übernehmen. Wie und wo mache ich dies? Wenn ich also als Beispiel die Objektvariable myVar = Sheets("A1") in Sheets("A2") ändere, sollen alle Prozeduren in der ganzen Arbeitsmappe entsprechend auf Sheet A2 Bezug nehmen.
Die Sache mit der Set-Anweisung in einer Prozedur im Modul hat das Problem, dass sie in einer Prozedur in einer UserForm oder in einem Tabellenblatt - wie denn auch? - nicht erkannt wird.
Weisst du weiter?
Anzeige
AW: Objektvariablen zum Zweiten
28.03.2018 22:29:42
Peter(silie)
Hallo,
kommt auf deinen restliche Code drauf an...
In einigen fällen reicht es per ByRef statement ein Object weiter zu geben an die nächste Funktion.
Liefer uns Code und dein Problem kann tatsächlich gelöst werden.
Schau dir nochmal Klassenmodule an und Getter/ Setter sowie Konstanten.
Hier Beispiele zu Private Variablen und Const sowie ByRef:
(Erstelle eine Mappe mit zwei Tabellen mit dem Namen Tabelle1 und Tabelle2
Kopiere den Code da rein und teste ihn mit dem debugger)

Option Explicit
Private shA1 As Worksheet
Private shA2 As Worksheet
Private Const NAME_1 As String = "Tabelle1"
Private Const NAME_2 As String = "Tabelle2"
'ganz normal mit private + const
Private Sub Initialize()
Set shA1 = ThisWorkbook.Sheets(NAME_1)
Set shA2 = ThisWorkbook.Sheets(NAME_2)
End Sub
Private Sub ReturnName()
Debug.Print shA1.Name
Debug.Print shA2.Name
End Sub
'ByRef
Private Sub ByRef_Test()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(NAME_1)
b ws
End Sub
Private Sub b(ByRef worksheet_ As Worksheet)
Debug.Print worksheet_.Name
End Sub
Public Sub Test()
Initialize
ReturnName
ByRef_Test
End Sub

Anzeige
AW: Objektvariablen zum Zweiten
28.03.2018 22:35:11
Daniel
Danke Peter(silie), da vertiefe ich mich mal darin. Den Code würde ich gerne geben, aber er ist äusserst umfangreich und dies möchte ich dir nicht zumuten. Ich gehe mal deinen Hinweisen nach und bastle eine Testdatei.
AW: Objektvariablen zum Zweiten
28.03.2018 22:52:24
Daniel
Hi
die Deklaration der Variable muss mit Public in einem allgemeinen Modul oberhalb der Makros stattfinden.
Option Explicit
Public A1 as Worksheet

Die Deklaration darf nur hier erfolgen.
Deklarierst du A1 nochmal an anderere Stelle innerhalb eines Makros, so hast du zwei verschiedene Variablen, die zwar gleich heißen, aber nichts miteinander zu tun haben.
die Zusweisung muss dann in einem normalen Makro erfolgen und zwar bevor du diese Variable das erstemal anderweitig verwendest
Sub Makro1
Set A1 = Sheets("A1")

dh du solltest diese Codezeile in deinem Startmakro an den Anfang stellen (also das Makro, dass du normalerweis von Excel aus aufrufst).
ab diesem zeitpunkt kannst du dann die Variable in allen anderen Makros verwenden.
Gruß Daniel
Anzeige
AW: Objektvariablen zum Zweiten
29.03.2018 00:15:24
Daniel
Herzlichen Dank Daniel, genau das ist es! Ich hatte ursprünglich auch an diese Lösung gedacht, hatte aber statt im Modul Public immer Dim verwendet, da muss ich noch Verständnislücken aufarbeiten. Ich habe schon an meinem Verstand gezweifelt. Vielen Dank, jetzt kann ich in Ruhe schlafen :)
Liebe Grüsse - Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige