Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1148to1152
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Arbeitsblätter austauschen

Arbeitsblätter austauschen
Ralf
Hallo,
ich muss in 400 Exceldateien ein Blatt austauschen. Dass Blatt hat in den Dateien immer den selben Namen. Kann ich es irgendwie umgehen, jede einzelne Mappe zu öffnen und dann den Austausch vorzunehmen?
Liebe Grüße
Ralf
AW: Arbeitsblätter austauschen
08.04.2010 11:00:11
Björn
Hallo,
nein, das kannst du nicht.
Du kannst umgehen, alles manuell zu machen, aber auch eine MAkrolösung wird jede Datei öffnen und dann das Blatt tauschen.
Gruß
Björn B.
AW: Arbeitsblätter austauschen
08.04.2010 11:03:16
Andi
Hi Ralf,
jede einzelne Mappe nicht zu öffnen, was spricht dagegen? Performance?
Alternativ: Initialisiere eine zweite Excelinstanz im Hintergrund, Visible Eigenschaft false etc. / Modul getmorespeed. Das würde relativ fix gehen.
Moment, ich schaue mal nach einem passenden Beispielcode...
Gruß Andi
AW: Arbeitsblätter austauschen
08.04.2010 11:05:19
Ralf
Jede einzelne Mappe öffen? Ja, wenn es irgendwie automatisch geht, ist das auch mit der Perfomance kein Problem.
Anzeige
AW: Arbeitsblätter austauschen
08.04.2010 11:23:04
Andi
Ralf, sorry. Ich dachte, wenn VB die Mappen einzeln öffnen tut. Dir reicht aber schon ein VB Program, egal ob es nun 15 oder 45 sec dauert. Ich habe Deine Frage falsch interpretiert.
Du brauchst definitiv einen VB Code.
Wie heißt das Tabellenblatt, das getasucht werden muss. Wie heißt die Quelldatei mit dem neuen Tabellenblatt.
Gruß Andi
AW: Arbeitsblätter austauschen
08.04.2010 11:26:38
Ralf
Hallo,
das Arbeitsblatt heißt "Telefonverzeichnis" Das Quellverzeichnis heißt ebenfalls "Telefonverzeichnis"
lg
ralf
ein VBA-Vorschlag
08.04.2010 11:56:59
Erich
Hi Ralf,
hier ein (ungetestetes) Makro.
Das Verzeichnis musst du anpassen (sicher erst mal ein Test-Verzeichnis).
Wenn eine Mappe kein Telefonverzeichnis enthält, wird sie nicht geändert,
es kommt eine Meldung:

Sub BlattTausch()  '  UNGETESTET
' Ersetzt in allens xls-Mappen eines Verzeichnisses das Blatt "Telefonverzeichnis"
' durch das Blatt aus der Mappe, in der dieser Code steht
Dim strD As String, wks As Worksheet, lngI As Long
Const strVz As String = "c:\temp\"  ' In diesem Verz. liegen die ca. 400 Mappen.
strD = Dir(strVz & "*.xls")         ' Alle ca. 400 *xls-Dateien werden bearbeitet.
'   Hier könnte man ein Suchmuster einstellen.
While strD > ""
Workbooks.Open strD, 0, True
With ActiveWorkbook
lngI = 0
For Each wks In .Worksheets
If wks.Name = "Telefonverzeichnis" Then
Application.DisplayAlerts = False
lngI = .Index
wks.Delete
Application.DisplayAlerts = True
If lngI = 1 Then
ThisWorkbook.Worksheets("Telefonverzeichnis").Copy before:=.Sheets(1)
Else
ThisWorkbook.Worksheets("Telefonverzeichnis").Copy after:=.Sheets(lngI)
End If
Exit For
End If
Next wks
If lngI = 0 Then MsgBox .Name & vbLf & "ist ohne Blatt 'Telefonverzeichnis'"
End With
strD = Dir()
Wend
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: ein VBA-Vorschlag
08.04.2010 12:11:09
Ralf
Hallo,
Muss ich das Makro im VBA Projekt in die Arbeitsmappe "Telefonverzeichnis" einfügen und dort ausführen?
Wenn ja, da bekomme ich die Meldung : Laufzeitfehler 438, Objekt unterstützt diese Eigenschaft oder Methode nicht"
Wohin mit dem Code?
08.04.2010 13:00:17
Erich
Hi Ralf,
die Prozedur gehört in ein "normales" Modul, z. B. Modul1, evtl. ist "Einfügen - Modul" nötig.
Wenn du einen Fehler mitteilst, schreib doch bitte dazu, in welcher Codezeile (ist im Fehlerfall markiert)
der Fehler aufgetreten ist.
Und noch eine Bemerkung zu den Bezeichnungen:
Eine Arbeitsmappe ist eine Exceldatei, hat die Endeung .xls (oder ähnlich).
"Telefonverzeichnis" habe ich hier bisher als Name eines Tabellenblatts (Blatt, Sheet, Worksheet)
innerhalb einer Mappe gesehen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Wohin mit dem Code?
08.04.2010 13:41:52
Ralf
Hallo Erich,
danke schon mal. Ich bekomme die Fehlermeldung in Zeile 17 ist Schluss. Die Arbeitsmappe ist bereits geöffnet worden und das Tabellenblatt Telefonverzeichniss auch schon ausgewählt.
Gruß
Ralf
Korrektur
08.04.2010 13:18:57
Erich
Hi Frank,
in meiner Prozedur habe ich das Speichern und Schließen der geänderten Mappen einfach vergessen.
Hier noch mal - hoffentlich vollständig:

Sub BlattTausch()  '  UNGETESTET
' Ersetzt in allens xls-Mappen eines Verzeichnisses das Blatt "Telefonverzeichnis"
' durch das Blatt aus der Mappe, in der dieser Code steht
Dim strD As String, wks As Worksheet, lngI As Long
Const strVz As String = "c:\temp\"  ' In diesem Verz. liegen die ca. 400 Mappen.
strD = Dir(strVz & "*.xls")         ' Alle ca. 400 *xls-Dateien werden bearbeitet.
'   Hier könnte man ein Suchmuster einstellen.
While strD > ""
Workbooks.Open strD, 0, True
With ActiveWorkbook
lngI = 0
For Each wks In .Worksheets
If wks.Name = "Telefonverzeichnis" Then
Application.DisplayAlerts = False
lngI = .Index
wks.Delete
Application.DisplayAlerts = True
If lngI = 1 Then
ThisWorkbook.Worksheets("Telefonverzeichnis").Copy before:=.Sheets(1)
Else
ThisWorkbook.Worksheets("Telefonverzeichnis").Copy after:=.Sheets(lngI)
End If
Exit For
End If
Next wks
If lngI = 0 Then
MsgBox .Name & vbLf & "ist ohne Blatt 'Telefonverzeichnis'"
.Close False   ' hier wird nicht gespeichert
Else
.Close True    ' hier werden die Mappen wieder gespeichert
End If
End With
strD = Dir()
Wend
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Arbeitsblätter austauschen
08.04.2010 12:13:55
Andi
Vorab anbei mal DirtyCode, ohne Gewährleistung. Ich schick Dir später das Excelfile. Des muß ich noch testen. Gruß Andi
Function TabelleTauschen()
Dim fso
Dim QuelleWB As Object
Dim ZielWB As Object
Dim FileVerzeichnis, Filename, Sheetname As String
Dim Tabellenblattgeloescht As Boolean
Dim DateiObjekt As Scripting.File
Sheetname = "Telefonverzeichnis"
FileVerzeichnis = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set QuelleWB = ThisWorkbook
'for Each
For Each DateiObjekt In fso.GetFolder(FileVerzeichnis).Files
If InStr(DateiObjekt.Name, "xls") > 0 And DateiObjekt.Name  "TELEVZ_MAKRO.xls" Then
Set ZielWB = Workbooks.Open(ThisWorkbook.Path & "\" & DateiObjekt.Name)
Tabellenblattgeloescht = False
For i = 1 To ZielWB.Sheets.Count
If InStr(ZielWB.Sheets(i).Name, Sheetname) > 0 Then
ZielWB.Sheets(i).Delete
Tabellenblattgeloescht = True
Exit For
End If
Next
If Tabellenblattgeloescht = True Then
QuelleWB.Activate
QuelleWB.Sheets(Sheetname).Select
QuelleWB.Sheets(Sheetname).Copy
ZielWB.Activate
ZielWB.Paste
ZielWB.Save False
ZielWB.Close
End If
Set ZielWB = Nothing
End If
Next
Set fso = Nothing
End Function

Anzeige
AW: Arbeitsblätter austauschen
08.04.2010 13:11:40
Andi
Ralf, angehängtes Makro.xls samt 400 Excelfiles in ein belie´biges Verzeichnis kopieren.
Anschliessend Makro.xls öffnen, und die Tabelle "Telefonverzeichnis" mit deinen aktuellen Telefondaten versehen. Anschliessend Datei speichern. Zuvor wiurde während des Öffnens eine Symbolleiste mit dem Schaltknopf TB_Tauschen generiert. Bei Betättigung dieses Knopfes werden von allen 400 Excelfiles die Telefonverzeichnise getauscht. Gruß Andi
https://www.herber.de/bbs/user/68975.zip
Main Code
Function TabellenTauschen()
Dim fso
Dim QuelleWB As Object
Dim ZielWB As Object
Dim FileVerzeichnis, Filename, Sheetname As String
Dim Tabellenblattgeloescht As Boolean
Dim DateiObjekt As Scripting.File
Sheetname = "Telefonverzeichnis"
FileVerzeichnis = ThisWorkbook.Path
Set fso = CreateObject("Scripting.FileSystemObject")
Set QuelleWB = ThisWorkbook
For Each DateiObjekt In fso.GetFolder(FileVerzeichnis).Files
If InStr(DateiObjekt.Name, "xls") > 0 And DateiObjekt.Name  ThisWorkbook.Name Then
Set ZielWB = Workbooks.Open(ThisWorkbook.Path & "\" & DateiObjekt.Name)
Tabellenblattgeloescht = False
For i = 1 To ZielWB.Sheets.Count
If InStr(ZielWB.Sheets(i).Name, Sheetname) > 0 Then
Application.DisplayAlerts = False
ZielWB.Sheets(i).Delete
Tabellenblattgeloescht = True
Application.DisplayAlerts = True
Exit For
End If
Next
If Tabellenblattgeloescht = True Then
QuelleWB.Activate
QuelleWB.Sheets(Sheetname).Select
QuelleWB.Sheets(Sheetname).Copy Before:=ZielWB.Sheets(1)
ZielWB.Save
End If
ZielWB.Close
Set ZielWB = Nothing
End If
Next
Set fso = Nothing
Set QuelleWB = Nothing
End Function

Anzeige
AW: Arbeitsblätter austauschen
08.04.2010 13:50:41
Ralf
Da bekomm ich direkt beim öffnen eiine Fehlermeldung, "Fehler beim Kompilieren, Ein Modul hat einen unzulässigen Typ"
AW: Arbeitsblätter austauschen
08.04.2010 14:06:38
Ralf
es funktioniert, der Tausch erfolgt jedoch nur bei .xlsx Dateien. xls Dateien bleiben unberührt.
AW: Arbeitsblätter austauschen
08.04.2010 14:52:36
Andi
Ralf, das kann ich leider nicht debuggen, da ich Office 2003 besitze. Gruß Andi
AW: Arbeitsblätter austauschen
08.04.2010 14:59:46
Ralf
ich habs, er hat auf Groß- und Kleinschreibung geachtet. xls wird immer klein XLSX immer groß geschrieben.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige