Macro Geschwindigkeit
17.10.2004 00:30:37
Rolf
vor ein paar Monaten hat mir hier ein sehr kompetenter Fachmann, ein tolles Makro geschrieben und mir damit sehr geholfen.
Darin ging es um die Darstellung verschiedener Werte in Zeile 3 wenn ein bestimmter Begriff in Zeile 1 geschrieben wird. Nachdem in Zeile 2 ein anderer Wert eingetragen wird, soll eventuell der Wert in Zeile 1 in Klammer gesetzt werden. Ich stelle das Makro dazu weiter unten ein.
Dazu werden die Kriterien und Werte in einem extra Datenblatt gepflegt.
Das funktioniert alles super, wenn man nur drei bsi vier Datenblätter in der Tabelle hat. Aber..... und nun kommt meine Frage.
Mittlerweile ist die Excelttabelle auf 13 Datenblätter angewachsen (alle in einer Datei). Im 14. Datenblatt sind die Kriterien hinterlegt.
Es dauert nun bis zu 80 Sekunden, bis ein Wert in einer Zelle angezeigt wird. Die Prozentanzeige, links unten im Datenblatt kriecht förmich vor sich hin, wenn eine Eingabe getätigt wird.
Kann man das irgendwie beschleunigen? Ich habe das Macro in jede Tabelle einkopiert. Vieleicht habe ich das auch falsch gemacht?
Ich habe kein Macrowissen.
Vielleicht könnt ihr mir helfen?
Ich bedanke mich schon einmal im Voraus, dass sich überhaupt jemand die Mühe macht mir zu helfen.
Auf Wunsch schicke ich euch auch gerne die Datei via eMail zu. Sie ist aber ca. 3 MB groß
Viele Grüße
Rolf
Hier kommt das Makro:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wks As Worksheet
Dim iCol As Integer
Dim iHilf As Integer
If Target.Row Mod 3 = 0 Then Exit Sub
iHilf = Int((Target.Row + 2) / 3) - 1
Set wks = Worksheets("Data")
iCol = Target.Column
Application.EnableEvents = False
On Error GoTo ERRORHANDLER
If Not IsError(Application.Match(Cells(iHilf * 3 + 1, iCol).Value, wks.Columns(1), 0)) And _
Not IsError(Application.Match(Cells(iHilf * 3 + 2, iCol).Value, wks.Columns(3), 0)) Then
Cells(iHilf * 3 + 1, iCol) = "(" & Cells(iHilf * 3 + 1, iCol) & ")"
End If
If Not IsError(Application.Match(Cells(iHilf * 3 + 1, iCol).Value, wks.Columns(1), 0)) And _
IsError(Application.Match(Cells(iHilf * 3 + 2, iCol).Value, wks.Columns(3), 0)) Then
Cells(iHilf * 3 + 1, iCol).NumberFormat = "@"
End If
If Cells(iHilf * 3 + 2, iCol) = "" And Left(Cells(iHilf * 3 + 1, iCol), 1) = "(" Then
Cells(iHilf * 3 + 1, iCol) = Mid(Cells(iHilf * 3 + 1, iCol), 2, 1)
End If
ERRORHANDLER:
Application.EnableEvents = True
End Sub