Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
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

wenn in Zeile 1 x dann bestimmte Spalten kopieren

wenn in Zeile 1 x dann bestimmte Spalten kopieren
25.03.2016 09:33:15
Metin
Hallo,
leider wurde ich in unserer Firma auserkoren aus Datenschutzgründen eine Lösung für folgendes Problem zu finden. Jedoch sind meine VBA Erfahrung mehr als nur begrenzt. Vielleicht kann mir einer von euch helfen.
Das Makro müsste so aufgebaut sein, das beim speichern der Quelldatei die Spalten kopiert werden, in denen in Zeile 1 der Wert "x" steht. Dabei ist jedoch die Zeile 1 ausgeblendet. Die kopierten Spalten sollen dann in einer Zieldatei nebeneinander ohne die Zeile 1 aus der Quelldatei gespeichert (Zielordner C:\Dokumente\Dateiname.xls) werden. Die bereits existierende Datei soll dabei ohne Fehlermeldung überschrieben werden. Ein öffnen der neuen Datei ist dabei unerwünscht. Die Werte "x" in Zeile 1 stehen im Bereich A:AD.
Ich hoffe Ihr könnt mir dabei helfen. Einen Großen Dank schon mal im Voraus.
Metin

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: wenn in Zeile 1 x dann bestimmte Spalten kopieren
25.03.2016 10:34:35
Michael
Hallo!
Bspw. so:
Dieses Makro in das Klassenmodul der Quellmappe (d.h. Quelldatei öffnen, Alt + F11 drücken, es öffnet sich der VB-Editor, dort dann im Explorer links oben auf Microsoft Excel Objekte und dort auf DieseArbeitsmappe doppelklicken):
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call SpaltenXkopieren
End Sub
Danach im VB-Editor unter Einfügen ein neues Modul einfügen, dort dann diesen Code einfügen:
Sub SpaltenXkopieren()
Dim SuBereich As Range
Dim Zelle As Range
Dim KopierBereich As Range
Dim QuellMappe As Workbook
Dim QuellBlatt As Worksheet
Dim ZielMappe As Workbook
Const ZielPfad As String = "C:\Dokumente\"
Const ZielDatei As String = "Dateiname" 'Dateiname anpassen
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Set QuellMappe = ThisWorkbook
Set ZielMappe = Workbooks.Add
Set QuellBlatt = QuellMappe.Worksheets("Tabelle1")
Set SuBereich = QuellBlatt.Range("A1:AD1")
For Each Zelle In SuBereich
If Zelle.Text = "x" Then
If KopierBereich Is Nothing Then
Set KopierBereich = Zelle.EntireColumn
Else:
Set KopierBereich = _
Union(KopierBereich, Zelle.EntireColumn)
End If
End If
Next Zelle
With ZielMappe
KopierBereich.Copy .Worksheets(1).Range("A1")
.Worksheets(1).Range("A1").EntireRow.Delete
.SaveAs Filename:=ZielPfad & ZielDatei, FileFormat:=51
.Close savechanges:=True
End With
Set QuellMappe = Nothing
Set QuellBlatt = Nothing
Set ZielMappe = Nothing
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
Der zu verwendende Dateiname für die Zieldatei muss ggf. angepasst werden, hier:
Const ZielDatei As String = "Dateiname" 'Dateiname anpassen
Das ganze erfordert natürlich, dass die Quelldatei als Arbeitsmappe mit Makros gespeichert wird, also .xlsm! Im o.a. Code wird die Zielmappe (also die Mappe, in die die "x"-Spalten kopiert werden) als Mappe ohne Makros gespeichert (.xlsx).
Klappt?
LG
Michael

Anzeige
AW: wenn in Zeile 1 x dann bestimmte Spalten kopieren
25.03.2016 11:14:16
Metin
Hallo Michael,
Super Vielen Dank.
Eine Frage noch.
Die Quelldatei hat mehrere Blätter (Ich glaube zwölf), kann man das Makro eventuell so anpassen, dass alle Blätter kopiert werden und in jedem Blatt die gleiche Routine abläuft. Hatte ich in meinem ersten Post leider nicht angegeben.
Nochmals Vielen Dank.
Metin

AW: wenn in Zeile 1 x dann bestimmte Spalten kopieren
25.03.2016 12:02:56
Michael
Hallo Metin!
Freut mich. Zu
Die Quelldatei hat mehrere Blätter (Ich glaube zwölf), kann man das Makro eventuell so anpassen, dass alle Blätter kopiert werden und in jedem Blatt die gleiche Routine abläuft. Hatte ich in meinem ersten Post leider nicht angegeben.
Kann man prinzipiell, ist aber schon was anderes, als was Du gefragt hast. Warum hast Du diese Info nicht gleich gegeben?
Kann ich Dir anpassen, aber heute nicht mehr, bin schon dahin... Ich melde mich frühestens Dienstag wieder!
LG
Michael

Anzeige
AW: wenn in Zeile 1 x dann bestimmte Spalten kopieren
25.03.2016 12:15:44
Metin
Hallo Michael,
sorry und nochmals Danke. Würde mich freuen von dir dann am Dienstag nochmal was zu hören.
Frohe Ostern
Metin

Anpassung für mehrere Blätter
29.03.2016 10:26:49
Michael
Hallo Metin!
Hier die gewünschte Anpassung für mehrere Blätter in der Quellmappe. Ich bin allerdings davon ausgegangen, dass der Datenbereich in allen Blättern gleich ist (also die "x"-Kennzeichnung in jedem Blatt von A1:AD1 reicht):
Wie bisher in das Klassenmodul der Arbeitsmappe (Quellmappe!)...
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call SpaltenXkopieren
End Sub
... in ein allgemeines Modul der Quellmappe:
Sub SpaltenXkopieren()
Dim SuBereich As Range
Dim Zelle As Range
Dim KopierBereich As Range
Dim QuellMappe As Workbook
Dim ZielMappe As Workbook
Dim i As Long
Const BereichX As String = "A1:AD1" 'Wo stehen die "x", anpassen
Const ZielPfad As String = "C:\Dokumente\" 'Wo soll gespeichert werden, anpassen
Const ZielDatei As String = "Dateiname" 'Welcher Dateiname, anpassen
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
Set QuellMappe = ThisWorkbook
Set ZielMappe = Workbooks.Add
With ZielMappe
For i = 1 To QuellMappe.Worksheets.Count - 1
.Worksheets.Add after:=.Worksheets(.Worksheets.Count)
Next i
End With
For i = 1 To QuellMappe.Worksheets.Count
Set SuBereich = QuellMappe.Worksheets(i).Range(BereichX)
For Each Zelle In SuBereich
If Zelle.Text = "x" Then
If KopierBereich Is Nothing Then
Set KopierBereich = Zelle.EntireColumn
Else:
Set KopierBereich = _
Union(KopierBereich, Zelle.EntireColumn)
End If
End If
Next Zelle
With ZielMappe
KopierBereich.Copy .Worksheets(i).Range("A1")
.Worksheets(i).Range("A1").EntireRow.Delete
End With
Set KopierBereich = Nothing
Application.CutCopyMode = False
Next i
With ZielMappe
.Worksheets(1).Activate
.SaveAs Filename:=ZielPfad & ZielDatei, FileFormat:=51
.Close savechanges:=True
End With
Set QuellMappe = Nothing
Set ZielMappe = Nothing
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
Ein paar allgemeine Anpassungen kannst Du hier vornehmen; sollte sich der Zielpfad, der Ziel-Dateiname oder auch der "x"-Kennzeichnungsbereich (bisher A1:AD1) ändern, musst Du das nur hier einmalig anpassen:
Const BereichX As String = "A1:AD1" 'Wo stehen die "x", anpassen
Const ZielPfad As String = "C:\Dokumente\" 'Wo soll gespeichert werden, anpassen
Const ZielDatei As String = "Dateiname" 'Welcher Dateiname, anpassen
LG
Michael

Anzeige
Naja...
30.03.2016 10:50:41
Michael
Metin,
Würde mich freuen von dir dann am Dienstag nochmal was zu hören.
...sehr darauf gefreut scheinst Du Dich nicht zu haben, zumal ich bis dato keine Rückmeldung von Dir zu meiner Ergänzung erhalten habe.
Schade!
Michael

@ Falls Du das noch liest: Ich bin sauer! owT
31.03.2016 10:06:43
Michael

341 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige