Microsoft Excel

Herbers Excel/VBA-Archiv

Problem in For Each Schleife | Herbers Excel-Forum


Betrifft: Problem in For Each Schleife von: Peter
Geschrieben am: 25.07.2012 11:59:38

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

  

Betrifft: AW: Problem in For Each Schleife von: Sheldon
Geschrieben am: 25.07.2012 12:53:47

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


  

Betrifft: AW: Problem in For Each Schleife von: Peter
Geschrieben am: 25.07.2012 14:21:55

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


  

Betrifft: AW: Problem in For Each Schleife von: Sheldon
Geschrieben am: 25.07.2012 14:39:06

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


  

Betrifft: AW: Problem in For Each Schleife von: IngGi
Geschrieben am: 25.07.2012 14:51:35

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


  

Betrifft: AW: Problem in For Each Schleife von: Peter
Geschrieben am: 25.07.2012 16:58:17

Hallo zusammen

Vielen Dank. Hat alles bestens geklappt.

Lieber Gruss

Peter


Beiträge aus den Excel-Beispielen zum Thema "Problem in For Each Schleife"