Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1652to1656
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Datenabfrage im Zeitraum für mehere Monate

VBA Datenabfrage im Zeitraum für mehere Monate
18.10.2018 14:08:29
Christian
Hallo Forumsfreunde,
die letzten Aufgaben was ich hatte wurden durch die Forumsgemeinde sehr gut gelöst. Großen Dank hier nochmal an die letzten Helfer, Rudi, Lupo, FCS, etc....
Ich weiß auch das das nachfolgende VBA Makro "nicht gerade gut aussieht" Aber es läuft, und es nimmt mir wahnsinnig viel Arbeit ab!
Jetzt habe ich folgendes Problem. Bisher werden Daten nach einem bestimmten Monat abgefragt, was nun nicht mehr reicht. Ich müsste das ganze ändern, damit nur Daten abgefragt werden, welche entweder mit Monaten angebeben werden die durch Komma getrennt sind 8,9,10. Oder ich kann den Zeitraum über einen Kalender einschränken Von: 01.08.2018 Bis: 31.10.2018.
Kann mir hier jemand helfen?
Danke
Christian
------------------------------------------------------
Sub Sendungen_je_Agenturen()
Dim c As Range, ErgBereich As Range, _
mon As String, _
einheit As String, _
RP As String, _
laR As Long, _
check As Boolean
Dim objKst As Object
Tabelle8.Unprotect Password:=""
Tabelle9.Unprotect Password:=""
Set objKst = CreateObject("scripting.dictionary")
objKst("Kst") = "Sendungen"
'Workbooks("Abrechnungsdaten.xlsm").Worksheets("Datenlieferung_Agenturen").Range("A2:N5000"). _
ClearContents
Workbooks("Abrechnungsdaten.xlsm").Worksheets("Datenlieferung_Agenturen").Rows("2:5000"). _
Delete
Worksheets("Cube_Rohdaten").Activate
mon = InputBox(vbCr & vbCr & vbCr & "Bitte den Monat eingeben, für den die Abrechnung erzeugt  _
werden soll (1 - 12)" _
& vbNewLine & vbNewLine _
& " Der Lauf kann bis zu 10 Sekunden dauern ")
If mon = "" Then check = True
If IsNumeric(mon) Then
If mon  12 Then check = True
Else
check = True
End If
If check = True Then
MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & _
"Bitte wiederholen mit den richtigen Eingaben", vbOKOnly + vbCritical, _
"Dezenter Hinweis für " & Application.UserName & ":"
BlattschutzAn
Worksheets("Cube_Filter").Activate
Exit Sub
End If
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 3).End(xlUp).Row
For Each c In Range("C2:C" & laR)
If IsDate(c.Text) Then
If Month(CDate(c.Text)) = mon And c.Offset(, 3) = "Elektronische  _
Konsolidierungsproduktion" And c.Offset(, 6) = "Sendungen" And c.Offset(, 8) Like "A-*" Then
objKst(c.Offset(, 8).Value) = objKst(c.Offset(, 8).Value) + c.Offset(, 7) * 1
End If
End If
Next c
If objKst.Count = 1 Then
MsgBox "Es wurden keine Daten für den Monat " & mon & " gefunden!", vbOKOnly + _
vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
Worksheets("Cube_Filter").Activate
GoTo Ende
Else
With Sheets("Datenlieferung_Agenturen")
.Cells(2, 11).Resize(objKst.Count) = WorksheetFunction.Transpose(objKst.keys)
.Cells(2, 10).Resize(objKst.Count) = WorksheetFunction.Transpose(objKst.Items)
Worksheets("Datenlieferung_Agenturen").Activate
ActiveSheet.Rows(2).Delete
End With
Worksheets("Datenlieferung_Agenturen").Activate
End If
Workbooks("Abrechnungsdaten.xlsm").Worksheets("Cube_Filter").Range("A2:K4000").Clear
Application.ScreenUpdating = False
laR = Cells(Rows.Count, 3).End(xlUp).Row
For Each c In Range("C2:C" & laR)
If IsDate(c.Text) Then
If Month(CDate(c.Text)) = mon And c.Offset(, 3) = "Elektronische  _
Konsolidierungsproduktion" And c.Offset(, 6) = "Sendungen" And c.Offset(, 8) Like "A-*" Then
If ErgBereich Is Nothing Then
Set ErgBereich = c.EntireRow
Else
Set ErgBereich = Union(ErgBereich, c.EntireRow)
End If
End If
End If
Next c
ErgBereich.Copy Workbooks("Abrechnungsdaten.xlsm").Worksheets("Cube_Filter"). _
Range("A2")
Application.ScreenUpdating = True
Application.CutCopyMode = False
Set ErgBereich = Nothing
Application.ScreenUpdating = True
Application.CutCopyMode = False
Set objKst = Nothing
'Kostenstelle Zahlenspalte aktualisieren auf Basis aktueller Kostenstellen
'Tabelle2.KST_Zahlen_anpassen
'Datenlieferung Tabelle mit Werte und Formatierungen, sowie Kostenstellen Bezeichnungen fü _
llen
Tabelle8.KostenCubeAgenturen (mon)
MsgBox ("Die Aufbereitung wurde erfolgreich durchgeführt. Die Daten wurden in die Tabelle: _
" _
& " [Cube_Filter und Datenlieferung_Agenturen]" _
& " geschrieben")
Ende:
Tabelle8.Protect Password:=""
Tabelle9.Protect Password:=""
Tabelle8.Activate
End Sub
--------------------------------------------------------

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Datenabfrage im Zeitraum für mehere Monate
19.10.2018 07:45:08
fcs
Hallo Christian,
die Eingabe anzupassen und zu prüfen ist das kleinere Problem.
Nur am Makro kann ich nicht erkennen, ob man die Monate in einem Rutsch abarbeiten kann (so hab ich den Code angepasst) oder ob die Monate in einer Schleife abgearbeitet werden müssen.
Die Problem-Zeile aus meiner Sicht:
  Tabelle8.KostenCubeAgenturen (mon)

Hier hab ich keine Ahnung, was da ggf. passiert.
LG
Franz
Sub Sendungen_je_Agenturen()
Dim c As Range, ErgBereich As Range, _
mon As String, _
arrMon() As Integer, iMon As Integer, Mon_1 As Integer, Mon_2 As Integer, _
einheit As String, _
RP As String, _
laR As Long, _
check As Boolean
Dim objKst As Object
Tabelle8.Unprotect Password:=""
Tabelle9.Unprotect Password:=""
Set objKst = CreateObject("scripting.dictionary")
objKst("Kst") = "Sendungen"
'Workbooks("Abrechnungsdaten.xlsm").Worksheets("Datenlieferung_Agenturen"). _
Range("A2:N5000").ClearContents
Workbooks("Abrechnungsdaten.xlsm").Worksheets("Datenlieferung_Agenturen"). _
Rows("2:5000").Delete
Worksheets("Cube_Rohdaten").Activate
mon = InputBox(vbCr & vbCr & "Bitte den Zeitraum eingeben, für den die Abrechnung " _
& "erzeugt werden soll (1 - 12)" & vbNewLine _
& "Start- und Ende-Monat getrennt durch Bindestrich, z.B, 7-9 oder 8-8 " & vbNewLine _
& " Der Lauf kann bis zu 10 Sekunden dauern ")
check = True
If mon = "" Then
ElseIf InStr(mon, "-") = 0 Then
ElseIf Not IsNumeric(Replace(mon, "-", ",")) Then
ElseIf Val(Split(mon, "-")(0)) >= 1 And Val(Split(mon, "-")(0)) = 1 And Val(Split(mon, "-")(1)) = Mon_1 _
And Month(CDate(c.Text)) = Mon_1 _
And Month(CDate(c.Text)) 

Anzeige
AW: VBA Datenabfrage im Zeitraum für mehere Monate
19.10.2018 09:45:02
Christian
Hallo Franz,
Ein Traum!!! Funktioniert sofort. Werde jetzt noch ausgiebiger testen, und dir Feedback geben,
Was noch nicht komplett klappt, ist das Makro KostenCubeAgenturen (mon).
Hier sollte dann eigentlich in der Spalte 12 der Wert 8-9 stehen, was in der Variablen auch so angezeigt wird im Debug Modus. Jedoch steht als Zahl dann der 09.08.2018 in der Zeile....hmmmm.
das Makro schaut so aus:
--------------------------------------
Sub KostenCubeAgenturen(ByVal mon As String)
Dim i As Long
Dim letzte As Long
letzte = Cells(Rows.Count, 10).End(xlUp).Row
For i = 2 To letzte
Cells(i, 1).FormulaLocal = "=SUMME(J" & i & "*0,2)"
Cells(i, 2).FormulaLocal = "=SUMME(A" & i & "*0,19)"
Cells(i, 3).FormulaLocal = "=SUMME(A" & i & "*1,19)"
Cells(i, 4).FormulaLocal = "=WENNFEHLER(SVERWEIS(K" & i & ";Agenturen!$A:$F;2;FALSCH);"""")"
Cells(i, 5).FormulaLocal = "=WENNFEHLER(SVERWEIS(K" & i & ";Agenturen!$A:$F;3;FALSCH);"""")"
Cells(i, 6).FormulaLocal = "=WENNFEHLER(SVERWEIS(K" & i & ";Agenturen!$A:$F;4;FALSCH);"""")"
Cells(i, 7).FormulaLocal = "=WENNFEHLER(SVERWEIS(K" & i & ";Agenturen!$A:$F;5;FALSCH);"""")"
Cells(i, 8).FormulaLocal = "=WENNFEHLER(SVERWEIS(K" & i & ";Agenturen!$A:$F;6;FALSCH);"""")"
Cells(i, 9).FormulaLocal = "=WENNFEHLER(SVERWEIS(K" & i & ";Agenturen!$A:$F;7;FALSCH);"""")"
Cells(i, 12).Value = mon
Cells(i, 13) = Sheets("Basisdaten").Range("B3") + i - 1
Cells(i, 14).Value = "1"
Next
Sheets("Basisdaten").Range("B5") = Sheets("Basisdaten").Range("B3") + 1
Sheets("Basisdaten").Range("B5") = Sheets("Basisdaten").Range("B3") + i - 2
i = i - 1
Range("A1:A" & i).NumberFormat = "#,##0.00 €"
Range("B1:B" & i).NumberFormat = "#,##0.00 €"
Range("C2:C" & i).NumberFormat = "#,##0.00 €"
Range("M2:M" & i).NumberFormat = "0"
Range("N2:N" & i).NumberFormat = "0"
End Sub

-----------------------------------------
Anzeige
AW: VBA Datenabfrage im Zeitraum für mehere Monate
19.10.2018 11:29:50
Christian
Hallo Franz,
habe es duch eine Formatierung (vor dem Eintrag des Wertes in der Zelle) beheben können.
-----------------------------------------
Range("L2:L" & i).NumberFormat = "@"
Cells(i, 12).Value = mon
-----------------------------------------
Kann ich eigentlich den wert in dem String (mon)
wieder aufteilen auf ausgeschriebene Monate?
Wäre richtig schön wenn in der Zelle statt 8-9 stehen würde August - September, oder als Beispiel 1-3 dann Januar - März :-)
Danke Christian
AW: VBA Datenabfrage im Zeitraum für mehere Monate
19.10.2018 12:25:13
fcs
Hallo Christian,
die Umwandlung kann man schon im Hauptmakro machen, da der Wert von Mon nach der Ermittlung der nummerischen Werte von Start- und Ende-Monat nur noch für dein Makro benötigt wird.
Füge nach den beiden Zeilen
      Mon_1 = Val(Split(Mon, "-")(0))
Mon_2 = Val(Split(Mon, "-")(1))

die folgenden beiden Zeilen zur Neuberechnung von Mon ein.
      Mon = Format(DateSerial(Year(Date), Mon_1, 1), "MMMM")
If Mon_1  Mon_2 Then _
Mon = Mon & " - " & Format(DateSerial(Year(Date), Mon_2, 1), "MMMM")
LG
Franz
Anzeige
AW: VBA Datenabfrage im Zeitraum für mehere Monate
19.10.2018 13:42:05
Christian
Klappt Super!!!
Vielen lieben Dank!!!
Gruß
Christian

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige