Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1272to1276
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
Problem in For Each Schleife
Peter
Guten Tag
Für Kursumrechnungen habe ich mir eine Schleife gebastelt, die wie folgt aussieht und beim Change-Ereignis einer Combobox (Waehrung) aufgerufen wird:
Sub Umrechnung()
Dim zelle As Range
For Each zelle In objtest
If zelle.Value > 0 And Waehrung.Value = "EUR" Then
zelle.Value = zelle.Value / kurs
ElseIf zelle.Value > 0 And Waehrung.Value  "EUR" Then
zelle.Value = zelle.Value * kurs
End If
Next zelle
End Sub
In einem Hauptmodul habe ich alle Objekte definiert, auf welche dann von den einzelnen Subprozeduren zugegriffen werden kann. So habe ich auch das Objekt objtest definiert resp. dem Objekt einen Zellbereich über Set zugeordnet. Beim Ausführen meiner Prozedur bekomme ich immer die Fehlermeldung Laufzeitfehler 424, Objekt erforderlich. Ich vermute, dass diese Meldung mit Zelle zu tun hat. Ich deklariere zuerst die Zelle als ein Range-Objekt. Hab dies mal so in einem Fachbuch gelesen. Man müsste wohl dieser Zelle auch noch einen Bereich zuordnen ev. liegt hier der Fehler.
Habt Ihr eine Idee?
Vielen Dank.
Gruss
Peter

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Problem in For Each Schleife
25.07.2012 12:53:47
Sheldon
Hi Peter,
wenn du eine Variable in einem Sub definierst, dann ist sie außerhalb dieses Subs nicht existent. Definier daher die Variable global und ordne ihr dann im Hauptsub den Zellbereich zu. Also muss im Grunde nur die Dim-Zeile ausziehen aus dem Sub.
Gruß
Sheldon
AW: Problem in For Each Schleife
25.07.2012 14:21:55
Peter
Hallo Sheldon
Danke für Deine Antwort. Ich muss das Ganze anders lösen. Wenn ich ca. 1500 Datensätze per VBA ändern will, dann läuft mir die For Each Variante viel zu langsam. Gibt es ev. noch eine andere Möglichkeit, die schneller ist?
Danke.
Gruss
Peter
AW: Problem in For Each Schleife
25.07.2012 14:39:06
Sheldon
Hi Peter,
versuch mal das:
Sub Umrechnung()
Dim zelle As Range
   Application.Screenupdating = False
For Each zelle In objtest
If zelle.Value > 0 And Waehrung.Value = "EUR" Then
zelle.Value = zelle.Value / kurs
ElseIf zelle.Value > 0 And Waehrung.Value  "EUR" Then
zelle.Value = zelle.Value * kurs
End If
Next zelle
  Application.Screenupdating = True 
End Sub

Gruß
Sheldon
Anzeige
AW: Problem in For Each Schleife
25.07.2012 14:51:35
IngGi
Hallo Peter,
wesentlich schneller wird das Ganze, wenn du den gesamten Zellbereich zunächst in ein Array einliest, dann sämtliche Änderungen an diesem Array vornimmst und das Array schließlich wieder in den Zellbereich zurückschreibst. Im folgenden Beispiel werden die Werte im Zellbereich A1:A5 verdoppelt:
Sub Verdoppeln()
Dim vArray As Variant
Dim loZeile As Long
'Zellbereich in Array einlesen
vArray = Range("A1:A5")
'Änderungen der Zellwerte im Array per Schleife vornehmen
For loZeile = 1 To UBound(vArray, 1)
vArray(loZeile, 1) = vArray(loZeile, 1) * 2
Next 'loZeile
'Array in Zellbereich zurückschreiben
Range("A1").Resize(UBound(vArray, 1), UBound(vArray, 2)) = vArray
End Sub

Gruß Ingolf
Anzeige
AW: Problem in For Each Schleife
25.07.2012 16:58:17
Peter
Hallo zusammen
Vielen Dank. Hat alles bestens geklappt.
Lieber Gruss
Peter

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige