Hilfe für vorhandenes Makro
21.09.2005 13:38:45
Daniel
Matthias G hatte mit hier im Forum vor ein paar Wochen unten stehendes Makro geschrieben, das Summen über bestimmte Tabellenblätter ausführt.
Dieses Makro wird alle x Minuten ausgeführt.
Leider bin ich erst jetzt dazu gekommen, das Ganze richtig zu testen.
Dabei hätte ich ein paar grundsätzliche Dinge gernen anders gelöst. Ich hoffe mir kann hier jemand helfen.
Folgene Punkte würde ich gernen ändern:
- Wenn ich zwei Mappen geöffnet habe, und die Mappe geöffnet habe, in der nicht dieses Makro ist, und Makrow ird wie oben erwähnt alle x Minuten ausgeführt, so kommt ein Fehler. Nämlich INdex außerhalb des gültigen bereichs. Es muss wohl daran liegen, dass die Mappe nicht aktiv ist. Wie kann man das ändern, das es im Hintergrund von selbst läuft.
- Außerdem möchte ich nicht, dass wenn ich in einer anderen Anwendung bin, nach Ausführen des Makro automatisch nach Excel springt. Wie kann man das umgehen.
Kurz gesagt möchte ich, dass alles im Hintergrund abläuft.
Ich hoffe, meine Erklärung ist nicht zu kurz und ist machbar.
Vielen Dank für Hilfe!
Daniel
So, und hier das Makro:
'Prozedur Blattsumme:
'Argumente: dat nach diesem Datum wird gesucht
' Spalte: Addiert die Werte der Blätter in dieser Spalte
' Ergebnisspalte: in diese Spalte wird die Summe geschrieben
Sub Blattsumme(dat As Date, Spalte As Integer, Ergebnisspalte As Integer)
Dim Blatt()
Dim Summe As Double
Dim bl
Dim z As Range
'Blattnamen (kann erweitert werden):
Blatt = Array("Blatt1", "Blatt2", "Blatt3", "Blatt4")
'Spalte A aller Blätter durchsuchen und in [Spalte] liegende Werte addieren
For Each bl In Blatt
Debug.Print bl
Set z = Sheets(bl).Range("A:A").Find(What:=dat)
If Not z Is Nothing Then Summe = Summe + z.Offset(0, Spalte - 1).Value
Next bl
'Summe in Tabelle eintragen:
Dim lz As Long
With Sheets("Gesamtauswertung")
'Suche Datum in Spalte A von Gesamtauswertung
Set z = .Range("A:A").Find(What:=dat)
If z Is Nothing Then
'nicht gefunden, dann neue Zeile anlegen
lz = .Cells(Rows.Count, Ergebnisspalte).End(xlUp).Row + 1
.Cells(lz, 1) = dat
Else
'gefunden, dann diese Zeile verwenden
lz = z.Row
End If
.Cells(lz, Ergebnisspalte) = Summe
.Cells(lz, Ergebnisspalte) = Summe
If Ergebnisspalte = 5 Then .Range("B3") = Summe
End With
End Sub
'---------------------------------------------------------------
'Test: Summiert die Treffen der Spalten B-K, ohne F und G
Sub Summen()
Dim i As Integer
For i = 2 To 5 'Spalte B-E
Blattsumme Date, i, i
Next i
For i = 8 To 11 'Spalte H-K
Blattsumme Date, i, i
Next i
End Sub