Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1368to1372
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

Kopieren von Range-Varible löst Change-Event aus?

Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:22:36
Range-Varible
Servus,
versuche gerade das explizite Einlesen von Ranges in eine Variable zu minimieren. Dazu lese ich den Range nur einmal in eine globale Variable ein und möchte dann bei späteren Aufrufen einfach nur die Range-Variable übergeben.
Wenn ich das Folgende nun in einer WorksheetChange-Prozedur mache:
Dim Var1 as Range, Var2 as Range
Set Var1 = ThisWorkbook.Names("Beispiel").RefersToRange
Var2 = Var1
löst Var2 = Var1 das Change-Ereignis erneut aus und erzeugt somit eine Endlos-Schleife. Wenn ich die Var2 wie die Var1 explizit zuweise tritt dies nicht auf.
Weiß jemand warum? Mache ich was falsch...?
Danke und Gruß
Kuttel

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:30:44
Range-Varible
Hallo,
ja, denn .Value ist das Standard-Eigenschaft für .Range
deine Zeile: Var2 = Var1
ist gleichbedeutend mit: Var2.Value = Var1.Value
Womit natürlich etwas (Var2, wo auch immer das ist) geändert wird.
Gruß
Ralf

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:47:58
Range-Varible
Hallo Ralf,

ist gleichbedeutend mit: Var2.Value = Var1.Value
ist eine genauso falsche Interpretation wie Hajos Vermutung.
'Var2' ist zu diesem Zeitpunkt noch 'Nothing' und zeigt auf keinen Zellbereich. Deshalb kann dieser Variablen auch kein Wert zugeordnet werden.
Ich vermute Folgendes:
'es gibt diese Zeile im Code:
On Error Resume Next
'der definierte Name 'Beispiel' ist nicht vorhanden, oder es ist ein auf eine Tabelle bezogener Name und damit bleibt 'Var1' auf 'Nothing' durch den folgenden Befehl.
Set Var1 = ThisWorkbook.Names("Beispiel").RefersToRange
Es bleibt eben ein Gestochere im Nebel bei nur unvolständigen Programm-Fetzen.
Gruß von Luschi
aus klein-Paris

Anzeige
Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:31:39
Range-Varible
Hallo Kuttel,
wo ist der Code zu diesem Teil.
Dazu lese ich den Range nur einmal in eine globale Variable ein 

Du weist nur den Bereich zu.

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:37:34
Range-Varible
Hallo Hajo,

Du weist nur den Bereich zu.

ist definitiv eine Falschaussage! von Dir.
Gruß von Luschi
aus klein-Paris

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:37:34
Range-Varible
Hallo HaJo,
das (einmalige) Einlesen des Ranges sieht so aus:
Set Var1 = ThisWorkbook.Names("Beispiel").RefersToRange
Weiter unten in der ChangeProzedur will ich diesen Range dann einer anderen Variablen (Var2) zuweisen. Mit Set Var2 = Var1 geht es scheinbar auch nicht, da die Var2 leer bleibt...
Gruß
Kuttel

Anzeige
Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:42:51
Range-Varible
Hallo Kuttel,
Gut du glaubst mir also nicht, das Du nicht die Werte die Variable einliest. Ich bin dann raus.
Gruß Hajo

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:51:49
Range-Varible
Kann es sein, dass Du den Absender der Antwort auf die Du dich beziehst verwechselt hast...? ICH habe nirgends geschrieben, dass ich Dir nicht glaube...

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:34:39
Range-Varible
Hallo Kuttel,
bei mir wird in der Vba-Zeile 'Var2 = Var1' ein Laufzeitfehler 91 ausgelöst.
Set Var2 = Var1
funktioniert bei mir ohne Neuauslösen des Change()-Ereignisses.
Wahrscheinlich schwirrt in Deinem Code noch ein 'On Error ...'-Befehl rum,
der die Verarbeitung des Fehlers verhindert. Trotzdem dürfte keine
Wiederholung des Change()-Ereignisses auftreten.
Zeige mal ein bischen mehr vom Vba-Code.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:48:57
Range-Varible
OK, also ein bisschen mehr Code:
im Standard-Modul:

Global MerkBer as Range
Sub Pruefe()
Set MerkBer = ThisWorkbook.Names("Beispiel").RefersToRange
End Sub

Im Klassenmodul des Worksheets:

Private Sub Worksheet_Change(ByVal Ziele As Range)
Dim Var2 as Range
Call Pruefe
On Error Resume Next
Var2 = MerkBer
End Sub

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 13:00:20
Range-Varible
Hallo Kuttel,
man sollte auch prüfen, of definierte Namen noch existieren:

On Error Resume Next
Set MerkBer = ThisWorkbook.Names("Beispiel").RefersToRange
If MerkBer Is Nothing Then
MsgBox "Der 'Merkbereich' ist nicht definiert!", 16, "Fehler..."
On Error GoTo 0
Exit Sub
End If
'an andere Stelle
If Not (MerkBer Is Nothing) Then
Set Var2 = MerkBer
Else
MsgBox "Der 'Merkbereich' ist immer noch nicht definiert!", 16, "Fehler..."
On Error GoTo 0
Exit Sub
End If
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 13:05:42
Range-Varible
OK, vielen Dank. Das Kern-Problem war wohl die ungewollte .Value-Zuweisung. Werde nun alles noch mal mit Set Var2 = Var1 probieren und mich auch der Namens-Ranges annehmen...
Danke nochmals und Gruß
Kuttel

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:45:29
Range-Varible
Hi
mit Var2 = Var1
schreibst du die Werte aus dem Zellbereich Var1 in den Zellbereich Var2.
damit werden Zellwerte geändert und entsprechend das Change-Event ausgelöst
mit Set Var2 = Var1
weist du der Variablen Var2 den Zellbereich der Variablen Var2 zu.
Das hat auf die Zellen selbst keine Auswirkung und wird somit auch das Change-Event nicht auslösen.
generell gilt:
wenn du innerhalb des Change-Events Zellwerte veränderst, dann ruft sich das Change-Event selbst auf und du landest in einer Endlosschleife.
Vermeiden kann man die Endlosschleife so:
Application.EnableEvents = False
Hier die Befehle zum Ändern der Zellwerte
Application.EnableEvents = True
das Application.EnableEvents = True am Ende darf man nicht vergessen, weil die zuletzt gemachte Einstellung nach Makroende erhalten bleibt.
Sollte das ..=true ausbleiben, funktionieren danach deine Events nicht mehr und du musst den Befehl 1x im Direktfenster eingeben, um sie wieder zu aktivieren.
Gruß Daniel
uß Daniel

Anzeige
AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 12:53:58
Range-Varible
Hallo Daniel,
OK das leuchtet mir ein mit den .Values. Ich muss also in der Tat Set Var2 = Var1 vornehmen.
Danke und Gruß
Kuttel

Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 15:05:45
Range-Varible
Hallo Kuttel,
wozu soll das: Set Var2 = Var1 gut sein? Außer dass du dann zwei Objektvariablen hast welche die identische Speicheradresse beinhalten? Versteh mich nicht falsch, aber ich hinterfrage grundsätzlich jede Programmzeile die keinen Sinn hat. Zumindest versuche ich es.
Gruß
Nepumuk

AW: Kopieren von Range-Varible löst Change-Event aus?
22.07.2014 16:25:19
Range-Varible
Das Ganze dient quasi als Input für eine Subroutine (keine eigene Prozedur). Die Variable Var2 wird in der Subroutine verwendet. Vorher muss ich aber nach einigen Kriterien (z.B. auf welchen Tabellenblatt befinde ich mich gerade?) diese Variable füllen und aus diversen Ranges den richtigen zuweisen.
Zuvor hatte ich das dann immer per expliziter Zuweisung gemacht. Da es mehrere Subroutinen gibt und ich vermutlich Performance-Einbußen auf diese Weise habe wollte ich zumindest nur einmal explizit zuweisen und danach dann nur noch die Variable übergeben.
Im Moment zögere ich aber auch wieder, da ich nun vorab alle in Frage kommenden Ranges einmal einlese, darunter auch welche die ich im konkreten Fall vielleicht gar nicht brauche. Dem gegenüber mag die explizite Zuweisung vielleicht etwas langsamer sein, aber ich kann vorab prüfen und lese dann nur die Ranges ein, die ich wirklich brauche. Am Ende ist der Unterschied vielleicht gar nicht merklich und ich vertue viel Zeit mit dieser Art von Quellcode-Optimierung...
Gruß
Kuttel
Gruß
Kuttel
Anzeige

35 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige