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

Datumsfilter über ADO u.Spezialfilter

Datumsfilter über ADO u.Spezialfilter
30.07.2019 17:56:33
Andreas
Hallo an alle
Das ist eine Indirekte Weiterführung eines Threads den ich angefangen habe und in dem aus der ursprünglichen Frage sich eine neue ergeben hat. Leider hatte ich jetzt ein paar Tage Fieber und der Thread ist mir leider abgelaufen. Nach einer Erklärung von Chris hat sich rausgestellt das meine ursprüngliche Absicht nicht/schlecht durchführbar ist. Aber er hat mir auch zwei Ansätze gegeben mit denen ich mein ziel teilweise erreiche.
@Chris solltest du das lesen. Du hast mich auf (glaub ich) den richtigen weg gebracht. Danke dafür Ich lese mich in die zwei Möglichkeiten grade ein und glaube das sie ein gewaltiges Potenziell für mich haben und Entschuldigung dass ich dann nicht mehr geschrieben hab. Mir ging es wirklich sehr schlecht.
Aus vorhergehenden Thread damit ihr jetzt nicht alles lesen müsst:
Meine Ursprüngliche Absicht war es für einen Teil eines Einsatzplanes ein Übersichtsblatt für einen Zeitraum zu erstellen die mit anderen Daten aus Absenz Erfassung und Projekt Daten über Formeln noch ergänzt wird und aus dem heraus ich aber auf Grundlage der zusätzlichen Informationen die Daten einer bestimmten Tabelle ändern/hinzufügen wollte. Eine User form die Chris vorgeschlagen hat wollte ich vermeiden weil ich darin keine bedingten Formatierungen einsetzen kann bzw.und ich bei den Formel die Flexibilität verliere. Er hat mir dann erklärt das ich aufgrund der fehlenden eindeutigen ID dass hin und her Jonglieren/Schieben zwischen den zwei Tabellen zu unsicher ist. Die neuen Ansätze waren:
• Spezialfilter / Advanced
• ADO abfrage

Aber das hat wider neue Fragen aufgeworfen.
Alter Thread: https://www.herber.de/cgi-bin/callthread.pl?index=1703412#1703412
Die eigentliche Frage und Testdatei folgt gleich.
Grüße Andreas

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datumsfilter über ADO u.Spezialfilter
30.07.2019 18:15:14
Andreas
Ich will versuchen das Übersichtsblatt nur zum Betrachten und prüfen der Daten zu nutzen und gegebenen falls zur der einen Tabelle die ich ändern muss wechseln, zwecks Ergänzung, Änderung, hinzufügen der Datensätze : Mein Problem ist aber folgendes.
Ich möchte Datensätze anhand von Datumsangaben welche in zwei Textboxen Eingegeben werden umsortieren so das die benötigten Daten Sätze am Ende der Intelligenten Tabelle sind: (Mit dem Normalen Auto Filter bekomme ich das leider nicht hin). Anschließend nach der ersten Spalte sortiert. Die nicht benötigte Datensätze müssten ausgeblendet und schreibschützen werden so das die sichtbaren Daten nicht durch ausgeblendete Zeilen unterbrochen sind.
Anschließend müssten die Sichtbaren Daten in die Intelligente Tabelle auf dem Tabellenblatt Zeitraum übernommen werden wo sie mit sehr Vielen Formeln (S verweisen usw.) und bedingten Formatierungen ergänzt und hervorgehoben werden. Die bedingten Formatierungen und Formeln bzw was da sonst noch sein soll bekomm ich hin. Aber die Datums Sortierung und übertragen leider nicht.
Bsp. Datumsvariationen für Zeitraum 12.07 – 20.07.19 den ich sehen will.
• Innerhalb des angegeben Zeitraums . bsp.16.07 bis 17.07 (das ist klar)
• Zeitraum schneiden bsp. 02.06 bis 25.08
• Kein Enddatum haben bsp 11.07 bis (besonders Tückisch)
• Gar keine Datumsangaben haben
Im Prinzip würde ich sowohl die ADO abfrage für die Ziel Tabelle als auch den Advanced Filter für die quell Tabelle brauch. Nur ich hab bei beiden jeweils ein Problem. Ich will für die Ziel Tabelle deswegen die ADO Abfrage nutzen und nicht die Kopierfunktion des Advanced Filter weil ich diese ev. Später noch andere quellen erweitern werde. Aber Dafür muss ich mich wohl längere zeit mit SQL beschäftigen.
Meine Fragen:
Beim Advancefilter benötigt man ja einen .Range für die Kriterien ich hab aber zwei Textboxen. Ich hab da wie blöd gegoogelt und einfach keine Lösung gefunden, wie ich das hinbekomme die Textboxen in den Filter einzubinden. Das einzige was es zum funktionieren gebracht hat. Ist ein Umweg über die Tabelle indem ich dort den Kriterien Bereich erstelle und wider lösche. Geht das auch irgendwie anders also ich meinen direkt aus Listbox in Advancefilter? Gibt es einen weg trotz des Advancefilters die Autofilter noch zu benutzen?
Bei der ADO Abfrage habe ich die Verbindung hinbekommen aber den abfrage String nicht. Außerdem ändert mir die Abfrage aus irgendeinem Grund die Datumsformatierung in der Quellmappe kommt aber richtig in der Zieltabelle an. Könnte wir dabei jemand helfen.
Test Datei: https://www.herber.de/bbs/user/131165.xlsm
Ich wäre echt sehr dankbar, wenn mir jemand bei den zwei Problemen helfen könnte. Natürlich bin ich auch für weitere alternative Ansätze dankbar.
Grüße Andreas
Anzeige
AW: Datumsfilter über ADO u.Spezialfilter
30.07.2019 18:27:25
Andreas
Das ist mein ADO Code da hab ich das problem das mir der SQL befehl fehlt. Und das ich nicht weis wie ich das Lesen und die ausgabe auf die jeweiligen Inteligenten Tabellen beschränke.
ADO
Public Sub LateAdoTest()
Dim Von As Date
Dim Bis As Date
Dim wsZeitraum As Worksheet
Dim wsDaten As Worksheet
Dim iTabZeitraum As ListObject
Dim iTabDaten As ListObject
Set wsZeitraum = ThisWorkbook.Worksheets("Zeitraum")
Set wsDaten = ThisWorkbook.Worksheets("Daten")
Set iTabZeitraum = wsZeitraum.ListObjects("Zeitraum_IntelligenteTabelle")
Set iTabDaten = wsDaten.ListObjects("Daten_IntelligenteTabelle")
Von = wsZeitraum.OLEObjects("TextBox1").Object.Value 'Von
Bis = wsZeitraum.OLEObjects("TextBox2").Object.Value 'Bis
'*******AB Hier ADO ********
Dim oAdoConnection As Object, oAdoRecordset As Object
Dim sAdoConnectString As String, sPfad As String
Dim sQuery As String
On Error GoTo Fehler
sPfad = ThisWorkbook.FullName
Set oAdoConnection = CreateObject("ADODB.CONNECTION")
sAdoConnectString = _
"Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties='Excel 12.0 Xml;HDR=YES';Data Source=" & _
sPfad
oAdoConnection.Open sAdoConnectString
Set oAdoRecordset = CreateObject("ADODB.RECORDSET")
sQuery = "SELECT * FROM [Daten$]"
With oAdoRecordset
.Source = sQuery
.ActiveConnection = oAdoConnection
.Open
ThisWorkbook.Worksheets("Zeitraum").Range("B3").CopyFromRecordset oAdoRecordset
End With
Aufraeumen:
On Error Resume Next
oAdoRecordset.Close
oAdoConnection.Close
Set oAdoRecordset = Nothing
Set oAdoConnection = Nothing
Exit Sub
Fehler:
MsgBox "Fehler: " & Err.Description
Resume Aufraeumen
End Sub
Und das ist der Spezialfilter Code. Bei dem ich gerne die Filterkriterien direkt an den Spezialfilter übergeben will ohne den derzeitigen Umweg über das Tabellenblatt.
Spezialfilter
Sub SpezialfilterDatum()
Dim Von As Date
Dim Bis As Date
Dim wsZeitraum As Worksheet
Dim wsDaten As Worksheet
Dim iTabZeitraum As ListObject
Dim iTabDaten As ListObject
Set wsZeitraum = ThisWorkbook.Worksheets("Zeitraum")
Set wsDaten = ThisWorkbook.Worksheets("Daten")
Set iTabZeitraum = wsZeitraum.ListObjects("Zeitraum_IntelligenteTabelle")
Set iTabDaten = wsDaten.ListObjects("Daten_IntelligenteTabelle")
Von = wsDaten.OLEObjects("TextBox1").Object.Value 'Von
Bis = wsDaten.OLEObjects("TextBox2").Object.Value 'Bis
'Filter Löschen
If wsDaten.AutoFilterMode = True Then If wsDaten.FilterMode = True Then wsDaten.AutoFilter. _
ShowAllData
'Provisorischen Kriterien bereich erstellen und Werte zuweisen
wsDaten.Range("AF23:AG23").Value = "Von"
wsDaten.Range("AH23:AI23").Value = "Bis"
wsDaten.Range("AF24,AH24").Value = ">=" & CLng(Von)
wsDaten.Range("AG24").Value = "=" & CLng(Bis)
wsDaten.Range("AH25").Value = "="
Application.CutCopyMode = False
Range("Daten_IntelligenteTabelle[#All]").AdvancedFilter Action:= _
xlFilterInPlace, CriteriaRange:=Range("AF23:AI25"), Unique:=False
'Columns("AF:AI").Delete Shift:=xlToLeft
End Sub

Bin für jeden Tipp und hinweis Dankbar
Grüße Andreas
Anzeige
AW: Datumsfilter über ADO u.Spezialfilter
31.07.2019 11:19:20
Luschi
Hallo Andreas,
habe mal das Zeitraum-Problem soweit klargemacht, daß die (z.Z. alle!) Daten eingelesen werden. Am Nachmittag setze ich dann den SQL-Where-Filter rein.
https://www.herber.de/bbs/user/131174.xlsm
Gruß von Luschi
aus klein-Paris
AW: Datumsfilter über ADO u.Spezialfilter
31.07.2019 16:35:24
Luschi
Hallo Andreas,
hier noch das selbe Beispiel mit eingebauten Filter aus 2 TB's und ein 2. Filter, wo das Bis-Datium leer ist.
https://www.herber.de/bbs/user/131185.xlsm
Gruß von Luschi
aus klein-Paris
AW: Datumsfilter über ADO u.Spezialfilter
31.07.2019 17:14:59
Andreas
Sorry hab nicht gesehen das es zwei Beiträge von dir sind und hatte nur den ersten gelesen.
Ich schau mir die zweite tabelle gleich an.
Grüße
Andreas
Anzeige
AW: Datumsfilter über ADO u.Spezialfilter
31.07.2019 16:55:18
Andreas
Hallo Luschi
Danke für deine Hilfe. Also bis jetzt verstehe ich den code. Danke das du ihn so gut Kommentierst.Auf den SQL String bin ich gespannt. Ich habe echt null ahnung von SQL (aber das werd ich noch änderen)
Ich versuch mal im Rahmen meiner Möglichkeiten mitzuhelfen: Angenommen das "Von" und "Bis" Datum wären zwei benannte Bereiche und vorausgesetzt ich hab keinen Denkfehler begangen, dann müsste die Formel dazu so außen aussehen.
=ODER(UND(Daten_IntelligenteTabelle[@Von]>=Von;Daten_IntelligenteTabelle[@Von]=Von;Daten_IntelligenteTabelle[@Bis]>=Bis); Daten_IntelligenteTabelle[@Bis]="";Daten_IntelligenteTabelle[@Von]="") 

Ich weiß nicht ob das jetzt Hilfreich ist.
Eine Frage hätte ich wenn ich in der ersten Spalte eine Kombination aus Buchstaben und Zahlen habe bspw „2a“ dann wird es als „2“ übertragen. Woran liegt das. Wie kann man das umgehen?
Grüße und Danke
Andreas
Anzeige
AW: Datumsfilter über ADO u.Spezialfilter
31.07.2019 22:13:09
Andreas
Hallo Luschi
Ignorier die Formel in dem vorherigen Post, die stimmt nicht. Jetzt habe mir auch die zweite Datei angesehen. Das schaut schon echt gut aus. Danke
Leider habe ich im Kriterien Bereich des Spezial Filters noch weitere Angaben hinzufügen müssen weil der Filter nicht richtig funktioniert hat. Der Eintrag von 17.07 hat gefehlt. Ich habe das in der Test Datei ergänzt. https://www.herber.de/bbs/user/131195.xlsm
Wie erweitere ich den SQL String um weitere „UND“ und „ODER“ ich hab es so Probiert um die erste Zeile des Spezialfilters abzubilden
   sQuery = "SELECT * From [" & wsDaten.Name & "$" & sRange & "] As Daten " & _
"Where (Daten.Von >= " & sFilter1 & " And Daten.Von = " & sFilter1 & " And Daten.Bis >= " & sFilter2 & ") " & "Order By Daten.[Name] ASC, Daten.[Von];"
Aber so scheint es falsch zu sein, ich müsst wohl etwas in der Richtung von um den Spezialfilter abzubilden .
=Oder(Und(True;True;True;True);UND(;True;True);UND(;True;True;True);True))
Die letzte Zeile des Spezialfilters bzw. tas letzte True wäre dann das zweite Filter Beispiel das du mir in der Datei geschickt hast.
Ach ja, wofür ist die Übergabe Variable im Kopf des Spezialfilter Codes?
Danke für deine Hilfe
Grüße Andreas
Anzeige
AW: Datumsfilter über ADO u.Spezialfilter
01.08.2019 08:11:10
Luschi
Hallo Andreas,
hier mal 'ne neue Version, habe den Spezialfilter auf AdoDB umgestellt - weitere Infos siehe Datei.
https://www.herber.de/bbs/user/131200.xlsm
Gruß von Luschi
aus klein-Paris
AW: Datumsfilter über ADO u.Spezialfilter
01.08.2019 21:34:08
Andreas
Hallo Luschi
Vielen Vielen dank ich lerne aus den Dateien die du reinstellst wirklich extrem viel. Die letzte Datei/Das Prinzip ist echt cool :)) Ich bastel mir da noch was für die eingabe aber echt genial. Ich habe auch etwas rumprobiert und auf Grundlage deiner Beispiele ist folgender (mein erster Funktionierender) SQL String dabei rausgekommen.

VonSQL = CDateSQL(Von)
BisSQL = CDateSQL(Bis)
sQuery = "SELECT * From [" & wsDaten.Name & "$" & sRange & "] As Daten " & _
"Where (Daten.[Bis] Is Null OR Daten.Von >= " & VonSQL & _
" And Daten.Von = " & VonSQL & " And Daten.Bis >= " &  _
BisSQL & _
" OR Daten.Von >= " & VonSQL & " And Daten.Bis = " &  _
VonSQL & ") " & _
"Order By Daten.[Name] ASC, Daten.[Von];"

  • Da es mein erster SQL String ist. Hätte ich die frage ob etwas offensichtlich schlecht daran ist?

  • Ist es möglich mit „Order by“ in einer Benutzer definierten Reihenfolge zu sortieren. Oder ist es sinnvoller da eher mit den üblichen VBA Methoden vorzugehen?

  • Mir ist aufgefallen das wenn in der ersten Spalte eine Zahl und ein Buchstabe steht „3b“ ist nach der Ausgabe nur eine „3“ gestanden in der letzten 2 Datei ist der Fehler weg. Woran liegt das. Ich finde die stelle im Code nicht die das behoben hat.

  • Ist es möglich ist den Spezial Filter über VBA zu nutzen ohne Kriterien Bereich in der Tabelle, also das die Kriterien direkt im Code steht. Das ist jetzt nicht auf den Code in deine letzte Datei bezogen. Sondern ganz allgemein gefragt ob es machbar ist.

  • 
    .Calculation = IIf(Not xModus, -4105, -4135) 'Was bedeuten die zahlen
    .Cursor = IIf(Not xModus, xlDefault, xlWait) 'Was wird da ab/an geschaltet
    
  • Hast du zufällig ein bsp in dem Datenzeilen hin und her geschoben werden zwischen zwei Tabellen Bspw so wie sie jetzt anhand des Datums übernommen werden nur das sie nach einer Änderung in der zweiten Tabelle wieder zurück gelangen also der entsprechende Daten Satz überschrieben wird Angenommen die Datenzeilen hätten eine eindeutige ID. Ich wüsste gern wie das ungefähr ausschaut. Ich überlege gerade ob ich aus Personalnummer und Datumsangaben über eine Formel ev. Eine ID für den Datensatz erzeugen könnte. Das muss jetzt aber nicht sein, du hast mir schon sehr geholfen. Nur wenn du irgendwas in der Richtung hast. Es würde mich sehr interessieren.

  • Danke für die ganze Hilfe
    Grüße Andreas
    Anzeige
    AW: Datumsfilter über ADO u.Spezialfilter
    02.08.2019 08:02:54
    Luschi
    Hallo Andreas,
    die aufgezeigte SQL-Bedingung ist vielleicht syntaktisch ohne Fehler, aber sicher nicht in sich stimmig
    - mehrere Bedingungen, die sich auf die gleiche Datums-Spalte beziehen
      werden mit OR verbunden
    - Bereichsunter- sowie -obergrenze werden mit AND verbunden
    - bewährt hat sich, daß man zusammenhängende Bedingungseinheiten einklammert
      also: ...OR (Daten.Von >= " & VonSQL & " And Daten.Von - eine benutzerdefinierte Sortierung ist per AdoDB kompliziert
      und da würde ich auch keine Kraft reinstecken ohne nähere Erklärungen
    - da es zwischen der IT mit den AdoDB-Ergebnisdaten und der IT mit den Quelldaten
      keine datenbanktechnische Beziehung gibt, die man per .Refresh-Methode aktualisieren könnte
    - kann man solche Sonderwünsche auch hinterher per Vba oder von der Excel-Oberfläche aus machen
    - AdoDB kommt aus der Datenbanktechnologie, und hier ist es i.R. nicht möglich,
      unterschiedliche Datentypen in einer Spalte (Datenbankfeld) zu speichern
      (Text oder Zahl) aber nicht beides gleichzeitig - das wird vom DB-System verhindert
      so wird die Spalte als 'Text' definiert und mit den Zahlen darin kann man dann erst mal nicht rechnen
      also eine Summe über die Spalten bilden
    - beim Zugriff von AdoDB auf Exceldaten werden die Spalten analysiert und eine gewisse Anzahl
      von Zeilen herangesogen
    - kommen darin nur Zahlen vor und erst später eine Zeichenkette wie '3a', dann wird daraus eine Zahl gemacht
    - und das 'a' wird ignoriert, klappt die Umwandlung in Zahl nicht, wird der Wert auf Null gesetzt und die Zelle ist leer
    - kommt aber innerhalb des Prüfbereiches beides vor (Zahl und Text), dann wird ALLES in der Spalte zu Text
      gut daran zu erkennen, daß die Spaltenwerte plötzlich links statt rechts in der Zelle stehen
    - durch diesen eingebauten Automatismus können so auch falsche Werte im Ergebnis-Konglomerat stehen
    - oder bei der Datenerfassung wird das schon berücksichtigt durch die Eingabe: '3b '2 '4 '5y usw.
    - eine Excel-Formatierung zu Text in den Quelldaten ist nicht immer zielführend
    ---------------------------------------------------------------
    -4105 ist der excelinterne Wert für automatische Berechnung und -4135 der für manuelle Berechnung
    xlWait zeigt die Eieruhr auf dem Monitor an und xlDefault schaltet sie wieder aus
    Deine letzte Idee mit dem Rückschreiben ist sicher per Makro machbar, sollte aber gut überlegt sein.
    Entweder legt man genügend Sicherungskopien vorher an, oder schreibt das geänderte AdoDB-Ergebnis in ein neues leere Arbeitsblatt/Arbeitsmappe.
    So genug philosophiert und
    Gruß von Luschi
    aus klein-Paris
    Anzeige
    AW: Datumsfilter über ADO u.Spezialfilter
    02.08.2019 17:47:49
    Andreas
    Hallo Luschi
    Also ich werd mich wirklich mit SQL Beschäftigen müssen, es ist innerhalb von Excel echt Super einsetzbar.
    Verstehe dann ist Sortieren innerhalb der SQL abfrage eher zu vermeiden wenn es keine einfachen Sortierungen sind. Ich mache es mit den Normalen vba Verfahren.
    Das mit dem Rückschreiben lass ich auch lieber. Hab schon einen Alternativen Gedanken, der genau so gut ist.
    Danke für die ganze Hilfe und alle Erklärungen, du hast mich meinem Ziel ein Großes Stück näher gebracht. Und sehr viele meiner Fragen beantwortet. GROßES DANKE
    Grüße Andreas

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige