Hallo Kai, du kannst dir auch den gesamten Dateipfad holen, indem du mit der rechten Maustaste + Shift auf die Datei klickst, dort hast du dann nämlich zusätzlich die Auswahl "als Pfad kopieren" 👍🏻
Das ist schon ziemlich geil. Was jetzt noch fehlt ist eine Prüfung, ob diese andere Mappe bereits von einem Anderen Nutzer geöffnet wurde, falls man in DIESE die Daten reinkopieren will.
Hallo Kai, danke für das Video. Erst einmal gut erklärt. Ich möchten den Datenaustausch aber in die andere Richtung vornehmen. Das funktioniert auch. Leider habe ich das Problem, das trotz der Funktion „Application.DisplayAlerts = False“ einmal eine Meldung kommt : Download Datei… und eine Meldung für das Speichern der Datei. Vielleicht kannst du mir sagen woran das liegen könnte. Danke Jack 11:46
Tolles video Top erklärt. Eine Sache habe ich, wie kann ich im unter Datein kopieren und einfügen den Tabellenblattnamen wie z.B Sommerplan davor setzen,.
Hallo Kai, tolles und verständliches Video! Auch für Anfänger super erklärt. Wie kann man nun noch den Befehl geben, auch Daten aus einer dritten Datei zu kopieren? Liebe Grüße Katja
Freut mich, dass dir das Video gefällt! Am besten filtern und dann übertragen. Habe hier ein Video zum filtern: ua-cam.com/video/qq0B5IreC78/v-deo.html LG Kai
Hallo Kai, vielen Dank für das tolle Video und die guten und einfachen Erklärungen. Habe das gleich nachgebaut und hat auch funktioniert. Nur das mit der Array hat bei mir nicht hingehauen. Wie würde das Marko aussehen, wenn ich aus meinem aktiven Workbook in das geschlossene kopieren möchte? Und dabei soll dann bitte die erste freie Zeile angesteuert werden ? Gruß Andraes
Hallo Kai, danke für das Video. Erst einmal gut erklärt. Ich möchten den Datenaustausch aber in die andere Richtung vornehmen. Das funktioniert auch. Leider habe ich das Problem, das trotz der Funktion „Application.DisplayAlerts = False“ einmal eine Meldung kommt : Download Datei… und eine Meldung für das Speichern der Datei. Vielleicht kannst du mir sagen woran das liegen könnte. Danke Jack
Hallo Kai, Erstmal danke für das Klasse Video. 2 Fragen hätte ich bitte ergänzend dazu. 1. Mir zeigt es einen fehlenden Bezug an wenn ich nur das „Ergebnis“ aus einer anderen Datei exportiere. - wie kann man da ändern? 2. kann man den Dateipfad variabel gestalten - das ich den Pfad im aktuellen Datenblatt eingeben kann und dann anschließend es aus der ExcelDatei die Daten importiert werden. Danke
Hallo Kai, es wäre toll wenn du zeigen könntest wie man eine Abfrage erstellt für die jeweiligen Kopierbereiche in der Quelldatei und die Zelle für die Ziel-Datei ebenfalls variabel ist und abgefragt wird. Bspw: MsgBox1 : gib Zelle1 für den Kopierzell-Bereich ein : zB A3 MsgBox2: gib Zelle2 für den Kopierzell-Bereich ein : zB X300 MsgBox3: In welchen Bereich der Zieldatei sollen die Daten eingefügt werden? zB B2 nun können wir die Zieldatei auswählen und der zuvor abgefragte Bereich wird in die angegebene Zelle '(MsgBox3) kopiert. Ich verzweifel daran die in der MsgBox eingegebenen Daten für den Rangebereich zu verwenden der sonst "fix im Makro anzugeben ist" PS: sehr hilfreiche Videos - total ruhige Art und verständlich erklärt *thumbs up Freundliche Grüße Ole
Hallo Kai, tolles Video das mir bei einem meiner aktuellen Projekte stark hilft! 😃 Nur eine Frage: Ist es möglich auch nach Excel-Dateien in einem bestimmten Ordner inkl. Unterordner nach wiederrum einem bestimmtem Teil des Dateinamens zu durchsuchen und Daten daraus zu kopieren? Sprich es könnte eine beliebige Anzahl an Excel Dateien sein, aus der ich Daten kopiere. Würde mich sehr über eine Antwort freuen, danke im Voraus! :)
Hallo, freut mich, dass dir das Video gefällt :) Das kannst du machen. In diesem Video zeige ich bspw., wie du Dateien aus Ordner auslesen kannst: studio.ua-cam.com/users/video32Or43BQvSQ/edit Damit kannst du auch nach bestimmten Dateiendungen oder Dateien mit einem bestimmten Namen suchen. Alles Gute für die Umsetzung und schreib mir gerne nochmal, wie du es im Detail umgesetzt hast. LG Kai
Hallo Kai, super Video. Ich scheiter gerade daran die Einfügeposition auf die aktive Zelle zu setzen. Dummerweise hängt an den einzufügenden Zellen ein Diagramm, das mit kopiert werden soll. Hast du einen Tip?
Hallo Kai, tolles video :) Ich habe diesen Code verwendet, aber nun würde ich gerne erreichen, dass nur die Werte (ohne Bezug/Formel/Format) übernommen werden. Kannst Du ihr mir bitte sagen, wie ich den Code ändern oder ergänzen müsste? Im Voraus vielen Dank
Hallo Kai, danke für dein Video. Ich mache eben die Erfahrung, dass sich die QUelldatei trotz Application.ScreenUpdating = False öffnet. Woran könnte das liegen? Danke!
Hallo Kai, ich habe versucht den Kopieren und einfügen Pfad einfach umzustellen, so das ich aus dem This Workbook in wbQuelle kopieren sollte. das haut aber leider so einfach nicht hin? Gruß Andreas
Hi, super Video. Vielen Dank dafür!. Bin mir das gerade auch am basten für mein Projekt. Allerdings hätte ich eine Frage. Wie müsste ich denn den Code ändern, dass er die "neue" Daten unterhalb der vorhanden Liste einfügt, statt überschreibt? Gruß
Hi Tim, vielen Dank für deein Feedback :) Die neuen Daten kannst du unterhalb einfügen, indem du statt ThisWorkbook.Worksheets(1).Range("A8") schreibst Dim LetzteZeile As Long LetzteZeile = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row ThisWorkbook.Worksheets(1).Range("A" & LetzteZeile + 1) Der Code sucht nach der letzten befüllten Zeile in der ersten Spalte und fügt die Daten darunter ein. Ich erkläre das auch in diesem Video: www.vbatrainer.de/datei-oeffnen/ Ich hoffe das hilft dir weiter. Ansonsten einfach nochmal nachfragen :) LG Kai
Leider habe ich noch ein kleines Problem. Bei mir übernimmt er das leider nicht, das er unter den vorhandenen Daten schreibt.. Ich brauche auch nur Werte aus der Spalte I. Die er in ein anderen Excel-Blatt kopieren soll. Allerdings überschreibt er immer die vorhandenen Werte. Ebenfalls weiß ich auch nicht, wie ich nur die Spalte I anwählen kann. Mein Code: Option Explicit Sub Datei_auswaehlen() Dim Dateiname As Variant Dim wbQuelle As Workbook Dim LetzteZeile As Long 'Screenupdating und PopUps deaktivieren Application.ScreenUpdating = False Application.DisplayAlerts = False 'Benutzer Datei auswählen lassen Dateiname = Application.GetOpenFilename(FileFilter:="Excel-Dateien (*.xls*),*xls*") 'Wurde eine Datei ausgewählt? If Dateiname False Then LetzteZeile = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
'Arbeitsmappe öffnen Set wbQuelle = Workbooks.Open(Filename:=Dateiname)
'Daten kopieren und einfügen wbQuelle.Worksheets(1).Range("I2:I10").Copy ThisWorkbook.Worksheets(1).Range("B" & LetzteZeile + 1).PasteSpecial
'Arbeitsmappe schließen
wbQuelle.Close Savechanges:=False
End If 'Screenupdating und PopUps aktivieren Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
Danke Kai, Ich habe mal versucht beim Dateipfad das aktuelle Verzeichnis zu nehmen, wo die Arbeitsmappe liegt. (Ich dachte das ging früher mal ohne Probleme mit irgendwie "/Datei" (Für automatischen CSV Import) Da die Excel Mappe von verschiedenen Arbeitern auf verschiedenen PC's verwendet wurde mit verschiedenen Pfaden. Ich habe es nicht hinbekommen. Kannst du mir einen Tipp geben, wie ich Excel zwinge, einfach im aktuellen Verzeichnis zu schauen (Dessen Namen ich nicht kenne)? Grüsse
@@KaiWeissmann Danke, ja aber in diesem Fall habe ich kein VB in der Excel benutzt. Nur Views auf die CSV's die durch einem Macro (Button) ausgelöst werden. In den Links (Verbindungen) steht immer der ganze Pfad drinnen. Irgend einen Trick muss es doch geben das Excel einfach im aktuellen Verzeichnis schaut. (Ich habe im Netzt gesucht aber keine Lösung für diesen Fall gefunden)
Hallo Kai, super Video. Hab es genauso nachgebaut. Allerdings habe ich,wie gewünscht jetzt zwei fast gleiche Dateien in zwei arbeitsmappen. Ich würde die tabellen gern auf die gleichen Inhalte überprüfen, da die ursprungsdatei aktualisiert wird. Wenn datensätze nur einzeln vorhanden sind sollen diese aus der empfängertabelle gelöscht werden.hast du hierzu eine idee?
Hallo Ronny, danke für dein Feedback. Wenn ich dich richtig verstehe, dann möchtest du zwei Tabellen vergleichen, indem du den Wert einer Spalte vergleichst. Wenn ein Wert in Tabelle1 vorkommt, aber nicht in Tabelle2, dann möchtest du die Zeile in Tabelle1 löschen. Verstehe ich dich so richtig? LG Kai
@@KaiWeissmann Hallo kai.Danke für deine schnelle antwort. Bei mir wird tabelle1 mit hilfe deines codes bei jedem öffnen neu hereinkopiert, weil diese in der ursprungsdatei ständig aktualisiert wird. Tabelle2 hat in dem fall zum teil alte datensätze (nicht mehr in tabelle1 vorhanden,dann ganze zeile löschen) und tabelle 1 liefert aber auch neue datensätze die in tabelle 2 noch nicht vorhanden sind. Es sind personaldatensätze (Beschäftigte werden entlassen bzw. Neu eingestellt)
Hallo Kai, vielen Dank für das Video. Auch als Rookie konnte ich deinen Ausführungen folgen. Das VBA funktioniert grundlegend. Ich habe einen Punkt der mich verzweifeln lässt und einen der ganz schön wäre, wenn dieser ausgeräumt wäre. 1. Das VBA kopiert mir nicht die errechneten Werte, sondern die zugrundeliegenden Formeln. Wie kann ich das VBA so ändern, dass stattdessen die Ergebnisse kopiert werden? 2. Die Quelldatei ist mit weiteren Dateien verknüpft. Wenn ich das VBA starte, öffnet sich die Quelldatei und ich muss manuell bestätigen ob diese aktualisiert werden soll. Nice to have wäre, wenn diese Abfrage automatisch beantwortet oder unterdrückt werden könnte. Besten Gruß Necat
Hallo Necat, ich bin jetzt aus dem Urlaub zurück und kann dir etwas ausführlicher antworten: 1. Um nur Werte (und nicht Formeln) zu kopieren, können wir .PasteSpecial nutzen. Für den Code im Video sieht das konkret so aus: Statt wbQuelle.Worksheets(1).Range("A2:E7").Copy ThisWorkbook.Worksheets(1).Range("A8") haben wir wbQuelle.Worksheets(1).Range("A2:E7").Copy ThisWorkbook.Worksheets(1).Range("A8").PasteSpecial Paste:=xlPasteValues 2. Die Abfrage für Verknüpfungen können wir mit Application.AskToUpdateLinks = False unterdrücken. Einfach dorthin schreiben, wo wir auch das ScreenUpdating und die DisplayAlerts unterdrücken. Und am Ende schalten wir die Abfrage wieder an mit Application.AskToUpdateLinks = True Ich hoffe das hilft dir (und auch anderen, mit denselben Fragen) weiter :)
Hallo, so wie alle finde ich deine Videos super. Du hast mir schon einige Male sehr weitergeholfen. Ich wollte den Quellpfad dynamisch gestalten. also mit datum und jahr im titel, der sich am tagesdatum orientiert. mein schwacher versuch: sPfad = "X:\XXX\XXXX\" & Format(Now, "yymmdd") & "_xxxx_" & Year(Date) & ".xlsx" kannst du mir vielleicht beim lösungsansatz helfen? danke dir
Hallo Ronald, freut mich sehr, dass dir die Videos gefallen! Dein Versuch sieht auf den ersten Blick gut aus. Wenn ich das im Direktfenster eingebe, dann bekomme ich das hier zurück: X:\XXX\XXXX\240126_xxxx_2024.xlsx Welcher Fehler tritt bei dir auf? LG Kai
@@KaiWeissmann hi kai, erstmal danke für deine antwort. ja bei mir hat es auch so ausgesehen, das problem ist, es wird keine datei geöffnet. wenn ich anstatt dessen das datum manuell eingebe, dann funktioniert alles tadellos. es wirkt so als gäbe es die datei nicht, was ja definitiv schon so ist. wenn ich das screenupdating und die und popups wieder aktiviere kommt auch keine unterdrückte meldung oder dergleichen.
Du könntest im Direktfenster mal die Strings vergleichen, die entstehen, wenn du es mit der Format/Year Funktion erstellst und wenn du es statisch eingibst. VBA müsste beim Vergleich mit "=" ein False zurückgeben. Dann könntest du von dort aus den Fehler eingrenzen und beheben. LG Kai
hallo nochmal, danke für den pragmatischen tipp, hätte auch selber darauf kommen können. mittlerweile funktioniert alles wunderbar. nochmals vielen dank für deine hilfe und deinen support. du hast uns mit deinem makro ein paar äußerst lästige copy paste arbeiten erspart - unser team huldigt dich! :-)
Ich hab das jetzt nicht verstanden, die Datei wird doch geöffnet auch wenn man das nicht sieht oder irre ich da. So habe ich das gemacht, die Datei in der die Daten sind ist unangetastet man kann sie so separat öffnen und drin rumspielen: Connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "data source=" & DBPath & DBFile & " ;Extended Properties =""Excel 12.0;HDR=YES;"";" DBConnection.Open Connectionstring Querry = "SELECT * FROM [" & DBTableNames & "$] WHERE Customer LIKE " & "'" & LookFor & "%' AND Index LIKE 'RF%' AND Repro = 1" DBS.Open Querry, DBConnection, adOpenStatic, _ adLockReadOnly, adCmdText Ws.Range("A2").CurrentRegion.ClearContents For I = 0 To DBS.Fields.Count - 1 Ws.Cells(1, I + 1).Value2 = DBS.Fields(I).Name Next I Ws.Range("A2").CopyFromRecordset DBS DBS.Close
Hallo Rainer, du hast völlig recht. Zur Lösung über Queries habe ich hier auch schonmal ein Video gemacht: ua-cam.com/video/5rBOPvFwFuo/v-deo.html&ab_channel=KaiWeissmann LG Kai
@@KaiWeissmann Danke , sorry ich wollte nicht vorlaut sein.... Bin nur Laie, ein echter Laie... Gibt es denn auch ein Video über C# und Excel ? also ohne VBA ?
Hallo Kai, erstmal danke für deine super Videos! Leider werde ich trotzdem nicht mit VBA warm. Ich habe deinen Code - fast - eins zu eins umgesetzt bekomme jedoch eine Fehlermeldung mit "Anwendungs- und objekdefinierter Fehler". Hier der Code, vielleicht siehst du ja auf den ersten Blick, was ich falsch mache. Sub Test() Dim sPfad_Quelle As String Dim wbQuelle As Workbook Dim x As Long x = Range("B8").Value Application.ScreenUpdating = False Application.DisplayAlerts = False sPfad_Quelle = "Hier würde meine Quelle stehen"
If Dir(sPfad_Quelle) "" Then Set wbQuelle = Workbooks.Open(sPfad_Quelle) wbQuelle.Worksheets(1).Range(Cells(10, x), Cells(29, x)).Copy ThisWorkbook.Worksheets(1).Range("F5") wbQuelle.Close SaveChanges:=False End If Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub Beste Grüße Bombi
wo liegt für dich der unterschied ob die mappe kurz geöffnet und wieder geschlossen wird? Wieso brauchst du das dass das zu bleibt? Spielt das ne Rolle? Hast du ein Beispiel?
Hallo Kai, danke für das Video. Erst einmal gut erklärt. Ich möchten den Datenaustausch aber in die andere Richtung vornehmen. Das funktioniert auch. Leider habe ich das Problem, das trotz der Funktion „Application.DisplayAlerts = False“ einmal eine Meldung kommt : Download Datei… und eine Meldung für das Speichern der Datei. Vielleicht kannst du mir sagen woran das liegen könnte. Danke Jack
Servus! Danke, für das Video. Wieder mal eine wichtige Hilfe für die tägliche Arbeit mit Excel.
Sehr gerne.
Super erklärt für mich der erste Beitrag um VBA zu verstehen. Würde mich auch für Access interessieren.
Sehr gerne!
Es freut mich, dass dir das Video gefällt.
Hi Kai,
Super Video, mal wieder.
Ist gerade eben im echten “Business” Leben hilfreich gewesen.
Hi Dario,
vielen Dank für dein Feedback. Freut mich, dass es dir geholfen hat!
Tolles Video! Sehr anschaulich! LG aus Koblenz Christoph 👋 👋 👋 👋 👋
Hallo Christoph, vielen Dank für dein Feedback :)
@@KaiWeissmann Sehr gerne ... 🙂🙃😉
Hallo Kai,
du kannst dir auch den gesamten Dateipfad holen, indem du mit der rechten Maustaste + Shift auf die Datei klickst, dort hast du dann nämlich zusätzlich die Auswahl "als Pfad kopieren" 👍🏻
Hallo, danke für deinen Hinweis. Ist in den neueren Videos mittlerweile eingepflegt :) LG Kai
Das ist schon ziemlich geil. Was jetzt noch fehlt ist eine Prüfung, ob diese andere Mappe bereits von einem Anderen Nutzer geöffnet wurde, falls man in DIESE die Daten reinkopieren will.
Hallo Kai, danke für das Video.
Erst einmal gut erklärt.
Ich möchten den Datenaustausch aber in die andere Richtung vornehmen. Das funktioniert auch. Leider habe ich das Problem, das trotz der Funktion „Application.DisplayAlerts = False“ einmal eine Meldung kommt : Download Datei… und eine Meldung für das Speichern der Datei. Vielleicht kannst du mir sagen woran das liegen könnte.
Danke Jack
11:46
Tolles video Top erklärt. Eine Sache habe ich, wie kann ich im unter Datein kopieren und einfügen den Tabellenblattnamen wie z.B Sommerplan davor setzen,.
Hallo Kai, tolles und verständliches Video! Auch für Anfänger super erklärt. Wie kann man nun noch den Befehl geben, auch Daten aus einer dritten Datei zu kopieren? Liebe Grüße Katja
DANKE
Sehr gerne!
Es freut mich, dass dir das Video gefällt.
Super Video! Wie ziehe ich bestimmte Daten aus einer anderen Datei anhand von 2 Kriterien?
Freut mich, dass dir das Video gefällt! Am besten filtern und dann übertragen. Habe hier ein Video zum filtern:
ua-cam.com/video/qq0B5IreC78/v-deo.html
LG Kai
Super Video, vielen Dank fürs Teilen. Wie ist es aber wenn die Quelldatei nicht immer den selben Namen hat?
Hallo Kai, vielen Dank für das tolle Video und die guten und einfachen Erklärungen. Habe das gleich nachgebaut und hat auch funktioniert. Nur das mit der Array hat bei mir nicht hingehauen. Wie würde das Marko aussehen, wenn ich aus meinem aktiven Workbook in das geschlossene kopieren möchte? Und dabei soll dann bitte die erste freie Zeile angesteuert werden ? Gruß Andraes
Hallo Kai, danke für das Video.
Erst einmal gut erklärt.
Ich möchten den Datenaustausch aber in die andere Richtung vornehmen. Das funktioniert auch. Leider habe ich das Problem, das trotz der Funktion „Application.DisplayAlerts = False“ einmal eine Meldung kommt : Download Datei… und eine Meldung für das Speichern der Datei. Vielleicht kannst du mir sagen woran das liegen könnte.
Danke Jack
Hallo Kai,
Erstmal danke für das Klasse Video. 2 Fragen hätte ich bitte ergänzend dazu.
1. Mir zeigt es einen fehlenden Bezug an wenn ich nur das „Ergebnis“ aus einer anderen Datei exportiere. - wie kann man da ändern?
2. kann man den Dateipfad variabel gestalten - das ich den Pfad im aktuellen Datenblatt eingeben kann und dann anschließend es aus der ExcelDatei die Daten importiert werden.
Danke
Hallo Kai,
es wäre toll wenn du zeigen könntest wie man eine Abfrage erstellt für die jeweiligen Kopierbereiche in der Quelldatei und die Zelle für die Ziel-Datei ebenfalls variabel ist und abgefragt wird.
Bspw:
MsgBox1 : gib Zelle1 für den Kopierzell-Bereich ein : zB A3
MsgBox2: gib Zelle2 für den Kopierzell-Bereich ein : zB X300
MsgBox3: In welchen Bereich der Zieldatei sollen die Daten eingefügt werden?
zB B2
nun können wir die Zieldatei auswählen und der zuvor abgefragte Bereich wird in die angegebene Zelle '(MsgBox3) kopiert.
Ich verzweifel daran die in der MsgBox eingegebenen Daten für den Rangebereich zu verwenden der sonst "fix im Makro anzugeben ist"
PS: sehr hilfreiche Videos - total ruhige Art und verständlich erklärt *thumbs up
Freundliche Grüße
Ole
Hallo Kai, wie kann ich über ftp Daten aus der geschlossenen Arbeitsmappe kopieren? oder per webseite/server
Hallo Kai, tolles Video das mir bei einem meiner aktuellen Projekte stark hilft! 😃 Nur eine Frage: Ist es möglich auch nach Excel-Dateien in einem bestimmten Ordner inkl. Unterordner nach wiederrum einem bestimmtem Teil des Dateinamens zu durchsuchen und Daten daraus zu kopieren? Sprich es könnte eine beliebige Anzahl an Excel Dateien sein, aus der ich Daten kopiere. Würde mich sehr über eine Antwort freuen, danke im Voraus! :)
Hallo, freut mich, dass dir das Video gefällt :)
Das kannst du machen.
In diesem Video zeige ich bspw., wie du Dateien aus Ordner auslesen kannst: studio.ua-cam.com/users/video32Or43BQvSQ/edit
Damit kannst du auch nach bestimmten Dateiendungen oder Dateien mit einem bestimmten Namen suchen.
Alles Gute für die Umsetzung und schreib mir gerne nochmal, wie du es im Detail umgesetzt hast.
LG Kai
Hallo Kai,
super Video.
Ich scheiter gerade daran die Einfügeposition auf die aktive Zelle zu setzen. Dummerweise hängt an den einzufügenden Zellen ein Diagramm, das mit kopiert werden soll. Hast du einen Tip?
Hallo Kai.
danke für das super Video. Bei "wbQuelle.Worksheets(1). bekomme ich die Fehlermeldung . Was tun? Danke für deine Hilfe. Viele Grüße Maren
Funktioniert das auch, wenn diese 2 Dateien im Sharepoint liegen (also online und nicht lokal) ???
Hallo Kai, tolles video :) Ich habe diesen Code verwendet, aber nun würde ich gerne erreichen, dass nur die Werte (ohne Bezug/Formel/Format) übernommen werden.
Kannst Du ihr mir bitte sagen, wie ich den Code ändern oder ergänzen müsste? Im Voraus vielen Dank
Hallo Kai, danke für dein Video. Ich mache eben die Erfahrung, dass sich die QUelldatei trotz Application.ScreenUpdating = False öffnet. Woran könnte das liegen? Danke!
Hallo Kai,
ich habe versucht den Kopieren und einfügen Pfad einfach umzustellen, so das ich aus dem This Workbook in wbQuelle kopieren sollte. das haut aber leider so einfach nicht hin?
Gruß Andreas
Kann man das auch mit eine Eingabeformular von einer anderen Arbeitmappe kombiren
Ja, das kannst du machen
Wie würde der Code lauten wenn Pfad und Dateiname immer unterschiedlich wären?
Servus. Kannst du mir vielleicht mitteilen, wie ich mit Excel VBA die Anzahl der Dateien in einem Ordner ermitteln kann? Danke🙏
Schaue dir dazu gerne mein Video zum Thema Dateien Auflisten an: ua-cam.com/video/ioUO7OI2PAc/v-deo.html
Hi, super Video. Vielen Dank dafür!. Bin mir das gerade auch am basten für mein Projekt. Allerdings hätte ich eine Frage. Wie müsste ich denn den Code ändern, dass er die "neue" Daten unterhalb der vorhanden Liste einfügt, statt überschreibt? Gruß
Hi Tim, vielen Dank für deein Feedback :)
Die neuen Daten kannst du unterhalb einfügen, indem du statt
ThisWorkbook.Worksheets(1).Range("A8")
schreibst
Dim LetzteZeile As Long
LetzteZeile = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
ThisWorkbook.Worksheets(1).Range("A" & LetzteZeile + 1)
Der Code sucht nach der letzten befüllten Zeile in der ersten Spalte und fügt die Daten darunter ein. Ich erkläre das auch in diesem Video: www.vbatrainer.de/datei-oeffnen/
Ich hoffe das hilft dir weiter. Ansonsten einfach nochmal nachfragen :)
LG Kai
@@KaiWeissmann Hi Kai, vielen Dank für deine schnelle Antwort.
Leider habe ich noch ein kleines Problem. Bei mir übernimmt er das leider nicht, das er unter den vorhandenen Daten schreibt.. Ich brauche auch nur Werte aus der Spalte I. Die er in ein anderen Excel-Blatt kopieren soll. Allerdings überschreibt er immer die vorhandenen Werte. Ebenfalls weiß ich auch nicht, wie ich nur die Spalte I anwählen kann. Mein Code: Option Explicit
Sub Datei_auswaehlen()
Dim Dateiname As Variant
Dim wbQuelle As Workbook
Dim LetzteZeile As Long
'Screenupdating und PopUps deaktivieren
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Benutzer Datei auswählen lassen
Dateiname = Application.GetOpenFilename(FileFilter:="Excel-Dateien (*.xls*),*xls*")
'Wurde eine Datei ausgewählt?
If Dateiname False Then
LetzteZeile = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
'Arbeitsmappe öffnen
Set wbQuelle = Workbooks.Open(Filename:=Dateiname)
'Daten kopieren und einfügen
wbQuelle.Worksheets(1).Range("I2:I10").Copy
ThisWorkbook.Worksheets(1).Range("B" & LetzteZeile + 1).PasteSpecial
'Arbeitsmappe schließen
wbQuelle.Close Savechanges:=False
End If
'Screenupdating und PopUps aktivieren
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Versuche mal statt
LetzteZeile = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
LetzteZeile = ThisWorkbook.Worksheets(1).Cells(Rows.Count, 9).End(xlUp).Row
und statt
ThisWorkbook.Worksheets(1).Range("B" & LetzteZeile + 1).PasteSpecial
ThisWorkbook.Worksheets(1).Range("I" & LetzteZeile + 1).PasteSpecial
damit müsste es klappen
Danke Kai,
Ich habe mal versucht beim Dateipfad das aktuelle Verzeichnis zu nehmen, wo die Arbeitsmappe liegt. (Ich dachte das ging früher mal ohne Probleme mit irgendwie "/Datei" (Für automatischen CSV Import)
Da die Excel Mappe von verschiedenen Arbeitern auf verschiedenen PC's verwendet wurde mit verschiedenen Pfaden.
Ich habe es nicht hinbekommen.
Kannst du mir einen Tipp geben, wie ich Excel zwinge, einfach im aktuellen Verzeichnis zu schauen (Dessen Namen ich nicht kenne)?
Grüsse
Hey Christof!
Das müsstest du mit 'thisWorkbook.Path' auslesen können.
LG, Kai
@@KaiWeissmann Danke, ja aber in diesem Fall habe ich kein VB in der Excel benutzt. Nur Views auf die CSV's die durch einem Macro (Button) ausgelöst werden.
In den Links (Verbindungen) steht immer der ganze Pfad drinnen.
Irgend einen Trick muss es doch geben das Excel einfach im aktuellen Verzeichnis schaut.
(Ich habe im Netzt gesucht aber keine Lösung für diesen Fall gefunden)
Hallo Kai,
super Video. Hab es genauso nachgebaut. Allerdings habe ich,wie gewünscht jetzt zwei fast gleiche Dateien in zwei arbeitsmappen.
Ich würde die tabellen gern auf die gleichen Inhalte überprüfen, da die ursprungsdatei aktualisiert wird.
Wenn datensätze nur einzeln vorhanden sind sollen diese aus der empfängertabelle gelöscht werden.hast du hierzu eine idee?
Hallo Ronny, danke für dein Feedback. Wenn ich dich richtig verstehe, dann möchtest du zwei Tabellen vergleichen, indem du den Wert einer Spalte vergleichst. Wenn ein Wert in Tabelle1 vorkommt, aber nicht in Tabelle2, dann möchtest du die Zeile in Tabelle1 löschen. Verstehe ich dich so richtig? LG Kai
@@KaiWeissmann
Hallo kai.Danke für deine schnelle antwort.
Bei mir wird tabelle1 mit hilfe deines codes bei jedem öffnen neu hereinkopiert, weil diese in der ursprungsdatei ständig aktualisiert wird. Tabelle2 hat in dem fall zum teil alte datensätze (nicht mehr in tabelle1 vorhanden,dann ganze zeile löschen) und tabelle 1 liefert aber auch neue datensätze die in tabelle 2 noch nicht vorhanden sind.
Es sind personaldatensätze (Beschäftigte werden entlassen bzw. Neu eingestellt)
Habe es mittlerweile mit 3 for next schleifen gelöst nachdem ich mich an power query versucht habe und gescheitert bin.danke trotzdem
@@ronnykortge7627 super, dass du das Problem lösen konntest! LG Kai
Hallo Kai,
vielen Dank für das Video. Auch als Rookie konnte ich deinen Ausführungen folgen.
Das VBA funktioniert grundlegend. Ich habe einen Punkt der mich verzweifeln lässt und einen der ganz schön wäre, wenn dieser ausgeräumt wäre.
1. Das VBA kopiert mir nicht die errechneten Werte, sondern die zugrundeliegenden Formeln. Wie kann ich das VBA so ändern, dass stattdessen die Ergebnisse kopiert werden?
2. Die Quelldatei ist mit weiteren Dateien verknüpft. Wenn ich das VBA starte, öffnet sich die Quelldatei und ich muss manuell bestätigen ob diese aktualisiert werden soll. Nice to have wäre, wenn diese Abfrage automatisch beantwortet oder unterdrückt werden könnte.
Besten Gruß
Necat
Ich nehme alles zurück ;-) passt
Also meine Fragen. Das Kompliment bleibt.
Hi Necat, danke! Freut mich, dass dir das Video weiterhilft :-)
Hallo Necat, ich bin jetzt aus dem Urlaub zurück und kann dir etwas ausführlicher antworten:
1. Um nur Werte (und nicht Formeln) zu kopieren, können wir .PasteSpecial nutzen. Für den Code im Video sieht das konkret so aus:
Statt
wbQuelle.Worksheets(1).Range("A2:E7").Copy ThisWorkbook.Worksheets(1).Range("A8")
haben wir
wbQuelle.Worksheets(1).Range("A2:E7").Copy
ThisWorkbook.Worksheets(1).Range("A8").PasteSpecial Paste:=xlPasteValues
2. Die Abfrage für Verknüpfungen können wir mit
Application.AskToUpdateLinks = False
unterdrücken. Einfach dorthin schreiben, wo wir auch das ScreenUpdating und die DisplayAlerts unterdrücken. Und am Ende schalten wir die Abfrage wieder an mit
Application.AskToUpdateLinks = True
Ich hoffe das hilft dir (und auch anderen, mit denselben Fragen) weiter :)
Hallo, so wie alle finde ich deine Videos super. Du hast mir schon einige Male sehr weitergeholfen. Ich wollte den Quellpfad dynamisch gestalten. also mit datum und jahr im titel, der sich am tagesdatum orientiert. mein schwacher versuch: sPfad = "X:\XXX\XXXX\" & Format(Now, "yymmdd") & "_xxxx_" & Year(Date) & ".xlsx" kannst du mir vielleicht beim lösungsansatz helfen? danke dir
Hallo Ronald, freut mich sehr, dass dir die Videos gefallen!
Dein Versuch sieht auf den ersten Blick gut aus. Wenn ich das im Direktfenster eingebe, dann bekomme ich das hier zurück: X:\XXX\XXXX\240126_xxxx_2024.xlsx
Welcher Fehler tritt bei dir auf?
LG Kai
@@KaiWeissmann hi kai, erstmal danke für deine antwort. ja bei mir hat es auch so ausgesehen, das problem ist, es wird keine datei geöffnet. wenn ich anstatt dessen das datum manuell eingebe, dann funktioniert alles tadellos. es wirkt so als gäbe es die datei nicht, was ja definitiv schon so ist. wenn ich das screenupdating und die und popups wieder aktiviere kommt auch keine unterdrückte meldung oder dergleichen.
Du könntest im Direktfenster mal die Strings vergleichen, die entstehen, wenn du es mit der Format/Year Funktion erstellst und wenn du es statisch eingibst. VBA müsste beim Vergleich mit "=" ein False zurückgeben. Dann könntest du von dort aus den Fehler eingrenzen und beheben. LG Kai
hallo nochmal, danke für den pragmatischen tipp, hätte auch selber darauf kommen können. mittlerweile funktioniert alles wunderbar. nochmals vielen dank für deine hilfe und deinen support. du hast uns mit deinem makro ein paar äußerst lästige copy paste arbeiten erspart - unser team huldigt dich! :-)
Freut mich, dass du so ans Ziel gekommen bist :) LG Kai
Ich hab das jetzt nicht verstanden, die Datei wird doch geöffnet auch wenn man das nicht sieht oder irre ich da.
So habe ich das gemacht, die Datei in der die Daten sind ist unangetastet man kann sie so separat öffnen und drin rumspielen:
Connectionstring = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"data source=" & DBPath & DBFile & " ;Extended Properties =""Excel 12.0;HDR=YES;"";"
DBConnection.Open Connectionstring
Querry = "SELECT * FROM [" & DBTableNames & "$] WHERE Customer LIKE " & "'" & LookFor & "%' AND Index LIKE 'RF%' AND Repro = 1"
DBS.Open Querry, DBConnection, adOpenStatic, _
adLockReadOnly, adCmdText
Ws.Range("A2").CurrentRegion.ClearContents
For I = 0 To DBS.Fields.Count - 1
Ws.Cells(1, I + 1).Value2 = DBS.Fields(I).Name
Next I
Ws.Range("A2").CopyFromRecordset DBS
DBS.Close
Hallo Rainer, du hast völlig recht. Zur Lösung über Queries habe ich hier auch schonmal ein Video gemacht: ua-cam.com/video/5rBOPvFwFuo/v-deo.html&ab_channel=KaiWeissmann LG Kai
@@KaiWeissmann Danke , sorry ich wollte nicht vorlaut sein....
Bin nur Laie, ein echter Laie...
Gibt es denn auch ein Video über C# und Excel ? also ohne VBA ?
Hallo Kai,
erstmal danke für deine super Videos!
Leider werde ich trotzdem nicht mit VBA warm.
Ich habe deinen Code - fast - eins zu eins umgesetzt bekomme jedoch eine Fehlermeldung mit "Anwendungs- und objekdefinierter Fehler".
Hier der Code, vielleicht siehst du ja auf den ersten Blick, was ich falsch mache.
Sub Test()
Dim sPfad_Quelle As String
Dim wbQuelle As Workbook
Dim x As Long
x = Range("B8").Value
Application.ScreenUpdating = False
Application.DisplayAlerts = False
sPfad_Quelle = "Hier würde meine Quelle stehen"
If Dir(sPfad_Quelle) "" Then
Set wbQuelle = Workbooks.Open(sPfad_Quelle)
wbQuelle.Worksheets(1).Range(Cells(10, x), Cells(29, x)).Copy ThisWorkbook.Worksheets(1).Range("F5")
wbQuelle.Close SaveChanges:=False
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Beste Grüße
Bombi
Lieder ist der Titel des Videos etwas verwirrend, da du ja die Arbeitsmappe öffnest um die Daten zu kopieren. Hilft mir nicht weiter!!!
wo liegt für dich der unterschied ob die mappe kurz geöffnet und wieder geschlossen wird? Wieso brauchst du das dass das zu bleibt? Spielt das ne Rolle? Hast du ein Beispiel?
Hallo Kai, danke für das Video.
Erst einmal gut erklärt.
Ich möchten den Datenaustausch aber in die andere Richtung vornehmen. Das funktioniert auch. Leider habe ich das Problem, das trotz der Funktion „Application.DisplayAlerts = False“ einmal eine Meldung kommt : Download Datei… und eine Meldung für das Speichern der Datei. Vielleicht kannst du mir sagen woran das liegen könnte.
Danke Jack