Makro ausführen?

08/07/2014 - 08:22 von Peter Schuerer | Report spam
Hallo Claus und Hallo Zusammen,

beim verlassen einer Tabelle möchte ich folgendes Makro ausführen:

Private Sub Worksheet_Deactivate()
'Code Stillstand wird in Spalte AA aktualisiert

Dim rngC As Range

rngC = [Tabelle16].Range("Y3")

If Range("Y1").Value = Range("AA1").Value Then
Exit Sub
End If

Application.ScreenUpdating = False

rngC.Activate
For i = 1 To 6000
If ActiveCell.Value <> "x" Then
Selection.Offset(0, 2).Value = Left(ActiveCell.Value, 2)
End If
ActiveCell.Offset(1, 0).Activate

If ActiveCell.Value = 0 Then
Exit Sub
End If

Next i
End Sub

Starte ich das Makro als Modul, wird es normal ausgeführt und funktioniert.
Beim verlassen der Tabelle funktioniert es nicht und es kommt bei:
rngC = [Tabelle16].Range("Y3")
eine Fehlermeldung.
Hoffe auf Hilfe.

Danke und Gruß
Peter
 

Lesen sie die antworten

#1 Claus Busch
08/07/2014 - 08:53 | Warnen spam
Hallo Peter,

Am Tue, 08 Jul 2014 08:22:29 +0200 schrieb Peter Schuerer:

da sind einige Dinge zu verbessern und es sind zwei Fehler drin.

rngC = [Tabelle16].Range("Y3")



Ein Range ist ein Objekt und muss mit Set initialisiert werden:
Set rngC = ...

rngC.Activate
For i = 1 To 6000
If ActiveCell.Value <> "x" Then
Selection.Offset(0, 2).Value = Left(ActiveCell.Value, 2)
End If
ActiveCell.Offset(1, 0).Activate



Hier würde ich nicht alle Zeilen aktivieren, das verlangsamt die
Ausführung. Du kannst direkt referenzieren ohne zu aktivieren
Das Bildschirmflackern hast du mit Application.ScreenUpdating = False
abgeschaltet, hast es am Ende aber nicht mehr eingeschaltet.

Dann ist mir unklar, warum in der Schleife nach Wert 0 gesucht wird. Du
kannst doch die letzte Zeile erfassen und dann den Code bis dorthin
laufen lassen:

Private Sub Worksheet_Deactivate()
'Code Stillstand wird in Spalte AA aktualisiert

Dim i As Long
Dim LRow As Long

If Range("Y1").Value = Range("AA1").Value Then
Exit Sub
End If

Application.ScreenUpdating = False

LRow = Cells(Rows.Count, "Y").End(xlUp).Row

For i = 3 To LRow
If Cells(i, "Y") <> "x" Then
Cells(i, "Y").Offset(0, 2).Value = Left(Cells(i, "Y"), 2)
End If
Next i

Application.ScreenUpdating = True
End Sub



Mit freundlichen Grüßen
Claus
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional

Ähnliche fragen