Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1080to1084
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

Makroproblem !

Makroproblem !
10.06.2009 08:46:43
Ernst
Hallo Vba Experten !
https://www.herber.de/bbs/user/62289.zip
Ich würde eure Hilfe benötigen, es geht um ein Abfragemakro, wenn im Tabellenblatt2 Archiv Abfrage(Alle)
Das Datum (von) und das Datum (bis) eingegeben wird soll die Anzahl der jeweiligen Type sowie die Gesamtanzahl der im ausgewählten Zeitraum gereinigten Nr. in den Ausgabefeldern erscheinen.
Bei bestehender Lösung werden immer alle gezählt egal welchen Zeitraum ich abfrage !
Wäre für Lösungsvorschläge dankbar.
lg.Ernst
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim n As Integer
Dim S As Integer
Dim RL As Range
Dim Zx As Long
Dim RA As Range
If Target.Address = "$G$2" Then
If IsDate(Target.Value) And IsDate(Target.Offset(0, -2).Value) Then
If Target.Value > Target.Offset(0, -2).Value Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
Target.Offset(0, 4).Value = 0
Target.Offset(0, 6).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
S = Zuordnung(RL.Value)
Select Case S
Case 1
n = 2
Case 5
n = 4
Case 9
n = 6
End Select
Zx = Worksheets("Archiv").Cells(RL.Row, Columns.Count).End(xlToLeft).Column - 1
Target.Offset(0, n).Value = Target.Offset(0, n).Value + Zx
Next
Application.EnableEvents = True
End If
End If
End If
If Target.Address = "$K$4" Then
If IsDate(Target.Offset(0, -4).Value) And IsDate(Target.Offset(0, -2).Value) Then
If Target.Offset(0, -2).Value > Target.Offset(0, -4).Value Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
If RL.Value = Worksheets("Archiv").Range("K4").Value Then
Zx = Worksheets("Archiv").Cells(RL.Row, Columns.Count).End(xlToLeft).Column  _
- 1
Target.Offset(0, 2).Value = Target.Offset(0, 2).Value + Zx
End If
Next
Application.EnableEvents = True
End If
End If
End If
End Sub


Function Zuordnung(Vx As Variant)
Dim Zeilen As Long
Dim Spalte As Long
Dim K As Long, Vy
For Spalte = 1 To 9 Step 4
Zeilen = Worksheets("Flor-Kag-Brg").Cells(Rows.Count, Spalte).End(xlUp).Row
For K = 8 To Worksheets("Flor-Kag-Brg").Cells(Rows.Count, Spalte).End(xlUp).Row
Vy = Worksheets("Flor-Kag-Brg").Cells(K, Spalte).Value
If Worksheets("Flor-Kag-Brg").Cells(K, Spalte).Value = Vx Then
Zuordnung = Spalte
Exit Function
End If
Next
Next
End Function


16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
wie oft noch? irgendwann hilft Dir keiner mehr ...
10.06.2009 09:47:43
Matthias
Hallo
zuerst das Negative
Wie oft denn noch !!

Immer und immer wieder geht es um die gleiche Datei.
Immer und immer wieder um das gleiche Problem.
Die, die Dir helfen wollen blicken so langsam nicht mehr durch.
Weil Du immer wieder einen neuen Beitrag eröffnest.
Und ich habe auch keine Lust mehr, mir immer wieder Deine Datei zu downloaden.
Ich habe das Gefühl, das Du andere Deine Hausaufgaben machen lässt.
Denn:
Einen konstruktiven Beitrag von Dir selbst zur Lösung Deines Problems habe ich nirgendwo entdecken können.


jetzt zum Positiven
Dennoch ein Lösungsvorschlag von mir, dannach steige ich aber vorerst aus Deinen Beiträgen aus.
Verwende definierte Namen für Deine Bereiche
Ich habe eine Beispiel für Dich erstellt.
Userbild
Die Formeln von harry habe ich für die Einzelauswertung beibehalten.
hier die abgespeckte Datei nur mit dem Blatt "Archiv" (wg der Downloadgröße von 300 kb)
https://www.herber.de/bbs/user/62333.xls
In der Beispieldatei habe ich mich nur um die Berrechnung Alle von TWG gekümmert.
Alles weitere kannst Du kopieren und auch für die anderen Bereiche anpassen.
Wie geschrieben, ich steige jetzt hier aber aus.
Rückmeldung wäre dennoch nett
Gruß Matthias

Anzeige
AW: Danke ! Problem nicht gelöst !
10.06.2009 10:28:14
Ernst
Hallo Vba Experten !
Danke für den Lösungsvorschlag.(Ich kenne das wenns nervig wird dan nix wie weg)
es war nicht meine Absicht zu nerven ,ich war ja mit meiner bestehenden Lösung zufrieden,neue Nummern wurden automatisch ins Archiv übernommen und sortiert,Datum automatisch im Archiv eingetragen was jetzt alles anscheinend nicht mehr geht !bis auf die lästige Datumsabfrage (Egal welchen Zeitraum ich abfrage es werden immer alle Einträge gezählt,das habe ich erst heute bemerkt,(ursprüngliches Problem Datum von Datum bis)
Ich hatte gehofft durch eine Makroanpassung eurerseits das in den Griff zu bekommen aber anscheinend
ist das ganze schwieriger als gedacht.(Hätte mir auch jemand sagen können !)
Habe leider da so meine Schwierigkeiten mit dem anpassen.
Abschliesend recht herzlichen Dank für eure Mühen.
lg.Ernst
Anzeige
AW: mal raus aus offen
10.06.2009 10:45:52
Hajo_Zi
wie Matthias schon geschrieben hat führe die Disskussion in einem der alten weiter und Du selber hast ja die Disskussion als beendet angesehen
AW: thx
10.06.2009 10:49:49
Ernst
Hallo Hajo_Z
Hast recht das bringt nix mehr !
lg.Ernst
AW: Makroproblem !
10.06.2009 11:31:14
fcs
Hallo Ernst,
bei dir fehlt ja völlig eine Funktion, die die Einträge in jeder Zeile mit dem Datumsbereich vergleicht.
Makro muss dann etwa wie folgt aussehen.
Gruß
Franz

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim n As Integer
Dim S As Integer
Dim RL As Range
Dim Zx As Long
Dim RA As Range
Dim datStart As Date, datEnde As Date
If Target.Address = "$G$2" Then
If IsDate(Target.Value) And IsDate(Target.Offset(0, -2).Value) Then
datStart = Target.Offset(0, -2).Value
datEnde = Target.Value
If datEnde >= datStart Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
Target.Offset(0, 4).Value = 0
Target.Offset(0, 6).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
S = Zuordnung(RL.Value)
Select Case S
Case 1
n = 2
Case 5
n = 4
Case 9
n = 6
End Select
Target.Offset(0, n).Value = Target.Offset(0, n).Value _
+ fncZaehlen(wks:=Worksheets("Archiv"), lngZeile:=RL.Row, _
DatumStart:=datStart, DatumEnde:=datEnde)
Next
Application.EnableEvents = True
End If
End If
End If
If Target.Address = "$K$4" Then
If IsDate(Target.Offset(0, -4).Value) And IsDate(Target.Offset(0, -2).Value) Then
datStart = Target.Offset(0, -4).Value
datEnde = Target.Offset(0, -2).Value
If datEnde >= datStart Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
If RL.Value = Worksheets("Archiv").Range("K4").Value Then
Target.Offset(0, 2).Value = Target.Offset(0, 2).Value _
+ fncZaehlen(wks:=Worksheets("Archiv"), lngZeile:=RL.Row, _
DatumStart:=datStart, DatumEnde:=datEnde)
End If
Next
Application.EnableEvents = True
End If
End If
End If
End Sub
Function fncZaehlen(wks As Worksheet, lngZeile As Long, _
DatumStart As Date, DatumEnde As Date, Optional lngSpalte1 As Long = 2)
'Einträge innerhalb Datumsbereich in Zeile zählen
Dim lngSpalte As Long, lngSpalteL As Long
With wks
lngSpalteL = .Cells(lngZeile, .Columns.Count).End(xlToLeft).Column
For lngSpalte = lngSpalte1 To lngSpalteL
If .Cells(lngZeile, lngSpalte) >= DatumStart _
And .Cells(lngZeile, lngSpalte) 


Anzeige
AW: Perfekt ! 1A Lösung.Danke !
10.06.2009 11:48:41
Ernst
Hallo fcs !
Super Lösung ...
Recht herzlichen Dank.
lg.Ernst
AW: Perfekt ! 1A Lösung.Danke !
10.06.2009 12:20:05
Armin
Hallo Ernst,
leider habe ich nicht soviel Zeit um täglich VBA Probleme im Forum zu lösen.
Da ich heute zufällig mal rein geschaut habe, ist mir die Disskusion um Dein Makro aufgefallen. Natürlich hatte ich die "Selectierung" nach Datumsgrenzen vergessen. Die Lösung die Dir Franz rein gestellt hat habe ich nicht gestestet, aber ich habe Dir eine weitere angehängt.
Aber noch etwas Grundsätzliches wenn man einiges mit VBA gestalten möchte, sollte man wirklich versuchen noch etwas dazu zu lernen. Auf Dauer funktioniert die "Auftragsprogrammierung" im Forum nicht! Es scheint mir immer wieder einmal, dass es Leute gibt die einfach keinen "Bock" haben und andere für sich arbeiten lassen. Also nicht bös gemeint aber villeicht einfach mal versuchen selbst sich mit der Materie zu befassen.
https://www.herber.de/bbs/user/62340.zip
Gruß
Armin
Anzeige
AW: Perfekt ! 1A Lösung.Danke !
10.06.2009 12:44:15
Ernst
Hallo Armin !
ich freue mich von dir zu hören.
Du hast natürlich recht ich sollte mich mehr mit der Materie auseinandersetzen wenn es meine Zeit zulässt versuch ich es auch ansatzweise aber ich habe meistens so viel um Die Ohren das ich nicht weiss wo mir der Kopf steht.
Ich hoffe trozdem das ich mich auch in Zukunft an das Forum wenden darf !
lg.und recht herzlichen Dank an alle Profis ! w.Ernst.
AW: Treffer farblich markieren ?
11.06.2009 10:22:08
Ernst
Hallo Vba Profis !
Dank eurer Hilfe ist dieser Code zustande gekommen der super funktioniert.
Bei der Trefferauswertung was das Datum betrifft (abgefragter Zeitraum)hätte ich noch eine Frage und zwar wie müsste der Code aussehen wenn die Treffer farblich hinterlegt werden .
Es sollte eine Msg Box info erscheinen Treffer im gesuchten Zeitraum werden jetzt in die Ausgabe felder übernommen.
Abschliessend sollten die Farbmarkierungen wieder deaktiviert werden.
Wäre für Lösungsvorschläge sehr Dankbar.
lg.Ernst
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim n As Integer
Dim S As Integer
Dim RL As Range
Dim Zx As Long
Dim RA As Range
Dim datStart As Date, datEnde As Date
If Target.Address = "$G$2" Then
If IsDate(Target.Value) And IsDate(Target.Offset(0, -2).Value) Then
datStart = Target.Offset(0, -2).Value
datEnde = Target.Value
If datEnde >= datStart Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
Target.Offset(0, 4).Value = 0
Target.Offset(0, 6).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
S = Zuordnung(RL.Value)
Select Case S
Case 1
n = 2
Case 5
n = 4
Case 9
n = 6
End Select
Target.Offset(0, n).Value = Target.Offset(0, n).Value _
+ fncZaehlen(wks:=Worksheets("Archiv"), lngZeile:=RL.Row, _
DatumStart:=datStart, DatumEnde:=datEnde)
Next
Application.EnableEvents = True
End If
End If
End If
If Target.Address = "$K$4" Then
If IsDate(Target.Offset(0, -4).Value) And IsDate(Target.Offset(0, -2).Value) Then
datStart = Target.Offset(0, -4).Value
datEnde = Target.Offset(0, -2).Value
If datEnde >= datStart Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
If RL.Value = Worksheets("Archiv").Range("K4").Value Then
Target.Offset(0, 2).Value = Target.Offset(0, 2).Value _
+ fncZaehlen(wks:=Worksheets("Archiv"), lngZeile:=RL.Row, _
DatumStart:=datStart, DatumEnde:=datEnde)
End If
Next
Application.EnableEvents = True
End If
End If
End If
End Sub


Function fncZaehlen(wks As Worksheet, lngZeile As Long, _
DatumStart As Date, DatumEnde As Date, Optional lngSpalte1 As Long = 2)
'Einträge innerhalb Datumsbereich in Zeile zählen
Dim lngSpalte As Long, lngSpalteL As Long
With wks
lngSpalteL = .Cells(lngZeile, .Columns.Count).End(xlToLeft).Column
For lngSpalte = lngSpalte1 To lngSpalteL
If .Cells(lngZeile, lngSpalte) >= DatumStart _
And .Cells(lngZeile, lngSpalte) fncZaehlen = fncZaehlen + 1
End If
Next
End With
End Function


Anzeige
AW: Treffer farblich markieren ?
11.06.2009 10:35:20
Ernst
Hallo Vba Profis !
Dank eurer Hilfe ist dieser Code zustande gekommen der super funktioniert.
Bei der Trefferauswertung was das Datum betrifft (abgefragter Zeitraum)hätte ich noch eine Frage und zwar wie müsste der Code aussehen wenn die Treffer farblich hinterlegt werden .
Es sollte eine Msg Box info erscheinen Treffer im gesuchten Zeitraum werden jetzt in die Ausgabe felder übernommen.
Abschliessend sollten die Farbmarkierungen wieder deaktiviert werden.
Wäre für Lösungsvorschläge sehr Dankbar.
lg.Ernst
https://www.herber.de/bbs/user/62368.zip (letzte Version)
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim n As Integer
Dim S As Integer
Dim RL As Range
Dim Zx As Long
Dim RA As Range
Dim datStart As Date, datEnde As Date
If Target.Address = "$G$2" Then
If IsDate(Target.Value) And IsDate(Target.Offset(0, -2).Value) Then
datStart = Target.Offset(0, -2).Value
datEnde = Target.Value
If datEnde >= datStart Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
Target.Offset(0, 4).Value = 0
Target.Offset(0, 6).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
S = Zuordnung(RL.Value)
Select Case S
Case 1
n = 2
Case 5
n = 4
Case 9
n = 6
End Select
Target.Offset(0, n).Value = Target.Offset(0, n).Value _
+ fncZaehlen(wks:=Worksheets("Archiv"), lngZeile:=RL.Row, _
DatumStart:=datStart, DatumEnde:=datEnde)
Next
Application.EnableEvents = True
End If
End If
End If
If Target.Address = "$K$4" Then
If IsDate(Target.Offset(0, -4).Value) And IsDate(Target.Offset(0, -2).Value) Then
datStart = Target.Offset(0, -4).Value
datEnde = Target.Offset(0, -2).Value
If datEnde >= datStart Then
Zx = Worksheets("Archiv").Cells(Rows.Count, 1).End(xlUp).Row
Application.EnableEvents = False
Target.Offset(0, 2).Value = 0
For Each RL In Worksheets("Archiv").Range("A5:A" & CStr(Zx))
If RL.Value = Worksheets("Archiv").Range("K4").Value Then
Target.Offset(0, 2).Value = Target.Offset(0, 2).Value _
+ fncZaehlen(wks:=Worksheets("Archiv"), lngZeile:=RL.Row, _
DatumStart:=datStart, DatumEnde:=datEnde)
End If
Next
Application.EnableEvents = True
End If
End If
End If
End Sub


Function fncZaehlen(wks As Worksheet, lngZeile As Long, _
DatumStart As Date, DatumEnde As Date, Optional lngSpalte1 As Long = 2)
'Einträge innerhalb Datumsbereich in Zeile zählen
Dim lngSpalte As Long, lngSpalteL As Long
With wks
lngSpalteL = .Cells(lngZeile, .Columns.Count).End(xlToLeft).Column
For lngSpalte = lngSpalte1 To lngSpalteL
If .Cells(lngZeile, lngSpalte) >= DatumStart _
And .Cells(lngZeile, lngSpalte) fncZaehlen = fncZaehlen + 1
End If
Next
End With
End Function


Anzeige
was soll das denn jetzt ,VBA geschützt !?
12.06.2009 00:54:20
Matthias
Hallo Ernst
Ja, ich schon wieder (auch wenns vielleicht jetzt nervt)...ach nein "wenns nervt" war ja Dein Spruch
Glaubst Du tatsächlich es startet jemand Deine Datei mit aktivierten Makros,
wenn er nicht sehen kann was im Code steht.
Warum ist jetzt das VBA Projekt gesperrt ?
Sorry, aber ich denke das klappt so nicht.
Gruß Matthias
AW: Peinlich !
12.06.2009 07:00:20
Ernst
Hallo Mathias !
Habe nicht gedacht jemals wieder von dir zu hören, um so mehr freut es mich das du dich weiterhin mit meinem Beitrag beschäftigst.Also das mit dem Projektschutz tut mir leid hab vergessen ihn zu deaktivieren.
Ich habe das jetzt erledigt und würde mich freuen auch weiterhin von dir unterstützung zu erhalten.
lg.Ernst
https://www.herber.de/bbs/user/62381.zip
Anzeige
mit der Farbe find ich unnötig ! ...
12.06.2009 11:12:09
Matthias
Hallo Ernst
Warum willst Du denn jetzt die Zellen farbig markieren. Wenn sie außerhalb des Sichtfeldes liegen, kann sie doch sowieso niemand sehen.
Ich hatte nebenher schon weitergebastelt.
https://www.herber.de/bbs/user/62383.xls
Hier im Sheet (wenn ichs richtig verstanden habe was Du vorhast ) werden die relevanten Zellen farblich hervorgehoben.
Eine Msgbox erscheint, der Wert wird entsprechend ins definierte Feld eingetragen und die Zellen werden wieder entfärbt (xlNone).
Userbild
Ist aber für mein Verständnis absolut unnötig, da man die farblich gekennzeichneten Zellen eh nich alle sehen kann.
Im Screenshot habe ich mit Zoom gearbeitet, um alle Bereiche darzustellen.
Das mit der Berechung für alle Bereiche hast Du doch nun schon hinbekommen. Warum also das ganze Programm verkomplizieren.
Wenn Du nun harys Formeln wieder mit einpflegst, bist Du doch am Ziel.
Gruß Matthias
Anzeige
AW: mit der Farbe find ich unnötig ! ...
12.06.2009 11:57:57
Ernst
Hallo Mathias !
Nach kurzer Überlegung muss ich dir beipflichten bringt eigentlich nichts wenn nicht alle sichtbar sind.Ich habe noch Autofilterfunktionen integriert macht glaub ich mehr Sinn.
Recht herzlichen Dank für die Anpassung kann ich sicher noch für weiter Projekte verwenden die ich gerade in Planung habe.
"Über den Dingen zu stehen zeichnet einen Profi aus" bin beindruckt
Danke und lg.aus Wien.Ernst
Anbei die Endversion Ist vielleicht auch noch für andere Sachen zu gebrauchen !
https://www.herber.de/bbs/user/62387.zip
Anzeige
AW: Perfekt !
12.06.2009 12:24:17
Ernst
Hallo Mathias !
bin beeindruckt !
Werde mir diese kleinen Formfehler (Rechtschreibung)wohl nie abgewöhnen.
Lg.Ernst
;o) ________oT
12.06.2009 23:10:41
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige