AW: Gleitende Durchschnitte
17.12.2008 19:41:00
Erich
Hallo Julia,
ganz klar ist mir die Aufgabenstellung nicht. Soll das Makro die Formeln für den Durchschnitt
in die Spalten C, E, G und I schreiben?
Wie wird der gleitende Durchschnitt berechnet, wenn (wie in den Spalten F und H) Werte fehlen?
Darauf habe ich im Code unten keine Rücksicht genommen.
In der Tabelle gibt es einen Namen "Datum", der auf ein Blatt "Daten" verweist (für die Gültigkeit in B3).
Datum ist aber auch eine Excelfunktion. Verwende besser einen anderen Namen.
Auch die Bezeichnungen Name, Zeile und Path solltest du nicht als Variablennamen verwenden.
Im folgenden Code habe ich die umbenannt.
Alle Selects (außer einem vermutlich auch überflüssigen am Ende) habe ich entfernt.
Statt wksZiel kannst du auch mit Me arbeiten - der Code steht im Modul der Zieltabelle.
Bitte schau dir auch mal die Deklarationen an, da habe ich etwas ergänzt.
Hier mein Vorschlag. Tut er das, was du möchtest?
Option Explicit
Private Sub DatenEinfügen_Click()
Dim tempFile As String, strName As String, datDatum As Date
Dim lngZeile As Long, Verz As String
Dim tempWb As Workbook
Const strPath As String = "I:\Analysen\Aktiva\"
strName = Range("B1")
datDatum = Range("B3")
lngZeile = 9
'Suche wiederholen, solange Datum ""
Set tempWb = Workbooks.Open(Verz & "\" & tempFile)
With tempWb.Sheets("Balance")
If Range("A8") = "" Then Me.Range("A8") = .Range("A2")
Me.Cells(lngZeile, 1) = .Range("D1")
Me.Cells(lngZeile, 2) = .Range("B49")
Me.Cells(lngZeile, 4) = .Range("D49")
Me.Cells(lngZeile, 6) = .Range("B51")
Me.Cells(lngZeile, 8) = .Range("D52")
Me.Cells(lngZeile, 10) = .Range("B60")
End With
tempWb.Close False
lngZeile = lngZeile + 1
' Nächste Datei im Verzeichnis aufrufen
datDatum = DateAdd("m", 1, datDatum + 1) - 1
Verz = strPath & strName & "\" & Format(datDatum, "YYYY") & "\" & _
Format(datDatum, "YYMM") & "\" & "mail"
tempFile = Dir(Verz & "\" & "*ZirisReports*.xls")
Loop
End If
Loop
lngZeile = lngZeile - 1
Range("B9:J" & lngZeile).NumberFormat = "#,##0.00"
If lngZeile >= 20 Then
With Range(Cells(20, 3), Cells(lngZeile, 3))
.FormulaLocal = "=SUMMENPRODUKT(B9:B20;$J9:$J20)/$K20"
.Copy Cells(20, 5)
.Copy Cells(20, 7)
.Copy Cells(20, 9)
End With
End If
Range("B9").Select ' nur, wenn hier der Cursor stehen soll
Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic
Set tempWb = Nothing
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort