Danke, lieber Kai! Gute Variante. Das Ansprechen mittels Query finde ich super. Du machst eine tolle Arbeit. Wie immer sehr interessant. Liebe Grüße aus Österreich! Reinhard
wieder mal sehr Informativ, mal sehen wo ich das umsetzen kann. Ich greife auch oft auf anderen Tabellen zu, die bis jetzt immer geöffnet, kopiert und wieder geschlossen habe. Allerdings ist die Datenmenge (Zeilen) immer unterschiedlich und müsste ermittelt werden.
Hallo Kai, vielen Dank für das sehr gut gemachte Video, Schritt für Schritt mitgemacht und klappt alles. Das Filtern funktioniert auch, allerdings nicht beim Datum. Mein Ziel ist es, aus einer Archivdatei, die geschlossen bleibt, die Datensätze von z.B. "01.01.2020 bis 31.12.2020" auszulesen, aber ich denke das hat was mit dem Datumsformat zu tun und man muß das vorher wandeln. Da lese ich mich noch mal ein in die Filtermöglichkeiten. 😄
Hallo und Danke Kai! Du macht den Filter Where Product ='VTT'. Wie sieht denn die Formel aus, wenn ich WHERE Datum >Anfang and < Ende, damit man zwischen Daten filtern kann? Geht das überhaupt?
Danke für das tolle Video und Deine Zeit, Kai! Ich dann den RecordSet in die Tabelle kopieren, aber nicht in den Array "arr = rs.GetRows", dieser bleibt leer. Kannst Du da helfen? Vielen Dank
Super Video und einfache Erklärung, danke dafür! Gibt es eine Möglichkeit in der Select From Abfrage direkt zu definieren dass erst ab einer bestimmte Zelle bzw Zeile bis zum Ende der Quelltabelle eingelesen wird? (So dass z.B. erst ab A3 eingelesen wird)
Hallo Tim, freut mich, dass dir das Video gefällt! Du kannst in dem SQL Query mit WHERE arbeiten, um nur bestimmte Datensätze einzulesen. Du könntest z.B. nach einer fortlaufenden ID filtern und sagen, dass du nur die Datensätze einliest, deren ID größer ist als ein bestimmter Wert. Ich wünsche dir alles Gute bei der Umsetzung! LG Kai
Hallo Kai, echt Klasse! Aber eine Frage: die Spaltennamen enthalten bei mir z.T. einen Punkt (das muss auch so bleiben). Die SQL-Abfrage macht daraus aber ein #. Wenn man's weiß einfach ein Replace. Gibt es aber auch noch andere "Übersetzungen"?
Sehr gut erklärt jedoch werden immer nur Konstanten (Dateinamen etc.) behandelt. Wie mache ich das u.a. mit einer .CSV Datei, deren Dateinamen als auch der SheeteName in einer Variablen abgelegt sind?
Hallo Jochen, freut mich, dass dir die Erklärung gefällt. Du kannst Strings erweitern indem du sie beendest, dann und dann mit der Variable verbindest, wie bspw. "ANFANG DES STRINGS " & VARIABLE & " ENDE DES STRINGS" Hoffe das hilft dir weiter. LG Kai
Hallo Kai, super Video!!! Gibt es auch eines in dem du beschreibst wie Daten per ADO in eine Datei geschrieben werden können? Oder ist das mit dieser Methode nicht möglich?
Hallo Kai, erst einmal vielen Dank für die tollen Videos! Eine Frage: Ich bekomme bei mir folgende Fehlermeldung bei der Connection: " Microsoft ODBC Treiber für Excel Aktualisierung nicht möglich : Datenbank oder Objekt ist Schreibschutz. Was muss ich hier tun? Mein Betriebssystem ist Windows 11. Excel ist 2021.Vorab besten Dank!
Hallo Kai erstmal Danke für deine tollen Videos die du immer machst. Wie ist es eigentlich wenn die Datei von den man die Daten abruft mit Kennwort gesichert ist, können die Daten trotzdem abgerufen werden mit dieser Prozedur?
Hallo Kai, ich lerne super viel durch Deine Videos. Vielen Dank. Eine Frage zum obrigen Video: Weißt Du, wie ich die Formatierungen und Farben, etc. aus der Quelldatei mit in die Ausgabedatei nehmen kann? Viel Grüße Peter
Hallo Kai, wie immer ein tolles Video. Ich habe dieses gerade in einem Projekt umgesetzt aber eine Frage: wie kann ich das zu importierende Arbeitsblatt über seinen Codenamen oder Index ansprechen. Ich importiere Fremddateien mit nur 1 Arbeitsblatt aber unterschiedlichen Namen.
Hallo zusammen, kennt jemand einen Weg, wie man die "anzuzapfende Datei" variabler machen kann? In Kai's Video wurde der Pfad zur Datei leider fix gesetzt, so dass die Datei immer gleich heißen muss, damit die Connection aufgebaut werden kann. Kennt jemand einen weg wie man dort ein Datei öffnen Fenster bekommt und sich dann die Datei aussuchen kann? Vielen Dank!
Hallo Kai. Vielen Dank für das Video. Es erweitert den VBA Horizont doch um einiges :-) In dem Video wird genau das gezeigt was ich benötige. Allerding gibt es auch einen Hacken. In meinem Quelldokument (Quellsheet) sind die ersten 3 Zeilen Überschriften. D.H. die eigentlichen Datensätze beginnen erst ab Zeile4. Wie lässt sich das realisieren? Leider lässt sich auch auf die 3 voranstehenden Zeilen nicht verzichten.
Hallo, mit "Tabelle1$D1:G200" im Query kannst du angeben, welcher Bereich in der Excel-Datei genommen werden soll. Im Beispiel wird der Bereich D1:G200 genommen. LG Kai
Hallo Kai leider bin ich nicht so fit in VBA Programmierung, ich habe folgendes Problen - ich möchte aus mehreren Dateien (für jedes Monat eine) Daten in eine Auswertung importieren ohne diese zu öfffnen. Hierzu habe ich ein Programm (Modul) das auch einwandfrei funktioniert - allerdings brauch ich für jede Monatsdatei ein eingenes Modul weil sich der Namen der Datei aus der ich importiere und der Platz wohin die Daten sollen jedes Monat ändert. Deshalb habe ich das versucht über Variabe zu lösen. Das mit dem Dateinamen funktionrt schon mal allerdings sobald ich statt der Zeile Tabelle1.Range("A14").CopyFromRecordset rs die Zeile mit der Variablen sziel.CopyFromRecordset rs aktiviere bekomme ich eine Fehlermeldung. Wenn die sziel-Zeile aber deaktiviert ist bekomme ich im Direktfenster folgendes ausgegeben Tabelle1.Range("A14"). Kann mir jemand helfen wo hier mein Fehler liegt - Vielen Dank schon mal Sub ADOK01a() 'Variablen deklarieren Dim Connection As New ADODB.Connection Dim Query As String Dim rs As New ADODB.Recordset Dim arr As Variant Dim spfad As String, sziel As String spfad = Tabelle5.Range("C19").Value sziel = Tabelle5.Range("C22").Value 'Connection herstellen 'Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=ielpfadZ;HDR=Yes';" Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & spfad 'Query definieren und ausführen Query = "SELECT * FROM [Auswertung Summe$]" rs.Open Query, Connection 'Daten ins Tabellenblatt laden Debug.Print sziel 'Tabelle1.Range("A14").CopyFromRecordset rs sziel.CopyFromRecordset rs rs.Close End Sub
Hallo Kai, vielen Dank für das tolle Tutorial. Du erklärst es sehr gut und auf eine sehr angenehme sympathische Art. Ist gelinde und Abonniert. Ich habe das Problem, das die Dateien die ich von extern erhalte im Tablellennamen Leerzeichen und Dots . Enthalten wie „4. Tabelle mtl.“. Hierbei hat der Query Befehl Probleme. Wie kann man das Problem lösen? Doppelt „“ damit die „ im String bleiben hat nicht geklappt. Zum Hintergrund. Ich muss ca. 40 Dateien mit mehr als 30 Tabellenblätter (brauche nur ein Blatt) einlesen. Manche sind rund 100 MB groß. Möchte am Ende alles in ein Array und dann in 1 Tabelle bekommen. Bin erst beim ersten Schritt das auslesen der 1 Datei bevor ich eine Schleife zum Einlesen erstelle. Viele Grüße Martin
2 роки тому
Hallo Kai, kannst du nicht mal in dem Zusammenhang ein Video über Early und Latebinding machen?
Hallo Kai. Super Videos! Habe aber noch folgende Fragen Ist es richtig, dass auf diese Art nur auf geschlossen Exceldateien zugegriffen werden kann? Ich möchte auf interne 'intelligente' Tabellen (.ListObjects) per SQL zugreifen können (um auch mal einfach nach SQL Server wechseln zu können) Wie kann ich das Ende eines (.ListObjects) ausfindig machen um Daten anzuhängen? Ich finde es toll, dass es bei Deinen Videos auch um schönes Design geht.
Hallo Markus, freut mich, dass dir mein Video gefällt :) Du kannst mit ADODB auch auf offene Arbeitsmappen zugreifen. Und wie du das Ende einer intelligenten Tabelle findest und dort Einträge hinzufügst, zeige ich bspw. in diesem Video: ua-cam.com/video/CXvpMMb8vw4/v-deo.html LG Kai
Hi, kleine Frage zu der Daten-Filterung im Query: Ich starte das ganze aus einer UserForm und würde gerne den Filter aus einer TextBox auslesen. WHERE Datum = Textbox1.Text funktioniert aber leider nicht. Hast du eine Idee? Liebe Grüße
Hi Christoph, wahrscheinlich hast du das Problem schon gelöst. Aber für alle, die die selbe Frage haben: Query = "SELECT * FROM [Tabelle1$] WHERE Datum = '" & Textbox1.Text & '" Du musst den Textboxbezug aus dem String herausnehmen, damit VBA danach sucht. LG Kai
Rechthertlichen Dank, ein super Video hat mir echt geholfen. Würde gerne wissen, wie kann ich den Datenabgleich aktualisieren ohne in VB die F5 taste zu betätigen
Schaue dir dazu am besten mein Video zum Thema Makro ausführen an: ua-cam.com/video/xuXSJOE9Rqg/v-deo.html
3 місяці тому
Hallo Kai. Leider sagt mein VBA, dass im Query die Tabelle nicht gefunden wird. Ich habe es mit diversen Varianten versucht. Meine Tabelle1 heißt user. Er findet weder Tabelle1$, noch Tabelle user. Habe den Tabellennamen auch in einfache '' gepackt, kein Erfolg. Die Connection steht, das ist gesichert. Ich habe O365, könnte es daran liegen?
3 місяці тому
Ich nochmal. Nach dem Download deiner Testmappe und Anpassung des DB Pfades, erhalte ich die gleiche Fehlermeldung. Objekt Tabelle1 wurde nicht gefunden. Es ist also definitiv ein Office 365 Problem. Auch kann ich mit O365 keine Acces Datenbank mehr verbinden, was unter 2016 noch funktioniert hat.
Hallo Kai super Video bei mir funktioniert es einwandfrei, ist es möglich den Wert "Dateipfad" hier aus einer Excelzelle auszulesen so das ich ihn dynamisch verändern kann.
Das ist natürlich möglich. Dafür den Wert der Zelle am besten in eine Variable speichern und die Variable an der entpsprechenden Stelle der Codezeile hinzufügen. Ich hoffe das hilft dir weiter.
@@KaiWeissmann Ja das dachte ich mir so im Prinzip, nur leider bin ich in VBA nicht so bewandert wie das genau geht - kannst du mir hier ein Beispiel zeigen? oder weißt du wo ich das nachlesen kann?
Ist das auch möglich, zu beschränken, dass man nur aus bestimmten Dateien bestimmte Zeilen auslesen kann/darf? Praktisch geht es darum, dass Mitarbeiter Ihre eigenen Schichten sehen können sollen. Der komplette Plan sollen in einer mit einem Passwort geschützten "Haupt-Excel" gespeichert werden. Jeder Mitarbeiter bekommt seine eigene Passwortgeschütze Excel-Datei, die damit eine entsprechende Zeile aus der Hauptdatei auslesen können. Der Mitarbeiter soll aber nicht abändern können, welche Zeile ausgelesen wird. Geht das mit Excel?
Hallo Chris, ja, du kannst das Ganze auch andersherum machen. Dazu müsstest du den SQL-Query anpassen. Ansonsten kannst du dir auch mal dieses Video von mir dazu anschauen: vbatrainer.de/geschlossene-arbeitsmappe/ Dort ist es vielleicht etwas leichter den Code so anzupassen, dass die Daten nicht importiert, sondern verändert werden. LG Kai
Hey Kai, wieder ein super Video! Ich probiere hier mit meiner eigenen Datei herum. warum fehlen mir in manchen Spalten die Alphanumerischen Werte und es sind nur Numerische vorhanden? Kann ich das unterbinden? z.B. in A1 sollte Artikelnummer stehen, im Array steht aber "Null" und in A2 geht es mit einer Artikelnummer 1 los, bei der Artikelnummer A steht aber wieder "Null" im Array! Warum das?🤔
Hallo Kai, Ich mache seit einpaar Wochen nichts anderes als Videos über VBA zu schauen. Aber testo mehr ich schaue desto unübersichtlicher wird das Ganze. Es geht um ein Tabellenblatt Namens Tagebuch (Blutzucker etc.), dass ich von einem App Server runterlade. Dieses Tagebuch soll nun in 3 andere Tabellenblätter ausgelesen werden. Im Tagebuch sind Spalten von A:Y und für jedes Tagesdatum unterschiedlich viele Zeilen je nach Anzahl der Messwerte. Da ich meine Frage detailiert schon in Foren gepostet habe, hat sich niemand meines Problems angenommen, nur die die damit Geldverdienen wollten. Da ich nur Basis Kenntnisse in Ecxel habe, und in VBA überhaupt keine nun meine Frage: Macht es überhaupt Sinn das selbst zu probieren? Grüße aus Bayern Jo
Hallo Kai Wieder ein sehr gutes Video das du erstellt hast. Gratulation. Habe es nachgebaut und habe aber jetzt noch eine Frage. Habe versucht den Dateipfad mittels eines Strings einzulelsen leider ohne Erfolg. Gibt es dafür eine Lösung? Gruss Roger
Hallo Roger, vielen Dank für das nette Feedback. Ersetze mal Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=C:\Users\kaiwe\Desktop\February.xlsx;HDR=Yes';" durch Dim sPfad As String sPfad = "C:\Users\kaiwe\Desktop\February.xlsx" Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & spfad & ";HDR=Yes';" Damit sollte es funktionieren :) sPfad sollte natürlich der Pfad auf deinem Rechner dann sein. Schreib mir gerne, ob bei dir alles funktioniert hat. Ansonsten würde es mich auch brennend interessieren, was dein individueller Anwendungsfalls dazu in der Praxis ist :) LG Kai
@@KaiWeissmann Hallo Kai Es hat funktioniert Danke für die Hilfe. Ich verwende die Funktion um Debitorenausstände von einem Dokument in ein Masterdokument zu kopieren. Der Pfad besteht aus einem Jahresverzeichnis und dem Dokumentnamen. Gruss Roger
Hey Kai, erst einmal - super Video! Ich habe eine Frage an Dich: Ist es über VBA auch irgendwie möglich, eine Tabelle, welche man vorher aus einer geschlossenen Arbeitsmappe kopiert und in die Zielarbeitsmappe eingefügt hat, anschließend über den VBA Code zu bearbeiten/formatieren? Sprich, ich habe über eine Form, welche mit dem Makro hinterlegt ist, die gewünschte Tabelle eingefügt und möchte diese nun auch hinsichtlich Überschriftenfüllung, Spaltenbreite und einfügen eines Datenfilters für jede Spalte über einen Knopfdruck bearbeiten. Kann ich das per Coding machen oder geht es eben doch nur mit einer Makroaufnahme? Grüße
Hey Groppi, freut mich, dass dir das Video gefällt. Prinzipiell kannst du alles im Code machen, was du auch mit der Makroaufnahme machst. D.h. konkret kannst du die Tabelle auch genau so formatieren, wie du das möchtest. LG Kai
Hallo Kai, vielen Dank für dieses Video! Nach deinem Schema funktioniert alle bestens. Kannst du mir vielleicht verraten, wie ich eine Passwortgeschützte Mappe über die Connection öffne? Liebe Grüße Katha :)
Hallo Kai Erstmal Danke für deine geniale Videos immer! Ich konnte schon einiges bei mir im Unternehmen übertragen und es macht die Arbeit echt leichter. Eine Frage: ich bekomme immer noch einen Laufzeitfehler und zwar beim Schritt rs.Open Query, Connection . Gemäss Lockalfenster ist der Wert "Nothing". Zu Beginn hatte ich das gleiche Problem wie Roger Voisard, das konnte ich mit deiner Lösung beheben. Hast du mir dazu auch eine Lösung? Grüsse
Mal wieder ein sehr schönes Video :) Aber eine Frage habe ich zu dem Thema, in deinem Video setzt er die Daten automatisch in die nächste freie Zeile...ich arbeite gerade an einem simplen Dispositionstool wo aktuell über VBA das Tool seine Daten aus einer seperaten "Jahresplanungs" Datei rauszieht. Bei mir sieht ganz ganze so aus "Jahresplanung öffnen > Datein kopieren > Wechsel zu Tool > Einfügen. Würde das auch mit dem Query gehen? Also das ich ihm keine Spalte vorgebe sondern einen Bereich der relativ groß ist aus einer geschlossenen Datei rüber kopieren kann? P.s das Tool basiert nur auf deine Videos und ich hatte vorher 0 mit VBA zu tun :D Das sollte für deine Qualität als erklär Bär sprechen :)
Hallo Maik, vielen Dank für dein Feedback. Es freut mich sehr, dass dir die Videos weiterhelfen. Teil sie auch gerne mit jedem, den das Thema VBA interessieren könnte :) Zu deiner Frage: Ja, das geht auch und wäre im Prinzip der ideale Fall, um ADO auszuprobieren. Ein Umstieg auf eine Datenbank ist später dann wesentlich leichter, wenn beispielsweise mehrere Leute gleichzeitig auf das Dispositionstool zugreifen sollen. LG Kai
Hallo Kai, klasse Videos die du das produzierst. Ich hänge an einem Problem fest und bin bei der Recherche auf dein Video gestoßen. Ich müsste aus einer geschlossenen Excel Datei per Funktionsaufruf aus einer Zelle einer anderen Excel Datei heraus Daten bekommen. Leider geht das nicht mit INDIREKT() weil die andere Datei geschlossen ist. Mit SVERWEIS habe ich es probiert. Das würde gehen aber der Dateiname soll dynamisch generiert werden. Und das bekomme ich mit den eingebauten Funktionen nicht hin. Deswegen wollte ich jetzt mit VBA und einem SQL Query probieren. Aber das bekomme ich auch nicht ganz hin. Was müsste ich denn an deinem Code konkret ändern um eine Zelle per Funktion auszulesen? Würde mich sehr über eine Rückmeldung freuen. Grüße, Alex
@@KaiWeissmann Hallo, stark, dass du mir direkt geantwortet hast 🙂 Das schaut tatsächlich genau nach dem aus was ich gesucht habe. Ich hoffe dass excel4macro auch mit Excel 2016 schon funktioniert und ich das morgen direkt umsetzen kann. Danke für die Antwort. Schönen Abend noch. Grüße Alex
@@KaiWeissmann Darf ich dir hierzu noch eine Frage Stellen? Ich habe den Code nun nach deiner Anleitung geschrieben. Mit der Testprodezudur funktioniert auch alles. In der MsgBox bekomme ich die richtige Ausgabe. Allerdings bekomme ich bei einem Aufruf aus einer Zelle Heraus einen #WERT! Fehler. Ich übergebe die Argumente im Moment noch als einfachen String in Anführungszeichen. Hast du vielleicht einen Tipp für mich? Vielen Dank. Beste Grüße, Alex
Sehr guter content - vielen Dank!! Ich wechsle in Kürze den Job und nehme eine Zwischenposition zwischen Vertrieb und Controlling ein. HTML-, CSS- und Javascript-Kenntnisse sind vorhanden, aber nun muss Excel/VBA und auch Powershell/Scripte dazukommen. Mich interessiert sehr, wie man die SQL-Abfrage dynamisch machen könnte, damit diese in der Datenquelle immer nach dem sucht, was auf dem Tabellenblatt "benötigt" wird. Meine Datenquelle hat 150.000 Zeilen (150 Merkmale zu 1000 Abteilungen). Zu jedem Merkmal gibt es 3 Werte (IST/SOLL/VORJAHR). In der Zieldatei möchte ich aber nur bestimmte Merkmale von bestimmten Abteilungen-wie wäre denn da der günstigste Aufbau, um die SQL-Abfrage nach Möglichkeit nur einmal ausführen zu müssen und um das recordset dann in die richtigen Tabellenzellen auszugeben?
Hey Kai, Mega Video ! Super verständlich dargestellt. Ich habe noch eine Frage: Wie schreibe ich den Code wenn ich zB nur Zeile 7-25 einfügen möchte ? Stehe da auf dem Schlauch und Google hilft mir auch nicht weiter !😅
Salü Kai Super Video und es hilft enorm viel. So schnell, mit einem Klick, alles zusammenzufassen; einfach nur Top. Ich benütze viele Sachen von dir - deine Videos - in meinem täglich business. Nun gab es bei uns ein paar Änderungen und das Hauptfile für die ADO-Verbindung ist auf einem Sharepoint. Kannst du mir helfen, wie ich die Verbindung hierzu machen kann? Danke für deine Hilfe.
Hallo Kai, Erstmal… Super Video👍🏽😊 Ich hätte noch eine Frage und hoffe du kannst mir helfen… Mit dem kopieren klappt es prima. Connection auch. Alles das was ich gesucht habe. Jetzt meine Frage: wie kann ich in einer geschlossenen Mappe z.B die Zelle „A1“ mit einem Wert befüllen? Geht das überhaupt? Wäre so dankbar für eine Hilfe, das bereitet mir Kopfzerbrechen☺️ Gruß Daniel
Danke für dieses interessante Video. Bisher kannte ich die SQL-Abfrage nur in Verbindung mit Access. Das Beispiel habe ich auf meinem Rechner versucht, nachzustellen. Allerdings erhalte ich immer den Laufzeitfehler -2147467259 (80004005) angezeigt. Keine Ahnung, was ich da falsch mache. Wenn jemand einen Tipp hat, bitte melden.
Danke, lieber Kai! Gute Variante. Das Ansprechen mittels Query finde ich super. Du machst eine tolle Arbeit. Wie immer sehr interessant. Liebe Grüße aus Österreich! Reinhard
Danke für das Lob!
Hallo Kain
super Video mit großem Lerneffekt. Gut, dass man bei dir immer wieder fündig wird.
Hallo Manfred, freut mich sehr zu hören! LG Kai
Wie immer TipiTopi - vielen Dank Kai 🙂
Immer wieder gerne!
Danke!
Hey Crhis!
DANKE!
Lg, Kai
Wieder ein super Video. Danke Kai.
Hey Robert!
Danke für dein Feedback, freut mich, dass dir meine Videos gefallen.
LG, Kai
wieder mal sehr Informativ, mal sehen wo ich das umsetzen kann. Ich greife auch oft auf anderen Tabellen zu, die bis jetzt immer geöffnet, kopiert und wieder geschlossen habe. Allerdings ist die Datenmenge (Zeilen) immer unterschiedlich und müsste ermittelt werden.
Hallo Kai, vielen Dank für das sehr gut gemachte Video, Schritt für Schritt mitgemacht und klappt alles. Das Filtern funktioniert auch, allerdings nicht beim Datum. Mein Ziel ist es, aus einer Archivdatei, die geschlossen bleibt, die Datensätze von z.B. "01.01.2020 bis 31.12.2020" auszulesen, aber ich denke das hat was mit dem Datumsformat zu tun und man muß das vorher wandeln. Da lese ich mich noch mal ein in die Filtermöglichkeiten. 😄
Wieder mal super 👍🏾
Freut mich, dass dir das Video gefällt :)
Klasse Videos machst du
Hey, danke dir :)
Danke, hat mir sehr geholfen 😊
Sehr gerne!
Es freut mich, dass dir das Video geholfen hat.
Hallo Kai, Danke für dieses Video - habe hier Problem das er die kopierten Daten als Text gespeicherte Zahl einfügt, wie kann ich da entgegenwirken ?
Hallo und Danke Kai! Du macht den Filter Where Product ='VTT'. Wie sieht denn die Formel aus, wenn ich WHERE Datum >Anfang and < Ende, damit man zwischen Daten filtern kann? Geht das überhaupt?
Danke für das tolle Video und Deine Zeit, Kai! Ich dann den RecordSet in die Tabelle kopieren, aber nicht in den Array "arr = rs.GetRows", dieser bleibt leer. Kannst Du da helfen? Vielen Dank
Super Video und einfache Erklärung, danke dafür! Gibt es eine Möglichkeit in der Select From Abfrage direkt zu definieren dass erst ab einer bestimmte Zelle bzw Zeile bis zum Ende der Quelltabelle eingelesen wird? (So dass z.B. erst ab A3 eingelesen wird)
Hallo Tim, freut mich, dass dir das Video gefällt! Du kannst in dem SQL Query mit WHERE arbeiten, um nur bestimmte Datensätze einzulesen. Du könntest z.B. nach einer fortlaufenden ID filtern und sagen, dass du nur die Datensätze einliest, deren ID größer ist als ein bestimmter Wert.
Ich wünsche dir alles Gute bei der Umsetzung!
LG Kai
Hallo Kai,
echt Klasse! Aber eine Frage: die Spaltennamen enthalten bei mir z.T. einen Punkt (das muss auch so bleiben). Die SQL-Abfrage macht daraus aber ein #. Wenn man's weiß einfach ein Replace. Gibt es aber auch noch andere "Übersetzungen"?
Sehr gut erklärt jedoch werden immer nur Konstanten (Dateinamen etc.) behandelt. Wie mache ich das u.a. mit einer .CSV Datei, deren Dateinamen als auch der SheeteName in einer Variablen abgelegt sind?
Hallo Jochen, freut mich, dass dir die Erklärung gefällt. Du kannst Strings erweitern indem du sie beendest, dann und dann mit der Variable verbindest, wie bspw.
"ANFANG DES STRINGS " & VARIABLE & " ENDE DES STRINGS"
Hoffe das hilft dir weiter. LG Kai
Hallo Kai, super Video!!! Gibt es auch eines in dem du beschreibst wie Daten per ADO in eine Datei geschrieben werden können? Oder ist das mit dieser Methode nicht möglich?
Deine Videos sind einfach genial!
Wie wäre der String für eine csv.-Datei? Oder ist dann alles grundlegend anders?
VG
Hallo Kai, erst einmal vielen Dank für die tollen Videos! Eine Frage: Ich bekomme bei mir folgende Fehlermeldung bei der Connection:
" Microsoft ODBC Treiber für Excel Aktualisierung nicht möglich : Datenbank oder Objekt ist Schreibschutz. Was muss ich hier tun? Mein Betriebssystem ist Windows 11. Excel ist 2021.Vorab besten Dank!
Hallo Kai,
warum funktioniert dies nicht wenn man im Query filtert, und hat Nicht Produkt sonden ein 2-Teiligen Namen.(z.B. Von Datum)?
Hallo Marcus, aus der Ferne immer schwer zu beurteilen. Prinzipiell sollte das funktionieren. LG Kai
Hallo Kai erstmal Danke für deine tollen Videos die du immer machst. Wie ist es eigentlich wenn die Datei von den man die Daten abruft mit Kennwort gesichert ist, können die Daten trotzdem abgerufen werden mit dieser Prozedur?
Hallo Kai, ich lerne super viel durch Deine Videos. Vielen Dank.
Eine Frage zum obrigen Video: Weißt Du, wie ich die Formatierungen und Farben, etc. aus der Quelldatei mit in die Ausgabedatei nehmen kann? Viel Grüße Peter
Hallo Kai, wie immer ein tolles Video. Ich habe dieses gerade in einem Projekt umgesetzt aber eine Frage: wie kann ich das zu importierende Arbeitsblatt über seinen Codenamen oder Index ansprechen. Ich importiere Fremddateien mit nur 1 Arbeitsblatt aber unterschiedlichen Namen.
Hallo Kai,
Ist dies auch in Excel Sheets innerhalb eines OneDrives möglich?
Hallo zusammen,
kennt jemand einen Weg, wie man die "anzuzapfende Datei" variabler machen kann? In Kai's Video wurde der Pfad zur Datei leider fix gesetzt, so dass die Datei immer gleich heißen muss, damit die Connection aufgebaut werden kann. Kennt jemand einen weg wie man dort ein Datei öffnen Fenster bekommt und sich dann die Datei aussuchen kann?
Vielen Dank!
Hallo Kai.
Vielen Dank für das Video. Es erweitert den VBA Horizont doch um einiges :-)
In dem Video wird genau das gezeigt was ich benötige. Allerding gibt es auch einen Hacken.
In meinem Quelldokument (Quellsheet) sind die ersten 3 Zeilen Überschriften. D.H. die eigentlichen Datensätze beginnen erst ab Zeile4.
Wie lässt sich das realisieren? Leider lässt sich auch auf die 3 voranstehenden Zeilen nicht verzichten.
Hallo, mit
"Tabelle1$D1:G200"
im Query kannst du angeben, welcher Bereich in der Excel-Datei genommen werden soll. Im Beispiel wird der Bereich D1:G200 genommen.
LG Kai
Hallo Kai,
ist es möglich mit dieser Methode mehr als 255 Spalten auszulesen?
Hallo Kai
leider bin ich nicht so fit in VBA Programmierung, ich habe folgendes Problen - ich möchte aus mehreren Dateien (für jedes Monat eine) Daten in eine Auswertung importieren ohne diese zu öfffnen.
Hierzu habe ich ein Programm (Modul) das auch einwandfrei funktioniert - allerdings brauch ich für jede Monatsdatei ein eingenes Modul weil sich der Namen der Datei aus der ich importiere und der Platz wohin die Daten sollen jedes Monat ändert. Deshalb habe ich das versucht über Variabe zu lösen.
Das mit dem Dateinamen funktionrt schon mal allerdings sobald ich statt der Zeile Tabelle1.Range("A14").CopyFromRecordset rs die Zeile mit der Variablen sziel.CopyFromRecordset rs aktiviere bekomme ich eine Fehlermeldung. Wenn die sziel-Zeile aber deaktiviert ist bekomme ich im Direktfenster folgendes ausgegeben Tabelle1.Range("A14").
Kann mir jemand helfen wo hier mein Fehler liegt - Vielen Dank schon mal
Sub ADOK01a()
'Variablen deklarieren
Dim Connection As New ADODB.Connection
Dim Query As String
Dim rs As New ADODB.Recordset
Dim arr As Variant
Dim spfad As String, sziel As String
spfad = Tabelle5.Range("C19").Value
sziel = Tabelle5.Range("C22").Value
'Connection herstellen
'Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=ielpfadZ;HDR=Yes';"
Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & spfad
'Query definieren und ausführen
Query = "SELECT * FROM [Auswertung Summe$]"
rs.Open Query, Connection
'Daten ins Tabellenblatt laden
Debug.Print sziel
'Tabelle1.Range("A14").CopyFromRecordset rs
sziel.CopyFromRecordset rs
rs.Close
End Sub
Hallo Kai,
vielen Dank für das tolle Tutorial. Du erklärst es sehr gut und auf eine sehr angenehme sympathische Art. Ist gelinde und Abonniert.
Ich habe das Problem, das die Dateien die ich von extern erhalte im Tablellennamen Leerzeichen und Dots . Enthalten wie „4. Tabelle mtl.“.
Hierbei hat der Query Befehl Probleme.
Wie kann man das Problem lösen?
Doppelt „“ damit die „ im String bleiben hat nicht geklappt.
Zum Hintergrund. Ich muss ca. 40 Dateien mit mehr als 30 Tabellenblätter (brauche nur ein Blatt) einlesen. Manche sind rund 100 MB groß. Möchte am Ende alles in ein Array und dann in 1 Tabelle bekommen.
Bin erst beim ersten Schritt das auslesen der 1 Datei bevor ich eine Schleife zum Einlesen erstelle.
Viele Grüße Martin
Hallo Kai, kannst du nicht mal in dem Zusammenhang ein Video über Early und Latebinding machen?
Hallo Kai. Super Videos! Habe aber noch folgende Fragen
Ist es richtig, dass auf diese Art nur auf geschlossen Exceldateien zugegriffen werden kann?
Ich möchte auf interne 'intelligente' Tabellen (.ListObjects) per SQL zugreifen können (um auch mal einfach nach SQL Server wechseln zu können)
Wie kann ich das Ende eines (.ListObjects) ausfindig machen um Daten anzuhängen?
Ich finde es toll, dass es bei Deinen Videos auch um schönes Design geht.
Hallo Markus,
freut mich, dass dir mein Video gefällt :)
Du kannst mit ADODB auch auf offene Arbeitsmappen zugreifen.
Und wie du das Ende einer intelligenten Tabelle findest und dort Einträge hinzufügst, zeige ich bspw. in diesem Video: ua-cam.com/video/CXvpMMb8vw4/v-deo.html
LG Kai
Hi, kleine Frage zu der Daten-Filterung im Query:
Ich starte das ganze aus einer UserForm und würde gerne den Filter aus einer TextBox auslesen.
WHERE Datum = Textbox1.Text funktioniert aber leider nicht.
Hast du eine Idee?
Liebe Grüße
Hi Christoph, wahrscheinlich hast du das Problem schon gelöst. Aber für alle, die die selbe Frage haben:
Query = "SELECT * FROM [Tabelle1$] WHERE Datum = '" & Textbox1.Text & '"
Du musst den Textboxbezug aus dem String herausnehmen, damit VBA danach sucht.
LG Kai
Hallo Kai. Mich würde interessieren wie man Excel Multiuserfähig machen kann.... danke
Hey S M!
Das kannst du mit einer Verknüpfung zu einer Access-Datenbank erreichen.
Lg, Kai
@@KaiWeissmann hmm danke... ist das bei deinen Tutorials mal am Plan? Könnte mir vorstellen, dass das viele nützlich finden. Lg
@@KaiWeissmann und vielen Dank für deine tollen Videos.... die Erklärungen sind wirklich sehr gut. Ich seh sie mir sehr gerne an.
Ich erstelle dazu aktuell einen Onlinekurs, der Ende des Jahres veröffentlicht werden sollte. LG Kai
Rechthertlichen Dank, ein super Video hat mir echt geholfen. Würde gerne wissen, wie kann ich den Datenabgleich aktualisieren ohne in VB die F5 taste zu betätigen
Schaue dir dazu am besten mein Video zum Thema Makro ausführen an: ua-cam.com/video/xuXSJOE9Rqg/v-deo.html
Hallo Kai. Leider sagt mein VBA, dass im Query die Tabelle nicht gefunden wird. Ich habe es mit diversen Varianten versucht. Meine Tabelle1 heißt user. Er findet weder Tabelle1$, noch Tabelle user. Habe den Tabellennamen auch in einfache '' gepackt, kein Erfolg. Die Connection steht, das ist gesichert. Ich habe O365, könnte es daran liegen?
Ich nochmal. Nach dem Download deiner Testmappe und Anpassung des DB Pfades, erhalte ich die gleiche Fehlermeldung. Objekt Tabelle1 wurde nicht gefunden. Es ist also definitiv ein Office 365 Problem. Auch kann ich mit O365 keine Acces Datenbank mehr verbinden, was unter 2016 noch funktioniert hat.
Hallo Kai
super Video bei mir funktioniert es einwandfrei, ist es möglich den Wert "Dateipfad" hier aus einer Excelzelle auszulesen so das ich ihn dynamisch verändern kann.
Das ist natürlich möglich.
Dafür den Wert der Zelle am besten in eine Variable speichern und die Variable an der entpsprechenden Stelle der Codezeile hinzufügen.
Ich hoffe das hilft dir weiter.
@@KaiWeissmann Ja das dachte ich mir so im Prinzip, nur leider bin ich in VBA nicht so bewandert wie das genau geht - kannst du mir hier ein Beispiel zeigen?
oder weißt du wo ich das nachlesen kann?
Siehe dazu mein Video zum Thema Strings: ua-cam.com/video/Tl1I9xET2s0/v-deo.html
Ist das auch möglich, zu beschränken, dass man nur aus bestimmten Dateien bestimmte Zeilen auslesen kann/darf?
Praktisch geht es darum, dass Mitarbeiter Ihre eigenen Schichten sehen können sollen. Der komplette Plan sollen in einer mit einem Passwort geschützten "Haupt-Excel" gespeichert werden. Jeder Mitarbeiter bekommt seine eigene Passwortgeschütze Excel-Datei, die damit eine entsprechende Zeile aus der Hauptdatei auslesen können. Der Mitarbeiter soll aber nicht abändern können, welche Zeile ausgelesen wird.
Geht das mit Excel?
Hallo Kai, geniales Video, vielen Dank dafür. Geht das auch andersherum? D.h. aus einem geöffneten File in ein geschloßenes schreiben?
Hallo Chris, ja, du kannst das Ganze auch andersherum machen. Dazu müsstest du den SQL-Query anpassen.
Ansonsten kannst du dir auch mal dieses Video von mir dazu anschauen: vbatrainer.de/geschlossene-arbeitsmappe/
Dort ist es vielleicht etwas leichter den Code so anzupassen, dass die Daten nicht importiert, sondern verändert werden.
LG Kai
Hey Kai, wieder ein super Video!
Ich probiere hier mit meiner eigenen Datei herum. warum fehlen mir in manchen Spalten die Alphanumerischen Werte und es sind nur Numerische vorhanden? Kann ich das unterbinden?
z.B. in A1 sollte Artikelnummer stehen, im Array steht aber "Null" und in A2 geht es mit einer Artikelnummer 1 los, bei der Artikelnummer A steht aber wieder "Null" im Array!
Warum das?🤔
Kurze Rückmeldung mit dem Provider "Microsoft.ACE.OLEDB.12.0" hab ich das Problem in den Griff bekommen!😀
Hallo Kai,
Ich mache seit einpaar Wochen nichts anderes als Videos über VBA zu schauen. Aber testo mehr ich schaue desto unübersichtlicher wird das Ganze. Es geht um ein Tabellenblatt Namens Tagebuch (Blutzucker etc.), dass ich von einem App Server runterlade. Dieses Tagebuch soll nun in 3 andere Tabellenblätter ausgelesen werden. Im Tagebuch sind Spalten von A:Y und für jedes Tagesdatum unterschiedlich viele Zeilen je nach Anzahl der Messwerte.
Da ich meine Frage detailiert schon in Foren gepostet habe, hat sich niemand meines Problems angenommen, nur die die damit Geldverdienen wollten.
Da ich nur Basis Kenntnisse in Ecxel habe, und in VBA überhaupt keine nun meine Frage:
Macht es überhaupt Sinn das selbst zu probieren?
Grüße aus Bayern Jo
Könnte man so auch in die geschlossene Datei schreiben? :)
Ja, das funktioniert
Hallo Kai
Wieder ein sehr gutes Video das du erstellt hast. Gratulation.
Habe es nachgebaut und habe aber jetzt noch eine Frage.
Habe versucht den Dateipfad mittels eines Strings einzulelsen leider ohne Erfolg.
Gibt es dafür eine Lösung?
Gruss Roger
Hallo Roger, vielen Dank für das nette Feedback.
Ersetze mal
Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=C:\Users\kaiwe\Desktop\February.xlsx;HDR=Yes';"
durch
Dim sPfad As String
sPfad = "C:\Users\kaiwe\Desktop\February.xlsx"
Connection.Open "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & spfad & ";HDR=Yes';"
Damit sollte es funktionieren :) sPfad sollte natürlich der Pfad auf deinem Rechner dann sein.
Schreib mir gerne, ob bei dir alles funktioniert hat. Ansonsten würde es mich auch brennend interessieren, was dein individueller Anwendungsfalls dazu in der Praxis ist :)
LG Kai
@@KaiWeissmann Hallo Kai
Es hat funktioniert Danke für die Hilfe.
Ich verwende die Funktion um Debitorenausstände von einem Dokument in ein Masterdokument zu kopieren. Der Pfad besteht aus einem Jahresverzeichnis und dem Dokumentnamen.
Gruss Roger
Super, dass alles geklappt hat und vielen Dank für dein Feedback! LG Kai
Hey Kai,
erst einmal - super Video!
Ich habe eine Frage an Dich: Ist es über VBA auch irgendwie möglich, eine Tabelle, welche man vorher aus einer geschlossenen Arbeitsmappe kopiert und in die Zielarbeitsmappe eingefügt hat, anschließend über den VBA Code zu bearbeiten/formatieren?
Sprich, ich habe über eine Form, welche mit dem Makro hinterlegt ist, die gewünschte Tabelle eingefügt und möchte diese nun auch hinsichtlich Überschriftenfüllung, Spaltenbreite und einfügen eines Datenfilters für jede Spalte über einen Knopfdruck bearbeiten.
Kann ich das per Coding machen oder geht es eben doch nur mit einer Makroaufnahme?
Grüße
Hey Groppi, freut mich, dass dir das Video gefällt.
Prinzipiell kannst du alles im Code machen, was du auch mit der Makroaufnahme machst. D.h. konkret kannst du die Tabelle auch genau so formatieren, wie du das möchtest.
LG Kai
Hallo Kai,
vielen Dank für dieses Video! Nach deinem Schema funktioniert alle bestens. Kannst du mir vielleicht verraten, wie ich eine Passwortgeschützte Mappe über die Connection öffne?
Liebe Grüße
Katha :)
Hallo Kai
Erstmal Danke für deine geniale Videos immer! Ich konnte schon einiges bei mir im Unternehmen übertragen und es macht die Arbeit echt leichter.
Eine Frage: ich bekomme immer noch einen Laufzeitfehler und zwar beim Schritt rs.Open Query, Connection . Gemäss Lockalfenster ist der Wert "Nothing". Zu Beginn hatte ich das gleiche Problem wie Roger Voisard, das konnte ich mit deiner Lösung beheben.
Hast du mir dazu auch eine Lösung?
Grüsse
Mal wieder ein sehr schönes Video :)
Aber eine Frage habe ich zu dem Thema, in deinem Video setzt er die Daten automatisch in die nächste freie Zeile...ich arbeite gerade an einem simplen Dispositionstool wo aktuell über VBA das Tool seine Daten aus einer seperaten "Jahresplanungs" Datei rauszieht.
Bei mir sieht ganz ganze so aus "Jahresplanung öffnen > Datein kopieren > Wechsel zu Tool > Einfügen.
Würde das auch mit dem Query gehen? Also das ich ihm keine Spalte vorgebe sondern einen Bereich der relativ groß ist aus einer geschlossenen Datei rüber kopieren kann?
P.s das Tool basiert nur auf deine Videos und ich hatte vorher 0 mit VBA zu tun :D Das sollte für deine Qualität als erklär Bär sprechen :)
Hallo Maik, vielen Dank für dein Feedback. Es freut mich sehr, dass dir die Videos weiterhelfen. Teil sie auch gerne mit jedem, den das Thema VBA interessieren könnte :)
Zu deiner Frage: Ja, das geht auch und wäre im Prinzip der ideale Fall, um ADO auszuprobieren. Ein Umstieg auf eine Datenbank ist später dann wesentlich leichter, wenn beispielsweise mehrere Leute gleichzeitig auf das Dispositionstool zugreifen sollen.
LG Kai
Hallo Kai,
klasse Videos die du das produzierst.
Ich hänge an einem Problem fest und bin bei der Recherche auf dein Video gestoßen. Ich müsste aus einer geschlossenen Excel Datei per Funktionsaufruf aus einer Zelle einer anderen Excel Datei heraus Daten bekommen. Leider geht das nicht mit INDIREKT() weil die andere Datei geschlossen ist. Mit SVERWEIS habe ich es probiert. Das würde gehen aber der Dateiname soll dynamisch generiert werden. Und das bekomme ich mit den eingebauten Funktionen nicht hin.
Deswegen wollte ich jetzt mit VBA und einem SQL Query probieren. Aber das bekomme ich auch nicht ganz hin. Was müsste ich denn an deinem Code konkret ändern um eine Zelle per Funktion auszulesen?
Würde mich sehr über eine Rückmeldung freuen.
Grüße,
Alex
Hey Alex,
genau diese Function zeige ich in meinem aktuellen Video: ua-cam.com/video/xbqZozBWQEg/v-deo.html
Hoffe das hilft dir.
Lg, Kai
@@KaiWeissmann Hallo,
stark, dass du mir direkt geantwortet hast 🙂
Das schaut tatsächlich genau nach dem aus was ich gesucht habe. Ich hoffe dass excel4macro auch mit Excel 2016 schon funktioniert und ich das morgen direkt umsetzen kann.
Danke für die Antwort.
Schönen Abend noch.
Grüße Alex
@@KaiWeissmann Darf ich dir hierzu noch eine Frage Stellen?
Ich habe den Code nun nach deiner Anleitung geschrieben. Mit der Testprodezudur funktioniert auch alles. In der MsgBox bekomme ich die richtige Ausgabe.
Allerdings bekomme ich bei einem Aufruf aus einer Zelle Heraus einen #WERT! Fehler.
Ich übergebe die Argumente im Moment noch als einfachen String in Anführungszeichen.
Hast du vielleicht einen Tipp für mich?
Vielen Dank.
Beste Grüße,
Alex
Sehr guter content - vielen Dank!!
Ich wechsle in Kürze den Job und nehme eine Zwischenposition zwischen Vertrieb und Controlling ein. HTML-, CSS- und Javascript-Kenntnisse sind vorhanden, aber nun muss Excel/VBA und auch Powershell/Scripte dazukommen.
Mich interessiert sehr, wie man die SQL-Abfrage dynamisch machen könnte, damit diese in der Datenquelle immer nach dem sucht, was auf dem Tabellenblatt "benötigt" wird. Meine Datenquelle hat 150.000 Zeilen (150 Merkmale zu 1000 Abteilungen). Zu jedem Merkmal gibt es 3 Werte (IST/SOLL/VORJAHR). In der Zieldatei möchte ich aber nur bestimmte Merkmale von bestimmten Abteilungen-wie wäre denn da der günstigste Aufbau, um die SQL-Abfrage nach Möglichkeit nur einmal ausführen zu müssen und um das recordset dann in die richtigen Tabellenzellen auszugeben?
vom Prinzip her, macht doch PowerQuery genau das gleiche. Welche Vorteile gibt es dann, dennoch diese Aufgabe mit VBA zu lösen?
Hier findest du eine Gegenüberstellung von VBA und PowerQuery: ua-cam.com/video/hsBKyM4HMyA/v-deo.html&ab_channel=ExcelMacroMastery
Hey Kai,
Mega Video ! Super verständlich dargestellt. Ich habe noch eine Frage:
Wie schreibe ich den Code wenn ich zB nur Zeile 7-25 einfügen möchte ? Stehe da auf dem Schlauch und Google hilft mir auch nicht weiter !😅
Das würde mich jetzt mit Daten aus einer Oracle-Datenbank interessieren.
Hey Mike!
Danke für den Videovorschlag.
Ich nehme das gerne in die Ideensammlung mit auf.
Lg, Kai
Salü Kai
Super Video und es hilft enorm viel. So schnell, mit einem Klick, alles zusammenzufassen; einfach nur Top. Ich benütze viele Sachen von dir - deine Videos - in meinem täglich business. Nun gab es bei uns ein paar Änderungen und das Hauptfile für die ADO-Verbindung ist auf einem Sharepoint. Kannst du mir helfen, wie ich die Verbindung hierzu machen kann? Danke für deine Hilfe.
Hallo Kai,
Erstmal… Super Video👍🏽😊
Ich hätte noch eine Frage und hoffe du kannst mir helfen…
Mit dem kopieren klappt es prima. Connection auch. Alles das was ich gesucht habe.
Jetzt meine Frage: wie kann ich in einer geschlossenen Mappe z.B die Zelle „A1“ mit einem Wert befüllen?
Geht das überhaupt?
Wäre so dankbar für eine Hilfe, das bereitet mir Kopfzerbrechen☺️
Gruß Daniel
Danke für dieses interessante Video. Bisher kannte ich die SQL-Abfrage nur in Verbindung mit Access. Das Beispiel habe ich auf meinem Rechner versucht, nachzustellen. Allerdings erhalte ich immer den Laufzeitfehler -2147467259 (80004005) angezeigt. Keine Ahnung, was ich da falsch mache. Wenn jemand einen Tipp hat, bitte melden.