Makro läuft nach Wechsel auf Excel 2019 nicht mehr
#1
Sad 
Hallo zusammen,

bei einer externen Serverumgebung auf meiner Arbeit wurde Excel 2013 durch 2019 ersetzt (unklar was noch am System geändert wurde). Seitdem schmiert mir Excel beim durchlaufen eines Makros ab. Ehe ich mich jetzt mit dem IT Support des anderen Landes in Verbindung setze, wollte ich sicherstellen, dass sich bei Excel 2019 nicht vielleicht etwas geändert hat und ich mein Makro nur anpassen muss.

Auf meiner lokalen Umgebung mit Excel 2016 läuft es weiterhin ohne Probleme.


Das Makro soll nur die Formeln in allen Zellen der angegeben Tabellenblätter durch feste Werte ersetzen. 

Code:
Sub Formel_entfernen_speichern()

Sheets("IS Total").Select
    Sheets(Array("Tabelle1", "Tabell2", "Tabelle3", "Tabelle4")).Select

Dim i As Integer

For i = 1 To Sheets.Count
    With Sheets(i)
With Cells
  .Copy
  .PasteSpecial Paste:=xlPasteValues
End With

Application.CutCopyMode = False

    End With
Next

   
    Application.DisplayAlerts = False
 
End Sub

Wenn ich das Makro in Einzelschritten laufen lasse, läuft es einmal bis zu "Next" durch, spring dann wieder zu "With Sheets(i)" und läuft bis ".PasteSpecial Paste:=xlPasteValues" ehe ich die Meldung erhalte "Microsoft Excel has stopped working -> Restart the programm"


Vielen Dank vorab für jeden Tipp.

VG
Chris
Antworten Top
#2
Das Makro ist ein bisschen löchrig. Da hat zwar jemand ein Konstrukt gebaut wie

With Sheet(xyz)

   With Cells

aber vergessen einen Punkt vor Cells zu setzen, womit nicht unbedingt eine Verbindung zu dem Sheet(xyz) mehr bestehen muss. Keine Ahnung ob das was mit deinem Fehler zu tun hat, ist aber auffällig.

Hier mal etwas angepasster code

Code:
Sub Formel_entfernen_speichern()

Sheets("IS Total").Select '<-wird durch die nächste Zeile überschrieben, kann also weg
Sheets(Array("Tabelle1", "Tabell2", "Tabelle3", "Tabelle4")).Select '<-wird im Code nicht gebraucht, kann also auch weg

Dim i As Integer

For i = 1 To Sheets.Count
    With Sheets(i)
        With .Cells '<-hier muss ein Punkt, denn es soll an Sheets(i) geknüpft werden
          .Copy
          .PasteSpecial Paste:=xlPasteValues
        End With
    End With
Next

End Sub

Ich habe deinen Code gleich mal noch ein wenig aufgehübscht damit er ein besseres "User-Erlebnis" bietet Smile

Code:
Sub Formel_entfernen_speichern()

Application.ScreenUpdating = False

Dim i         As Integer
Dim lastSheet As Worksheet

Set lastSheet = ActiveSheet

For i = 1 To Sheets.Count
    With Sheets(i)
        .Activate
        With .Cells
          .Copy
          .PasteSpecial Paste:=xlPasteValues
        End With
        .Cells(1, 1).Select
    End With
Next

lastSheet.Activate

Set lastSheet = Nothing

Application.ScreenUpdating = True
Application.CutCopyMode = False

End Sub


Viel Glück
Antworten Top
#3
Hallo

das müsste reichen

Code:
Sub Formel_entfernen_speichern()
    Dim SH
   
    For Each SH In Array(Sheets("Tabelle1"), Sheets("Tabelle2"), Sheets("Tabelle3"), Sheets("Tabelle4"))
   
        SH.UsedRange.Value = SH.UsedRange.Value
    Next

End Sub

LG UweD
Antworten Top
#4
Hallo zusammen,

der . vor Cells hat den Fehler schon behoben. Interessant, dass es den früheren Excel Versionen egal war.

Der Bericht ist ziemlich groß, mit einer ganzen Menge an VBA Code. Ein externer Programmierer hat die vor Jahren aufgebaut. Danach wurde an der Datei aber noch viel geändert. Nun ist viel Code nicht mehr relevant aber durch die Komplexität kann man diesen nicht einfach so löschen. Ich muss nun jedoch auch Anpassungen machen und renne dann immer mal wieder in so Fehler. ;)

Eure Ideen zur Vereinfachungen werde ich mir auch noch ansehen und gebe dann mal eine Rückmeldung.


Das Sheets Array ist schon wichtig, da die Formeln in manchen Arbeitsblättern beibehalten werden sollen. Vermutlich muss ich den Code sogar so erweitern, dass nur bei bestimmten Bereiche der Tabellenblätter die Formeln entfernt werden.


Vielen Dank soweit!
Antworten Top
#5
Ist ja witzig...das Sheets Array wurde nie angewendet Wink

for 1 to Sheets.count

 sheets(i)

überschreibt das sozusagen und geht trotzdem durch alle Sheets durch.

Wenn schon, müsste das so aussehen:

for i = 1 to Sheets(Array("Tabelle1", "Tabell2", "Tabelle3", "Tabelle4")).count

Ach nein das ist auch Quatsch....so wie Uwe das geschieben hat muss es dann aussehen Smile
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste