Anzeige
Archiv - Navigation
1428to1432
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

VBA-Code aus Excel 2013 in 2010 nicht kompatibel

VBA-Code aus Excel 2013 in 2010 nicht kompatibel
03.06.2015 17:33:06
Christoph
Hallo liebes Forum,
ich habe ein kleines Problem. Folgender VBA-Code wurde in Excel 2013 erstellt, ist aber in 2010 nicht kompatibel. Beide Versionen sind Professional.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count  1 Then Exit Sub
If Not Intersect(Range("J10:J1000"), Target) Is Nothing Then
ActiveSheet.Unprotect "heute"
Target.Offset(0, 1).Value = Date
ActiveSheet.Protect "heute"
Else
If Not Intersect(Target, Range("Z10:Z100")) Is Nothing Then
ActiveSheet.Unprotect "heute"
Target.Offset(0, 1) = Target.Offset(0, 1) + 1
ActiveSheet.Protect "heute"
If Intersect(Target, Range("Z10:Z101")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect "heute"
With Sheets("CustomerVisits")
Z = .Range("G1")
.Range("G1") = .Range("G1") + 1
.Range("A" & Z) = Target.Value
.Range("B" & Z) = Target.Offset(0, -12).Value
.Range("C" & Z) = Target.Offset(0, -21).Value
End With
ActiveSheet.Protect "heute"
End If
End If
End Sub
Bin leider noch recht unversiert in der Geschichte.
Für euch wahrscheinlich ein Klacks.
Danke schonmal im Voraus.
Christoph

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code aus Excel 2013 in 2010 nicht kompatibel
03.06.2015 17:41:29
Nepumuk
Hallo,
du Überwachst Änderungen in der Tabelle und in der selben Prozedur änderst du in der Tabelle. Du läufst also in eine Schleife die Excel überfordert.
Test mal:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Z As Long
    If Target.Count = 1 Then
        If Not Intersect(Range("J10:J1000"), Target) Is Nothing Then
            ActiveSheet.Unprotect "heute"
            Application.EnableEvents = False
            Target.Offset(0, 1).Value = Date
            Application.EnableEvents = True
            ActiveSheet.Protect "heute"
        Else
            If Not Intersect(Target, Range("Z10:Z100")) Is Nothing Then
                ActiveSheet.Unprotect "heute"
                Application.EnableEvents = False
                Target.Offset(0, 1) = Target.Offset(0, 1) + 1
                ActiveSheet.Protect "heute"
                If Intersect(Target, Range("Z10:Z101")) Is Nothing Then Exit Sub
                ActiveSheet.Unprotect "heute"
                With Sheets("CustomerVisits")
                    Z = .Range("G1")
                    .Range("G1") = .Range("G1") + 1
                    .Range("A" & Z) = Target.Value
                    .Range("B" & Z) = Target.Offset(0, -12).Value
                    .Range("C" & Z) = Target.Offset(0, -21).Value
                End With
                Application.EnableEvents = True
                ActiveSheet.Protect "heute"
            End If
        End If
    End If
End Sub

Gruß
Nepumuk

Anzeige
AW: VBA-Code aus Excel 2013 in 2010 nicht kompatibel
05.06.2015 10:27:39
Christoph
Hallo Nepomuk,
so funktioniert es!
Vielen Dank!
Gruß,
Christoph

AW: VBA-Code aus Excel 2013 in 2010 nicht kompatibel
03.06.2015 17:51:28
Daniel
Hi
ich sehe da in dem code nichts, was Excel2013 spezifisch ist.
der Code läuft bei mir unter Excel 2010.
Zelle G1 muss halt eine Zahl > 0 enthalten
folgende Punkte solltet du verbessen:
1. wenn die Datei immer nur auf Excel 2007 und höher läuft, dann sollte man Target.Count durch Target.CountLarge ersetzen.
Excel hat mittlerweise mehr Zellen, als es mit .Count zählen kann und wenn du mal alle Zellen löschst, gibts nen Fehler (ok, wird hier nicht passieren, aber nur so generell)
2. wenn du das Blatt ansprechen willst, zu dem der Code gehört, dann nimm Me. statt ActiveSheet.
normalerweise beschreiben hier beide Ausdrücke das gleiche Blatt, aber wenn du beispielsweise im Einzelstep dein Makro testest und zwischen drin schaust, ob der Wert auch richtig in CustomViews eingetragen wird, ist dann dieses das ActiveSheet.
das passiert aber gerne mal, wenn du im Einzelstep testest dann zwischen drin nach "CustomViews" wechselst, um zu sehen was da passiert.
3. Wenn man im Change-Event Zellwerte auf diesem Blatt ändert, sollte man dieses in Application.EnableEvents = False ... Application.EnableEvents = True kapseln.
Ansosnten ruft sich das Change-Event an dieser stelle selbst auf, was unnötig die Laufzeit verlängert und ggf. zu eine Endlosschleife an selbstaufrufen führen kann.
If Not Intersect(Range("J10:J1000"), Target) Is Nothing Then
ActiveSheet.Unprotect "heute"
Application.EnableEvents = False
Target.Offset(0, 1).Value = Date
Application.EnableEvents = True
ActiveSheet.Protect "heute"
Else

aber wie gesagt, das sind nur optimierungen, grundsätzlich sollte dein Code auch unter 2010 laufen.
Gruß Daniel
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige