Excel 2007: TEILERGEBNIS-Funktion in VBA nutzen

el dios

Ensign
Dabei seit
Mai 2008
Beiträge
155
Hallo zusammen,

zunächst einmal eine kurze Einleitung in meine Problemstellung:
Ich habe das Excel-Sheet als gekürzte Variante meiner Ausgangsversion (Link siehe Edit ganz unten). Dort habe ich im Blatt "Stammdaten" eine Liste der Mitarbeiter. Diese Liste will ich abarbeiten und dazu im Blatt "Datenbasis" ihren Einsatz in der jeweiligen Kalenderwoche zurückverfolgen.
Soll heißen, ich habe in den Stammdaten in Spalte G eine Anzahl an noch verfügbaren Tagen und will am Ende einer Woche überprüfen, wie diese Woche war um zu sehen, wie die weitere Verfügbarkeit noch aussieht.

Der Anfang hat noch gut geklappt: Ich nehme einen Mitarbeiter aus der Liste (-> Sub DatenAktualisieren) und lasse ihn per Autofilter in den Stammdaten herausfiltern (-> Function getTage). Somit habe ich in Spalte L der Stammdaten nur noch die Werte des tatsächlichen Einsatz dieses Mitarbeiters der letzten Woche. Diese Werte will ich nun mit Hilfe der TEILERGEBNIS-Funktion addieren, da ich nur die sichtbaren Zeilen betrachten darf.

Dabei springt mir mein Programm jedoch immer in Zelle $B$31 und addiert nichts auf. Könnt ihr mir dabei helfen?

Danke und Gruß
eL dios

Code:
Sub DatenAktualisieren()
   Dim intZeile As Integer
   Dim name As String
   Dim summe As Integer

   For intZeile = 2 To letzteZeile
      name = Cells(intZeile, 2) & " " & Cells(intZeile, 1).Value
      summe = getTage(name)
   Next intZeile

End Sub

Function getTage(name As String) As Integer
   Dim Summe As Integer
   Dim cell As Range
   Sheets("Datenbasis").Select

   ActiveSheet.Range("$A$1:$G$17").AutoFilter Field:=1, Criteria1:=name
   MsgBox ActiveCell.Address 'Kontrollausgabe der aktiven Zelle
   Summe = Application.WorksheetFunction.Subtotal(9, Range("$L:$L"))

   MsgBox Summe  'Kontrollausgabe

   ' Zuruecksetzen des Filters fuer die naechste Iteration
   ActiveSheet.Range("$A$1:$G$17").AutoFilter Field:=1
   Sheets("Stammdatenblatt").Select

   getTage = Summe
End Function

Function letzteZeile() As Integer
   Dim Ende As Long

   Ende = 0
   Do Until Cells(Ende + 1, 1) = ""
      Ende = Ende + 1
   Loop

   letzteZeile = Ende
End Function

Edit:
Da das mit dem Hochladen so wohl nicht funktioniert, ist hier ein Link zu der Datei.
 
Zuletzt bearbeitet:

Syberdoor

Lieutenant
Dabei seit
Nov. 2005
Beiträge
662
Das ist nicht dein Programm was da hinspringt.... wenn ich dein File runterlade und öffne ist $B$31 bereits die markierte Zelle im Sheet Datenbasis. Wenn ich irgendwo anders hinclick und dann erst das Makro starte ist die neu von mir markierte Zelle danach auch nicht anders.

Das ist meiner Meinung nach auch logisch weil du nirgends die aktive Zelle setzt, also bleibt sie sicher immer unverändert. Wenn ich dich richtig verstanden habe was du da willst ist es auch nicht nötig die aktive Zelle zu verändern.... Ich denke dein Problem liegt wo anders und zwar dass du statt:

Summe = Application.WorksheetFunction.Subtotal(9, Range("$L:$L"))

sowas brauchst

Summe = Application.WorksheetFunction.Subtotal(9, ActiveSheet.Range("$L:$L"))
 
Zuletzt bearbeitet: (wtf Excelbugs)
Top