Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1668to1672
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 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

    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.
    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!
    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

    300 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige