Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Code funktioniert in neuer Excel-Verion nicht

Forumthread: VBA Code funktioniert in neuer Excel-Verion nicht

VBA Code funktioniert in neuer Excel-Verion nicht
15.01.2019 15:13:36
Martin
Hallo zusammen,
generell programmiere ich mit Excel VBA 2010. Nun habe ich einen Code auf einem Rechner mit Excel 2016 ausprobiert und musste leider feststellen, dass der Code nicht mehr durchläuft.
Andere Beiträge weisen auf falsche Verweise der Biliotheken hin.
In Excel 2010 sind die folgenden Bibliotheken verwiesen:
  • Visual Basic For Appilcations

  • Microsoft Excel 14.0 Object Libary

  • OLE Automation

  • Microsoft Office 14.0 Object Libary

  • Microfosft Forms 2.0 Object Libary

  • In Excel 2016 sind die folgenden Bibliotheken verwiesen:
  • Visual Basic For Appilcations

  • Microsoft Excel 16.0 Object Libary

  • OLE Automation

  • Microsoft Office 16.0 Object Libary

  • Microfosft Forms 2.0 Object Libary

  • Der Unterschied liegt demnach in der Microsoft Excel und Office Bibilothek. Wie bzw. in welche Richtung muss ich nun die Bibliotheken anpassen? Muss ich eine Anpassung dann an jedem Rechner mit Excel 2016 vornehmen, oder kann ich das direkt in der Datei verweisen?
    Nachfolgend noch ein Beispiel an welcher Zeile der Code in Excel 2016 abstürzt:
    Worksheets(Overview).Range(Cells(Row, 8), Cells(LastRow, 10)).ClearContents
    
    Diese Zeile funktioniert in Excel 2010 wunderbar.
    Vielen Dank im voraus und viele Grüße
    Martin
    Anzeige

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    15.01.2019 15:26:51
    onur
    Keine Ahnung, ob es bei einer älteren Excel-Version anders ist, aber:
    Wenn es ein ANDERES Blatt betrifft:
    With Worksheets(Overview)
    .Range(.Cells(Row, 8), .Cells(LastRow, 10)).ClearContents
    End With
    

    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    15.01.2019 16:15:05
    Martin
    Was heißt "ein ANDERES Blatt"?
    Die Zeile funktioniert in Excel 2010 wunderbar. Ich frage mich, warum es in Excel 2016 nicht funktioniert.
    Anzeige
    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    15.01.2019 16:21:03
    onur
    Der Code funktioniert nur, wenn er im Blatt "Overview" steht - oder?
    Anderes Blatt heisst: NICHT das aktuelle bzw das Blatt, wo der Code drin steht.
    Wenn du dich nicht auf dem Blatt befindest, auf das der Code zugreift, musst du vor jedem Range oder Cells den Blattnamen mit angeben, oder wie bei meinem Beispiel mit "With" arbeiten und vor jedem Range oder Cells einen Punkt schreiben.
    Anzeige
    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    15.01.2019 16:33:29
    Daniel
    Hi
    du schreibst: dass der Code abstürzt.
    unter "abstürzten" versteht man im allgemeinen, dass die Bearbeitung ohne weiteren Kommentar abbricht und zumindest Excel neu gestartet werden muss (im WorstCase sogar das Betriebssytem)
    Sollte jedoch nur eine Meldung erscheinen, dass ein Fehler aufgetreten ist, so spricht man von einem "Fehlerabbruch" und du solltest uns zusätlich noch mitteilen, wie der Fehlertext und die Fehlernummer aus der Mitteilung lauten.
    grundsätzlich enthält die von dir gezeigte Codezeile nur Elemente, die in 2010 und 2016 unverändert sind. Dh dein Code sollte in beiden Excelversionen gleich gut funktionieren oder eben auch nicht.
    der Grundsatzfehler in diesem Code wurde ja schon von ONUR angesprochen, dh das Worksheet(Overview) muss vor den beiden Cells stehen und nicht vor der Range.
    (nur wenn der Code in einem Tabellenblattmodul steht, muss die Tabellenblattangabe nicht nur vor den beiden Cells, sondern auch vor der Range stehen)
    der von dir gezeigte Code funktioniert nur dann, wenn das Worksheet(Overview) zufälligerweise das aktive Sheet ist.
    Das gilt aber in Excel 2010 wie in Excel 2016.
    Weiterhin ist der Variablenname "Row" kritisch zu bewerten, da du hier ein VBA-Schlüsselwort als Variablenname verwendest.
    Das kann funktionieren, es kann aber auch daneben gehen. (je nachdem in welcher Situation man sich befindet)
    Wenn du also das mit dem Worksheet korrigiert hast und der Fehler immer noch auftritt, dann solltst du mal einen Haltepunkt an dieser Stelle setzen und die Variablenwerte überprüfen (Overview, Row, LastRow). Overview muss einen gültigen Tabellenblattnamen enthalten, Row und LastRow müssen gültige Zeilennummern sein (größer 0)
    das einzige, was bei einem Versionswechsel gerne mal passieren kann, ist das eine Verweise "korrupt" sind (erkennst du am Text in der Verweisliste), dann funktionieren normale VBA-Funktionen nicht mehr.
    hier reicht es dann aus, bei solchen Verweisen einfach den Haken zu entfernen.
    Gruß Daniel
    Anzeige
    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    16.01.2019 14:01:02
    Martin
    Hallo Onur,
    hallo Daniel,
    danke für Eure Hinweise.
    Ich habe nun die Variable "Row" in "RowTMP" geändert und auch Onurs Vorschlag hinsichtlich des "Range" übernommen.
    Leider bekomme ich immer noch einen Fehlerabbruch mit der Fehlermeldung "Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler".
    Dabei wird die mittlere Zeile aus dem folgenden Code markiert:
    With Worksheets(Overview)
    .Range(Cells(RowTMP, 8), Cells(RowTMP, 10)).ClearContents
    End With
    
    Kurioser Weise tritt dieser Fehler nur bei ersten Mal auf. Führt man das gleich Makro nochmal aus, so funktioniert es dann.
    Hintergrund: Das Makro wird über einen Button aktiviert. Zu Beginn des hinterlegten Makros wird zunächst geguckt, in welchem Blatt ich mich befinde:
    Overview = ActiveSheet.Name
    

    Könnt Ihr Euch das erklären?
    Wie gesagt, in Excel 2010 läuft alles wunderbar...
    Viele Grüße
    Martin
    Anzeige
    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    16.01.2019 14:21:12
    Daniel
    hier steht vor den beiden Cells immer noch kein Tabellenblatt!
    du hast die WITH-Klammer zwar angelegt, aber nur für RANGE angewendet und nicht für die CELLS.
    daher funktioniert dein Code immer nur dann, wenn zufälligerweise das sheet Overview aktiv ist.
    der Punkt muss aber vor die beiden Cells!, denn es sind die beiden Cells, die die Range definieren und nicht umgekehrt.
    With Worksheets(Overview)
    .Range(.Cells(RowTMP, 8), .Cells(RowTMP, 10)).ClearContents
    End With
    

    meine Empfehlung wäre hier ja, denn Zellbereich über Resize beschreiben, dann musst du das Tabellenblatt nur 1x angeben und nicht mehrfach:
    Worksheets(Overview).Cells(RowTMP, 8).Resize(, 3).ClearContents
    
    Gruß Daniel
    Anzeige
    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    16.01.2019 14:43:18
    Martin
    Sorry, das habe ich verbockt.
    Habe es ausprobiert. Mit dem folgenden Code funktioniert es:
    With Worksheets(Overview)
    .Range(Worksheets(Overview).Cells(RowTMP, 8), Worksheets(Overview).Cells(LastRow, 10)). _
    ClearContents
    End With
    
    Danke für Eure Hilfe!
    Anzeige
    AW: VBA Code funktioniert in neuer Excel-Verion nicht
    16.01.2019 14:28:39
    Martin
    hier noch der Code, welcher durch einen Button aktiviert wird. Das Blatt, in welchem der Button ist, ist dann die Variable "Overview":
    Option Explicit
    Sub Auswerten()
    Dim Overview As String
    Dim Calculator As String
    Dim RowTMP As Integer
    Dim RowStart As Integer
    Dim LastRow As Integer
    ' Namen der Tabellenblätter setzen
    Overview = ActiveSheet.Name
    If Range("H1").Value = "ENTRY" Then
    Calculator = "CalculatorEntry"
    ElseIf Range("H1").Value = "EXIT" Then
    Calculator = "CalculatorExit"
    End If
    'Bildschirmupdate ausschalten
    Application.ScreenUpdating = False
    'Erste Zeile der Auswertung setzen
    RowTMP = 22
    RowStart = RowTMP
    ' Spalte H, I, J leeren
    LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    With Worksheets(Overview)
    .Range(.Cells(RowTMP, 8), .Cells(LastRow, 10)).ClearContents
    End With
    'Auswerteschleife
    While Worksheets(Overview).Cells(RowTMP, 1)  ""
    RowTMP = RowTMP + 1
    Wend
    Application.CutCopyMode = False
    'Bildschirmupdate einschalten
    Application.ScreenUpdating = True
    End Sub
    

    PS: auch flackert der Bildschirm wieder in einigen Teilen (z.B. die rechte Verschiebleiste von Excel)
    Anzeige
    ;
    Anzeige

    Infobox / Tutorial

    VBA Code anpassen für unterschiedliche Excel-Versionen


    Schritt-für-Schritt-Anleitung

    1. Überprüfen der Bibliotheken: Öffne den VBA-Editor (Alt + F11) und gehe zu Extras > Verweise. Achte darauf, dass die richtigen Bibliotheken für Deine Excel-Version aktiviert sind. In Excel 2010 benötigst Du:

      • Visual Basic For Applications
      • Microsoft Excel 14.0 Object Library
      • OLE Automation
      • Microsoft Office 14.0 Object Library
      • Microsoft Forms 2.0 Object Library

      Für Excel 2016 sind die entsprechenden Bibliotheken:

      • Visual Basic For Applications
      • Microsoft Excel 16.0 Object Library
      • OLE Automation
      • Microsoft Office 16.0 Object Library
      • Microsoft Forms 2.0 Object Library
    2. Anpassung des Codes: Stelle sicher, dass der Code korrekt auf das Arbeitsblatt verweist, insbesondere wenn Du den Code von einem Blatt auf ein anderes überträgst. Nutze den Punkt . vor Cells und Range, um auf das entsprechende Arbeitsblatt zuzugreifen:

      With Worksheets(Overview)
         .Range(.Cells(RowTMP, 8), .Cells(RowTMP, 10)).ClearContents
      End With
    3. Variablen überprüfen: Achte darauf, dass alle Variablen korrekt definiert sind. Es ist ratsam, die Variable "Row" in "RowTMP" zu ändern, um Konflikte mit VBA-Schlüsselwörtern zu vermeiden.

    4. Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um Laufzeitfehler besser zu diagnostizieren. Du kannst beispielsweise den Fehlertext und die Fehlernummer ausgeben, um Hinweise auf das Problem zu erhalten.


    Häufige Fehler und Lösungen

    • Laufzeitfehler 1004: Dieser Fehler kann auftreten, wenn der Code auf ein nicht existierendes Arbeitsblatt zugreift oder wenn die Zellreferenzen ungültig sind. Stelle sicher, dass „Overview“ ein gültiger Tabellenblattname ist.

    • Verweisprobleme: Wenn die Bibliotheken in den Verweisen „korrupt“ sind, entferne den Haken und setze ihn erneut. Dies kann oft Probleme mit Excel VBA lösen.

    • Aktives Blatt: Wenn der Code in einem anderen Blatt als „Overview“ ausgeführt wird, kann es zu Fehlern kommen. Verwende den vollständigen Verweis, um sicherzustellen, dass Du immer das richtige Blatt ansprichst.


    Alternative Methoden

    • Resize-Methode: Anstatt Range und Cells separat zu nutzen, kannst Du die Resize-Methode verwenden, um den Zellbereich effizient zu definieren und den Code kürzer zu gestalten:

      Worksheets(Overview).Cells(RowTMP, 8).Resize(, 3).ClearContents
    • Fehlerprotokollierung: Füge eine Fehlerprotokollierung in Deinen Code ein, um die Fehlerursache besser nachvollziehen zu können. Dies kann über eine einfache MsgBox oder das Schreiben in eine Log-Datei geschehen.


    Praktische Beispiele

    Hier siehst Du ein Beispiel für ein VBA-Skript, das mit Excel 2010 und Excel 2016 funktioniert:

    Option Explicit
    Sub Auswerten()
        Dim Overview As String
        Dim RowTMP As Integer
        Dim LastRow As Integer
    
        'Aktives Blatt benennen
        Overview = ActiveSheet.Name
    
        'Erste Zeile der Auswertung setzen
        RowTMP = 22
        LastRow = Worksheets(Overview).Cells(Rows.Count, 1).End(xlUp).Row
    
        'Spalten H bis J leeren
        With Worksheets(Overview)
            .Range(.Cells(RowTMP, 8), .Cells(LastRow, 10)).ClearContents
        End With
    End Sub

    Tipps für Profis

    • Verwendung von Option Explicit: Stelle sicher, dass Du Option Explicit am Anfang Deines Moduls einfügst. Dies zwingt Dich, alle Variablen zu deklarieren, was Fehler vorbeugt.

    • Vermeide globale Variablen: Halte Deinen Code modular, indem Du globale Variablen vermeidest und stattdessen lokale Variablen verwendest.

    • Testen in verschiedenen Versionen: Wenn Du Codes schreibst, teste sie in verschiedenen Excel-Versionen (z.B. Excel 2010 und Excel 2016), um sicherzustellen, dass sie überall funktionieren.


    FAQ: Häufige Fragen

    1. Warum funktioniert mein VBA-Code in Excel 2010, aber nicht in Excel 2016? Der Code könnte aufgrund unterschiedlicher Bibliotheksversionen oder spezifischer Änderungen in Excel 2016 nicht korrekt funktionieren. Überprüfe die Verweise und passe sie entsprechend an.

    2. Was bedeutet der Laufzeitfehler 1004? Dieser Fehler tritt auf, wenn ein Anwendungs- oder objektdefinierter Fehler auftritt, häufig aufgrund eines ungültigen Verweises oder einer nicht vorhandenen Zelle.

    3. Wie kann ich sicherstellen, dass der Code in verschiedenen Excel-Versionen funktioniert? Verwende relative Verweise auf die Excel-Objekte und teste Deinen Code in den entsprechenden Versionen. Halte Dich an Best Practices in der Programmierung und stelle sicher, dass alle Variablen korrekt deklariert sind.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige