Excel Werte in seperate Dateien schreiben

Guten Tag!
Ich habe eine Excel Datei in die ich Daten aus externen .xlsx Dateien einlesen kann.
Dabei werden alle Dateien in einem vordefinierten Ordner eingelesen.
Das Ergebniss sieht dann wie folgt aus:

Nun würde ich gerne zB in den Spalten G-I Daten eintragen und in die eingelesenen Dateien zurück schreiben. Die einzelnen Dateien sollten dabei möglichst gespeichert, jedoch nicht geöffnet werden.
Wenn jemand hierzu eine Idee hätte, wäre ich sehr dankbar.

Gruß T

Hallo,

ich hab dazu mal was gelesen, kann dir aber genaueres nicht sagen.
Suche mal nach Bernd Held, der hat da mal was geschrieben bzgl. „schreiben in geschlossene Dateien“. Läuft irgendwie dahingehend dass das wie eine Datenbank gehandhabt wird.

Gruß

Interessant. Wasch mich, aber mach mich nicht nass.

Wie soll das denn bitte funktionieren, dass du was mitten in die Daten schreiben willst, aber die Datei dazu nicht einlesen? In einer Datei auf der Festplatte sind doch die Bytes nicht hübsch übersichtlich nebeneinander angeordnet und man schiebt dann eine Spalte dazwischen!

Befass dich mal damit, was eine Datei ist.

Excel ist aber nunmal kein Datenbankprogramm. Und eine Excel-datei ist obendrein auch noch gezippt.

1 Like

Egal welche Methode Du anwendest, die Datei muss fürs Lesen und Schreiben geöffnet werden.

Mithilfe der ACE kannst Du via VBA auf die Daten einer Excel-Datei so zugreifen, als wäre es eine Datenbank. Vorraussetzung ist, dass das Blatt auch die Bedingungen einer Datenbank-Tabelle erfüllt (primär die Organisation der Daten in Datensätzen und Datentypen). Da darauf bei Excel manuell geachtet werden muss, rate ich davon ab, soweit nicht zwingende Gründe vorliegen.

Bearbeite die Excel-Datei lieber via VBA mit den Excel-Eigenen Funktionen (Workbooks.Open() usw.).

Ich weiß, dass Excel kein Datenbankprogramm ist.
Ich habe NUR geschrieben, dass das WIE eine Datenbank gehandhabt wird.
Kleiner Unterschied, richtig?

Hast du mal nach Bernd Held geschaut?

Wenn nein, dann hier seine Lösung dazu:

echnik: Daten in Mappen aktualisieren, ohne diese zu öffnen
Beim ersten Beispiel geht es um das Thema, wie man mit Hilfe eines VBA-Makros Daten in eine Arbeitsmappe schreiben kann, ohne diese vorher öffnen zu müssen. Gerade bei großen Arbeitsmappen dauert der Öffnen- und der Speichervorgang schon gern einmal etwas länger. Daher der Ansatz über die Hintertüre von Excel an die Arbeitsmappen ranzukommen und die Daten direkt in eine Tabelle schreiben. Dazu wird die Windows-Bibliothek ADO und eine SQL-Anweisung benötigt.

Schauen wir uns dazu einmal die Ausgangssituation aus der folgenden Abbildung an. ­
­ ­ ­
­ ­ ­
­ Auf der linken Seite ist der Datenbestand der Datei zu sehen, in der das folgende Makro enthalten ist. Die zweite Datei auf der rechten Seite enthält lediglich die Nummern. Die fehlenden Bezeichnungen sollen über den Abgleich mit der Nummer aus der „linken Mappe“ in die „rechte Mappe“ gespielt werden. Dabei bleibt die Ziel-Mappe während des Makroablaufs geschlossen.

Damit dies überhaupt funktioniert muss aus Voraussetzung die Überschrift in der Quell- und Ziel-Mappe identisch sein! ­
­ ­ ­
­ ­ ­
­ Sub BeschreibungenAktualisierenOhneMappeZuOeffnen()
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strSQL As String
Dim strDatei As String
Dim strCon As String
Dim lngZeile As Long
Dim lngZeileMax As Long

  Set con = New ADODB.Connection
  Set rst = New ADODB.Recordset
  strDatei = ThisWorkbook.Path & "\Artikel.xlsx"
  
 
  strCon = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
             "Data Source=" & strDatei & ";" & _
             "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
  con.Open strCon
  
 With Tabelle1
 
   lngZeileMax = .Range("A" & Rows.Count).End(xlUp).Row
   
   For lngZeile = 2 To lngZeileMax
   
    strSQL = "UPDATE [Tabelle1$] SET [Beschreibung] = """ & _
             .Cells(lngZeile, 2).Value & """ WHERE ArtNr = " & _
             .Cells(lngZeile, 1).Value 
    rst.Open strSQL, con
    
   Next lngZeile
  
 End With
  
  con.Close
  
  Set rst = Nothing
  Set con = Nothing
  
End Sub
'Quelle: *** VBA-Tanker ID10306 *** 	­

­ ­ ­
­ Bevor das Makro gestartet wird, muss die Bibliothek „Microsoft ActiveX Data Objects 6.1 Library” in der Entwicklungsumgebung von Excel durch den Menübefehl Extras/Verweise eingebunden werden. Diese Bibliothek enthält alle Befehle, die eben notwendig sind, um über SQL-Befehle auf Dateien zuzugreifen. Gleich zu Beginn wird ein Verweis mittels der Variablen con auf diese Bibliothek gesetzt.

Im nächsten Schritt wird der Pfad- und Dateiname zur Ziel-Arbeitsmappe angegeben. Als Prämisse für dieses Makro befindet sich diese Mappe im gleichen Verzeichnis wie auch die Quell-Arbeitsmappe.

Danach wird der Connection-String zusammengesetzt und dabei der Namen der Zieldatei übergeben. Über eine For Next – Schleife wird dann in der Tabelle1 Zeile für Zeile in der Quelle-Arbeitsmappe verarbeitet. Innerhalb der Schleife kommt die SQL-Anweisung UPDATE zum Einsatz, die über die ArtNr die Beschreibung in die Ziel-Arbeitsmappe in Tabelle1 schreibt. Hier ist darauf zu achten, dass die Eckigen Klammern um den Tabellenamen sowie das Dollar-Zeichen am Ende des Tabellennamen zu setzen ist.

Zu jeder ArtNr, die Excel finden kann wird nun die dazugehörige Bezeichnung geschrieben. Im Prinzip haben wir hier einen SVERWEIS über SQL nachgebaut, der um ein Vielfaches schneller ist.

Hinweis: Zum Testen können auch beide Mappen zuvor geöffnet werden. Auch in diesem Fall funktioniert das Makro einwandfrei.

man kann durchaus in Dateien schreiben, ohne sie zu öffnen.
Geht problemlos über VBA mit Textdateien oder Ini-Dateien.

Wenn du das nicht weißt, dann mach halblang, bevor du irgendwas schreibst, was nicht stimmt.

ist das Gegenteil von

Selbstverständlich ist die Datei dabei geöffnet. Nur eben nicht vom Elefanten persönlich.

Und es funktioniert eben ausschließlich dann, wenn die Dateistruktur passend dafür angelegt wurde, sonst ist nämlich Essig mit

Vielleicht solltest du mal deine Begriffe überprüfen. Du benutzt sie nämlich abweichend von dem, was die Allgemeinheit darunter versteht.

Nein. Eine Datei zu öffnen ist die grundlegende Vorbeitung für den lesenden und/oder schreibenden Zugriff. Nur weil Du sie nicht explizit öffnest, heißt das noch lange nicht, dass sie nicht innerhalb der genutzten Prozedur geöffnet und nach getaner Arbeit geschlossen wird.

Deine hier angewendete Logik auf das echte Leben angewendet würde bedeuten, dass Türen, die per Näherungssensor betätigt werden, sich nicht öffnen und schließen, man aber trotzdem durchgehen kann.

1 Like

dann beschwere dich bei Herrn Bernd Held, der diese Formulierung so benutzt.

Nö.

Es ist ein Unterschied, in welchem Zusammenhang man einen Ausdruck verwendet. Wenn du den nicht herstellst, ist es ganz allein dein Problem, wenn man dich falsch versteht.

Kannst du natürlich nicht wissen als Laie. Musst dich dann halt nur nicht wundern.

ich bin weder Laie noch Profi.
Und wenn der, der Profi ist, nicht weiß, dass es da mehrere Bedeutungen gibt, ist es natürlich klar, dass der Andere davon ausgeht, dass da nur „diese Eine“ Formulierung „richtig“ sein kann. Also ein Pseudo-Profi. Ein richtiger Profi kennt alle Bedeutungen und würde nachfragen - deshalb ist man ja hier in so einem Forum.

Jemand, der ernsthaft Programme mit VBA schreiben will und nicht mal erkennt, ja - nicht mal erkennen WILL, wie gefährlich das ist, was er da grad macht, ist Laie. Und zwar einer, der grad mit einer Handgranate rumspielt.

Um was genau von dir zu erfahren?

nun erzähle mir - Guru aller Profis - was mache ich denn gefährliches?
Das Programmieren IMMER gefährlich sein kann, das ist klar. Schließlich kann jeder - erst recht ein Profi - Schadcode schreiben. Ist noch gefährlicher als ein Laie, der davon keine Ahnung hat.

Freunde der gepflegten Unterhaltung,

ich möchte Euch bitten, die persönlichen An- und Übergriffe zu unterlassen. Bitte beschränkt Euch auf die eingangs genannte Frage.

Ich möchte nicht, würde aber sonst, den Threat schließen.

Danke
MOD Pierre

2 Like