Registriert seit: 30.03.2018
Version(en): 2010
Hallo,
ich würde gerne wissen, ob es möglich ist mit Excel Daten in eine andere Excel-Datei zu schreiben? (Ich meine hier mal so etwas gelesen zu haben)
In meinem Fall habe ich die Excel-Datei A, die Quelle für mehrere Serienbrief-Dateien ist. Außerdem eine Excel-Datei B, die sich immer mal wieder verändert.
Ich würde gerne von der Datei B die Werte dann in die Datei A (nach einem Knopfdruck) schreiben lassen, die Tabelle und Formatierung ist bei beiden Dateien gleich.
Ist das irgendwie möglich?
Viele Grüße TxM
Registriert seit: 06.12.2015
Version(en): 2016
Hallo,
ja, mit VBA geht das. Um das etwas zu verstärken: Es ist das Office-Paket, in dem sich VBA in allen Komponenten "bewegen", d.h. Daten austauschen, kann.
Für Serienbriefe ist MS Word die erste Wahl. Da kann es mit einigen Klicks ohne Programmierkenntnisse eingerichtet werden.
Ein Word-Serienbrieb kann auch direkt die Daten aus einer Excel-Tabelle ziehen.
Für jetzt sollte es reichen.
mfg
Registriert seit: 30.03.2018
Version(en): 2010
Hallo Fennek,
danke für deine Antwort. Genau, die Serienbriefe sind in Word erstellt und ziehen sich die Daten aus der Exceldatei A. Allerdings werden die Daten bisher immer von Hand geändert, ich würde es gerne so umsetzen, dass über die Exceldatei B die Daten direkt in die Exceldatei A geschrieben werden.
Viele Grüße TxM
Registriert seit: 25.11.2021
Version(en): 2019, 365
02.09.2023, 15:42
(Dieser Beitrag wurde zuletzt bearbeitet: 02.09.2023, 15:43 von Ralf A.)
(02.09.2023, 15:34)TxM schrieb: Genau, die Serienbriefe sind in Word erstellt und ziehen sich die Daten aus der Exceldatei A. Allerdings werden die Daten bisher immer von Hand geändert, ich würde es gerne so umsetzen, dass über die Exceldatei B die Daten direkt in die Exceldatei A geschrieben werden. Bleibt natürlich die Frage, warum so umständlich? Warum nicht gleich Datei B verwenden? Letztendlich ist es absolut egal, in welcher Datei Änderungen/Ergänzungen erfolgen, aber doppelte Datenhaltung ist " organisierter" Nonsens...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Registriert seit: 30.03.2018
Version(en): 2010
(02.09.2023, 15:42)Ralf A schrieb: Bleibt natürlich die Frage, warum so umständlich? Warum nicht gleich Datei B verwenden? Letztendlich ist es absolut egal, in welcher Datei Änderungen/Ergänzungen erfolgen, aber doppelte Datenhaltung ist "organisierter" Nonsens... Weil Datei B eine Vorlage ist, die immer wieder mit anderem Namen verwendet wird. Diese Datei generiert noch weit mehr als nur die Daten für den Seriendruck. Und da die Datei immer umbenannt wird müsste man bei jedem Öffnen des Seriendruck-Briefes die Quelle neu suchen. Das möchte ich gerne verhindern, deshalb der Umweg über Datei A.
Registriert seit: 25.11.2021
Version(en): 2019, 365
(02.09.2023, 16:35)TxM schrieb: Diese Datei generiert noch weit mehr als nur die Daten für den Seriendruck. ...dann würde ich mir jeweils entsprechende Abfragen via PQ erstellen...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Registriert seit: 30.03.2018
Version(en): 2010
Ich versuche das Ganze per VBA zu lösen, leider bekomme ich bei dem Code aber noch eine Fehlermeldung: Code: Sub DatenKopieren() Dim QuellDatei As Workbook Dim ZielDatei As Workbook Dim QuellBereich As Range Dim ZielBereich As Range Dim DateiPfad As String Dim DateiName As String ' Dialog zur Auswahl der Quell-Datei anzeigen With Application.FileDialog(msoFileDialogFilePicker) .Title = "Quell-Datei auswählen" .Filters.Clear .Filters.Add "Excel-Dateien", "*.xlsx; *.xls; *.xlsm" If .Show = -1 Then DateiPfad = .SelectedItems(1) DateiName = Dir(DateiPfad) Else MsgBox "Es wurde keine Datei ausgewählt. Der Vorgang wird abgebrochen.", vbExclamation Exit Sub End If End With ' Die aktuelle Quell-Datei öffnen Set QuellDatei = Workbooks.Open(DateiPfad) ' Den Quell-Bereich (A1 bis L21) auswählen Set QuellBereich = QuellDatei.Sheets("Karten-Ausgabe").Range("A1:L21") ' Versuchen, die Ziel-Datei zu öffnen (wenn sie bereits geöffnet ist) On Error Resume Next Set ZielDatei = Workbooks("Karten-Quelldatei.xlsx") ' Hier "Beispiel.xls" durch den tatsächlichen Dateinamen ersetzen On Error GoTo 0 ' Wenn die Ziel-Datei nicht geöffnet ist, öffnen und den Ziel-Bereich erstellen If ZielDatei Is Nothing Then Set ZielDatei = Workbooks.Open("C:\Users\info\Desktop\Karten-Quelldatei.xlsx") ' Hier den Pfad zur Ziel-Datei eintragen ZielDatei.Sheets.Add(, , 1, xlWorksheet, xlNone).Name = "Karten-Ausgabe" Set ZielBereich = ZielDatei.Sheets("Karten-Ausgabe").Range("A1:L21") Else ' Den Ziel-Bereich im Ziel-Blatt auswählen (angenommen, das Ziel-Blatt hat denselben Namen) Set ZielBereich = ZielDatei.Sheets("Karten-Ausgabe").Range("A1:L21") End If ' Daten kopieren QuellBereich.Copy ZielBereich ' Ziel-Datei speichern ZielDatei.Save ' Ziel-Datei schließen ZielDatei.Close SaveChanges:=False End Sub
Dies ist die Fehlermeldung, die ich dabei bekomme:
Habt ihr eine Idee, woran der Fehler liegt? Danke und viele Grüße TxM
Registriert seit: 06.12.2015
Version(en): 2016
Hallo, Sheet.add erwartet ein "Sheet-Object", z.B. Code: Sheets.Add , Sheets(Sheets.Count)
Hier wird ein neues Sheet am Ende, allse nach dem Sheet mit dem Index Sheets.count, eingefügt. mfg
Registriert seit: 29.09.2015
Version(en): 2030,5
1. es gibt eine QuellDatei : activeworkbook 2. die Daten für Word sind in Activeworkbook.sheet1 3 es gibt eine Datei der verbunden is mit einer SerienbriefVorlage in Word: Svorlage.xlsx 4. die Daten in der Vorlage in Sheet werden geändert in neue Daten aus Activeworkbook 5. die Daten in Activeworkbook.sdheet1 werden gelöscht 6. SVorlage.xlsx wird gespeichert Code: Sub M_snb() with getobject("G:\OF\Svorlage.xlsx") .sheet1.usedrange.clearcontents activeworkbook.sheet1.usedrange.cut .sheet1.cells(1) .close -1 end with End Sub
Registriert seit: 30.03.2018
Version(en): 2010
Ich wollte noch eine Rückmeldung geben, das ist letztendlich der Code: Code: Sub selectSource() Application.FileDialog(msoFileDialogFilePicker).Show ActiveSheet.Range("B119") = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) End Sub Sub selectDesti() Application.FileDialog(msoFileDialogFilePicker).Show ActiveSheet.Range("D119") = Application.FileDialog(msoFileDialogFilePicker).SelectedItems(1) End Sub Sub copyData() Call selectSource Call selectDesti Dim book_from As Workbook Dim book_to As Workbook Dim sheet_from As Worksheet Dim sheet_to As Worksheet file_path1 = ActiveSheet.Range("B119") file_path2 = ActiveSheet.Range("D119") check_book = False Dim book As Workbook For Each book In Workbooks If book.FullName = file_path1 Then Set book_from = book GoTo tieptuc End If Next book Set book_from = Workbooks.Open(file_path1) tieptuc: Set book_to = Workbooks.Open(file_path2) check_meet = False For Each sheet_from In book_from.Sheets For Each sheet_to In book_to.Sheets If sheet_from.Name = sheet_to.Name Then check_meet = True sheet_to.Range("A1:L21") = sheet_from.Range("A1:L21").Value Exit For End If Next sheet_to Next sheet_from If check_meet = True Then MsgBox "Karte erfolgreich generiert." Else MsgBox "No sheet in destination file has name as sheets in source file - Bitte kontaktieren Sie den Administrator" End If book_to.Close savechanges:=True End Sub
Danke für eure Hilfe und liebe Grüße TxM
|