Hallo zusammen,
vorweg möchte ich sagen, dass ich überhaupt kein VBA-Kenner bin und mir die Programmteile zum grössten Teil zusammensuche und meinen Bedürfnissen anpasse.
Der Programmcode läuft soweit auch durch, jedoch ist die Schnelligkeit misserabel.
Im Excel-File gibt es zwei Blätter mit jeweils ca. 150 Checkboxen, welche mit der jeweiligen Zelle verknüpft werden müssen.
Dies erfolgt beim Öffnen der Datei:
Beim Aktivieren einer Checkbox wird in der rechten Zelle davon das Datum und der Username angegeben.
Dieser Code ist in einem Modul.
Nun wird abgefragt, ob sich in der Zelle rechts von der obigen Checkbox etwas ändert (-> Eingabe von Datum und Username).
Wenn ja, dann wird folgender Code ausgeführt:
HIer werden alle Zellen ab Zeile 9 bis unterste Zeile abgefragt und anschliessend wird in Zeile 8 die Ampel aufgrund der erledigten Arbeiten (abgehackte Checkboxen) berechnet und angezeigt.
Sind 100% erledigt dann ist die Ampel grün ansonsten rot.
Spoiler anzeigen
Wie bereits eingangs erwähnt funktioniert es soweit, leider viel zu langsam. Deshalb möchte ich euch fragen, ob man etwas am Code verbessern kann, so dass die Geschwindigkeit massiv erhöht wird.
Ich bin für jeden Input dankbar.
Gruss
Andreas
CodeTags und Spoiler gesetzt ~VaporiZed
vorweg möchte ich sagen, dass ich überhaupt kein VBA-Kenner bin und mir die Programmteile zum grössten Teil zusammensuche und meinen Bedürfnissen anpasse.
Der Programmcode läuft soweit auch durch, jedoch ist die Schnelligkeit misserabel.
Im Excel-File gibt es zwei Blätter mit jeweils ca. 150 Checkboxen, welche mit der jeweiligen Zelle verknüpft werden müssen.
Dies erfolgt beim Öffnen der Datei:
Beim Aktivieren einer Checkbox wird in der rechten Zelle davon das Datum und der Username angegeben.
Dieser Code ist in einem Modul.
Nun wird abgefragt, ob sich in der Zelle rechts von der obigen Checkbox etwas ändert (-> Eingabe von Datum und Username).
Wenn ja, dann wird folgender Code ausgeführt:
HIer werden alle Zellen ab Zeile 9 bis unterste Zeile abgefragt und anschliessend wird in Zeile 8 die Ampel aufgrund der erledigten Arbeiten (abgehackte Checkboxen) berechnet und angezeigt.
Sind 100% erledigt dann ist die Ampel grün ansonsten rot.
Visual Basic-Quellcode
- Sub Worksheet_Change(ByVal Target As Excel.Range)
- letzteZeile = Cells(Rows.Count, 10).End(xlUp).Row
- 'bei einer Änderung in der Spalte "E" wird das Makro Worksheet Activate ausgeführt.
- If Not Intersect(Target, Range("E" & ersteZeile & ":E" & letzteZeile)) Is Nothing Then
- Application.EnableEvents = False
- '*************************************************************************************************
- '** 1. FORMATIERUNG SPALTE A
- '*************************************************************************************************
- ' 1.1 Abfrage der Spalte E -> Funktionen für die Formatierung der Spalte A
- For i = ersteZeile To letzteZeile Step 3
- For j = 1 To 2 Step 1
- If IsEmpty(Cells(i, 5).Value) = True Then
- Cells(i, 1).Value = "0"
- Else: Cells(i, 1).Value = "1"
- End If
- i = i + 1
- Next j
- If j = 2 Then i = i + 3
- Next
- ' 1.2 Funktion für das Ampelsystem in Spalte A (Kreditoren)
- iPend = WorksheetFunction.CountIf(Range("A" & ersteZeile & ":A" & letzteZeile), "0") ' Abfrage Anzahl der pendenten Kreditorenrechnungen
- iErl = WorksheetFunction.CountIf(Range("A" & ersteZeile & ":A" & letzteZeile), "1") ' Abfrage Anzahl erledigte Kreditoren
- Range("A8").Value = iErl & " / " & iPend + iErl ' Berechnung in % der gesamthaft erledigten Kreditoren -> Ausgabe in Zelle A8
- If 100 / (iPend + iErl) * iErl = 100 Then ' wenn 100% erledigt dann...
- Range("A7").Interior.Color = RGB(128, 128, 128) ' Färbe Zelle dunkelgrau
- Range("A7").Value = "n"
- Range("A7").Font.ColorIndex = 4 ' Schriftfarbe grün -> Ampel grün
- Else
- Range("A7").Value = "n"
- Range("A7").Font.ColorIndex = 3 ' Schriftfarbe rot -> Ampel rot
- End If
- '************************************************************************************************
- '** 2. FORMATIERUNG SPALTE B
- '************************************************************************************************
- ' 2.1 Abfrage der Spalte E -> Funktionen für die Formatierung der Spalte B
- For i = (ersteZeile + 2) To letzteZeile Step 3
- For j = 1 To 2 Step 1
- If IsEmpty(Cells(i, 5).Value) = True Then
- Cells(i, 2).Value = "0"
- Else: Cells(i, 2).Value = "1"
- End If
- i = i + 1
- Next j
- If j = 2 Then i = i + 3
- Next
- ' 2.2 Funktion für das Ampelsystem in Spalte B (Debitoren)
- iPend = WorksheetFunction.CountIf(Range("B" & ersteZeile & ":B" & letzteZeile), "0") ' Abfrage Anzahl der pendenten Kreditorenrechnungen
- iErl = WorksheetFunction.CountIf(Range("B" & ersteZeile & ":B" & letzteZeile), "1") ' Abfrage Anzahl erledigte Kreditoren
- Range("B8").Value = iErl & " / " & iPend + iErl ' Berechnung in % der gesamthaft erledigten Kreditoren -> Ausgabe in Zelle A8
- If 100 / (iPend + iErl) * iErl = 100 Then ' wenn 100% erledigt dann...
- Range("B7").Interior.Color = RGB(128, 128, 128) ' Färbe Zelle dunkelgrau
- Range("B7").Value = "n"
- Range("B7").Font.ColorIndex = 4 ' Schriftfarbe grün -> Ampel grün
- Else
- Range("B7").Value = "n"
- Range("B7").Font.ColorIndex = 3 ' Schriftfarbe rot -> Ampel rot
- End If
- '************************************************************************************************
- '** 3. FORMATIERUNG SPALTE C
- '************************************************************************************************
- ' 3.1 Abfrage der Spalte E -> Funktionen für die Formatierung der Spalte C
- For i = (ersteZeile + 4) To letzteZeile Step 5
- If IsEmpty(Cells(i, 5).Value) = True Then
- Cells(i, 3).Value = "0"
- Else: Cells(i, 3).Value = "1"
- End If
- Next
- ' 5.2 Funktion für das Ampelsystem in Spalte C (Netting)
- iPend = WorksheetFunction.CountIf(Range("C" & ersteZeile & ":C" & letzteZeile), "0") ' Abfrage Anzahl der pendenten Kreditorenrechnungen
- iErl = WorksheetFunction.CountIf(Range("C" & ersteZeile & ":C" & letzteZeile), "1") ' Abfrage Anzahl erledigte Kreditoren
- Range("C8").Value = iErl & " / " & iPend + iErl ' Berechnung in % der gesamthaft erledigten Kreditoren -> Ausgabe in Zelle A8
- If 100 / (iPend + iErl) * iErl = 100 Then ' wenn 100% erledigt dann...
- Range("C7").Interior.Color = RGB(128, 128, 128) ' Färbe Zelle dunkelgrau
- Range("C7").Value = "n"
- Range("C7").Font.ColorIndex = 4 ' Schriftfarbe grün -> Ampel grün
- Else
- Range("C7").Value = "n"
- Range("C7").Font.ColorIndex = 3 ' Schriftfarbe rot -> Ampel rot
- End If
- Application.ScreenUpdating = True
- Application.EnableEvents = True
- End If
- End Sub
Wie bereits eingangs erwähnt funktioniert es soweit, leider viel zu langsam. Deshalb möchte ich euch fragen, ob man etwas am Code verbessern kann, so dass die Geschwindigkeit massiv erhöht wird.
Ich bin für jeden Input dankbar.
Gruss
Andreas
CodeTags und Spoiler gesetzt ~VaporiZed
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()