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, 14:42
(Dieser Beitrag wurde zuletzt bearbeitet: 02.09.2023, 14:43 von Ralf A.)
(02.09.2023, 14: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, 14: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, 15: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
|