Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1592to1596
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
kopieren mehrerer Spalten in variable Dateien
22.11.2017 08:29:01
Tim
Hallo,
leider habe ich bei meiner Suche noch keinen passende Antwort finden können, daher hoffe ich hier eine Lösung zu bekommen. Und zwar hätte ich gerne ein Modul, dass Spalten/Zeileninhalte von zwei variierenden Arbeitsmappen B (SVN), C (TCM) kopiert, in eine "Haupt-"Arbeitmappe A einfügt, Daten berechnet und Anschließend in Mappe C zurück kopiert.
zusätzliche Infos:
- A genannt "Tool", bleibt immer dieselbe Datei. Verwendetes Sheet "Tool".
- B genannt SVN, Pfad und Name ist variierenden doch der Aufbau bleibt derselbe. Verwendetes Sheet "Total Report".
- C genannt TCM, Pfad und Name ist variierenden doch der Aufbau bleibt derselbe. Verwendetes Sheet "Report".
Ablauf:
1. Öffne A
2. Button_Click (Start)-> Userform wird geöffnet, womit der Benutzer aufgefordert wird die Dateipfade von B und C auszuwählen. Mit Button_Click (OK) werden die Pfade in die Zellen "W5"=SVN-Pfad und "W6"=TCM-Pfad übergeben.
3. Button_Click (Read_Data) -> läuft ein Makro, welches die Spalten "B:H" ab Zeile 8+ von Mappe B und die Spalten "B:C" ab Zeile 8+ von Mappe C, in A kopiert.
4. Diese Daten werden dann mittels hinterlegter Formeln berechnet und in die Spalten "Q:R" ab Zeile 5+, in A abgelegt.
5. Diese Beiden Spalten "Q:R" ab Zeile 5+ sollen dann wieder in die Mappe C in die Spalten "F:G" ab Zeile 8+ zurückkopieren werden.
Frage:
Wie bekomme ich den Schritt 5 hin? Hierbei kommen immer wieder Fehler auf, entweder weil die Mappe C bereits geöffnet ist oder die Typen unverträglich sind oder kopiert ohne Inhalt usw.
Ich wäre euch sehr Dankbar wenn ihr mir weiterhelfen könntet.
Option Explicit
Function IsWorkbookOpen(ByVal strName As String) As Boolean
On Error Resume Next
IsWorkbookOpen = Not Workbooks(strName) Is Nothing
End Function

Sub Read_Data()
' Copy_Into_Tool
'Application.Calculation = xlCalculationManual      'Berechnung deaktiviert
Dim File As Variant
Dim Filename As Variant
Dim wbTool As Workbook                                   'WB Zieldatei Tool
Dim wsTool As Worksheet                                  'WS Zieldatei
Dim wbSVN As Workbook                                    'WB 1. Quelldatei SVN
Dim wsSVN As Worksheet                                   'WS 1. Quelldatei
Dim wbTCM As Workbook                                    'WB 2. Quelldatei TCM
Dim wsTCM As Worksheet                                   'WS 2. Quelldatei
Dim strPfad1 As String                            	 'SVN Pfad
Dim strPfad2 As String                             	 'TCM Pfad
Dim strSVN As Variant
Dim strQuelle1 As String
Dim strTCM As Variant
Dim strQuelle2 As String
Dim Total_Report As Object
Dim Report As Object
Dim Workbooks As Object
strPfad1 = ""
strSVN = Trim(Range("W5").Text)                        	'Zelle W5 steht Pfad von SVN
strQuelle1 = strPfad1 & strSVN
strPfad2 = ""
strTCM = Trim(Range("W6").Text)                        	'Zelle W6 steht Pfad TCM
strQuelle2 = strPfad2 & strTCM
'wbTool = ThisWorkbook               			'Mappe "Tool" mit Code
'wsTool = wbTool.Worksheets("Tool")
'wbSVN = Workbooks.Open(strSVN & strPfad1)
'wsSVN = wbSVN.Worksheets("Total_Report")
'wbTCM = Workbooks(strTCM)
'wsTCM = wbTCM.Worksheets("Report")
'Copy_From_SVN
strPfad1 = ThisWorkbook.Worksheets("Tool").Range("W5").Value
Application.ScreenUpdating = False
Application.StatusBar = "Der Vorgang wird u.U. einige Minuten dauern. Geduld bitte!"
Application.DisplayAlerts = False
'Kopiert Spalten ab B8:H8 von SVN in Tool ab B5:H5
With Application.Workbooks.Open(Filename:=strQuelle1)
.Worksheets("Total Report").Range("B8:H8").End(xlUp).Copy _
Destination:=ThisWorkbook.Worksheets("Tool").Range("B5")
Range("B8:H8").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ThisWorkbook.Worksheets("Tool").Activate
Range("B5").Select
ActiveSheet.Paste
Application.CutCopyMode = False
If IsWorkbookOpen(strQuelle1) = True Then
wbSVN.Activate
ActiveWorkbook.Close SaveChanges:=False
End If
End With
'Copy_From_TCM
strPfad2 = ThisWorkbook.Worksheets("Tool").Range("W6").Value
'Kopiert Spalten B8:C8 von TCM in Tool L5:M5
With Application.Workbooks.Open(Filename:=strQuelle2)
.Worksheets("Report").Range("B8:C8").End(xlUp).Copy _                                    _
Destination:=ThisWorkbook.Worksheets("Tool").Range("L5")
Range("B8:C8").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ThisWorkbook.Worksheets("Tool").Activate
Range("L5").Select
ActiveSheet.Paste
Application.CutCopyMode = False
If IsWorkbookOpen(strQuelle2) = True Then
wbTCM.Activate
Workbooks("wbTCM").Close SaveChanges:=False
End If
End With
'Application.Calculation = xlCalculationAutomatic       'Berechnung aktiviert
' ////////// Funtioniert bis hier /////////////
'Copy_To_TCM
'Hier sollen die Spalten ab Q5:R5 von der Zieldatei Tool in TCM ab F8:G8 kopiert werden
ThisWorkbook.Worksheets("Tool").Range("Q5:R5").End(xlUp).Copy
If IsWorkbookOpen(strQuelle2) = False Then
Application.Workbooks.Open (strQuelle2)
Worksheets("Report").Range("F8").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
Application.DisplayAlerts = True
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: kopieren mehrerer Spalten in variable Dateien
22.11.2017 13:28:41
fcs
Hallo Tim,
wenn man mit mehreren Dateien in einem Makro arbeitet, dann ist es grundsätzlich ratsam mit Objektvariablen zu arbeiten und die Dateien den entsprechenden Variablen zuzuweisen. Gleiches gilt für Tabellenblätter. Ansätze dazu sind in der Datei ja schon vorhanden, aber nicht konsequent umgesetzt.
Man behält dann besser den Überblick und kann weitesgehend ohne Select und Activate arbeiten.
In deinem Makro auch wenn es bis zur Problemzeile funktioniert gibt es einige doppelte Kopieranweisungen.
(einemal direkt kopieren/an Destination einfügen, einmal kopieren und per Paste einfügen.
Zum Kopieren bestimmt man am besten den zu kopierende Zeilenbereich (wenn variabel), statt mit select-Anweisungen den zu kopierenden Bereich zu ermitteln.
Da du die TCM-Datei im ersten Teil deines Makros schon geöffnet hast brauchst du zum Übertragen der Werte von "Tool" nach "TCM" weder zu prüfen, ob die TCM-Datei geöffnet ist, noch diese erneut zu öffnen.
Gruß
Franz
Function IsWorkbookOpen(ByVal strName As String) As Boolean
On Error Resume Next
IsWorkbookOpen = Not Workbooks(strName) Is Nothing
End Function
Sub Read_Data()
' Copy_Into_Tool
'Application.Calculation = xlCalculationManual      'Berechnung deaktiviert
Dim File As Variant
Dim Filename As Variant
Dim wbTool As Workbook                                   'WB Zieldatei Tool
Dim wsTool As Worksheet                                  'WS Zieldatei
Dim wbSVN As Workbook                                    'WB 1. Quelldatei SVN
Dim wsSVN As Worksheet                                   'WS 1. Quelldatei
Dim wbTCM As Workbook                                    'WB 2. Quelldatei TCM
Dim wsTCM As Worksheet                                   'WS 2. Quelldatei
Dim strPfad1 As String                               'SVN Pfad
Dim strPfad2 As String                               'TCM Pfad
Dim strSVN As Variant
Dim strQuelle1 As String
Dim strTCM As Variant
Dim strQuelle2 As String
Dim Zeile_L As Long
Dim StatusCalc As Long
strPfad1 = ""
strSVN = Trim(Range("W5").Text)                         'Zelle W5 steht Pfad von SVN
strQuelle1 = strPfad1 & strSVN
strPfad2 = ""
strTCM = Trim(Range("W6").Text)                         'Zelle W6 steht Pfad TCM
strQuelle2 = strPfad2 & strTCM
'wbTool = ThisWorkbook                          'Mappe "Tool" mit Code
'wsTool = wbTool.Worksheets("Tool")
'Copy_From_SVN
strPfad1 = ThisWorkbook.Worksheets("Tool").Range("W5").Value
'Makrobremsen lösen
With Application
.ScreenUpdating = False
.StatusBar = "Der Vorgang wird u.U. einige Minuten dauern. Geduld bitte!"
.DisplayAlerts = False
StatusCalc = .Calculation 'Berechnungsmodus merken
.Calculation = xlCalculationManual
End With
'Kopiert Spalten ab B8:H8 von SVN in Tool ab B5:H5
Set wbSVN = Application.Workbooks.Open(Filename:=strQuelle1, ReadOnly:=True)
With wbSVN
Set wsSVN = .Worksheets("Total Report")
With wsSVN
Zeile_L = .Range("B:H").EntireColumn.SpecialCells(xlCellTypeLastCell).Row
If Zeile_L >= 8 Then
.Range(.Cells(8, 2), .Cells(Zeile_L, 8)).Copy _
Destination:=ThisWorkbook.Worksheets("Tool").Range("B5")
Application.CutCopyMode = False
End If
End With
.Close SaveChanges:=False
End With
'Copy_From_TCM
strPfad2 = ThisWorkbook.Worksheets("Tool").Range("W6").Value
'Kopiert Spalten B8:C8 von TCM in Tool L5:M5
Set wbTCM = Application.Workbooks.Open(Filename:=strQuelle2)
With wbTCM
Set wsTCM = .Worksheets("Report")
With wsTCM
Zeile_L = .Range("B:C").EntireColumn.SpecialCells(xlCellTypeLastCell).Row
If Zeile_L >= 8 Then
.Range(.Cells(8, 2), .Cells(Zeile_L, 3)).Copy _
Destination:=ThisWorkbook.Worksheets("Tool").Range("L5")
Application.CutCopyMode = False
End If
End With
End With
Application.Calculate 'Alles neuberechnen
'Application.Calculation = xlCalculationAutomatic       'Berechnung aktiviert
'Copy_To_TCM
'Hier sollen die Spalten ab Q5:R5 von der Zieldatei Tool in TCM ab F8:G8 kopiert werden
With ThisWorkbook.Worksheets("Tool")
Zeile_L = .Range("Q:R").EntireColumn.SpecialCells(xlCellTypeLastCell).Row
If Zeile_L >= 5 Then
.Range(.Cells(5, 17), .Cells(Zeile_L, 18)).Copy
wsTCM.Range("F8").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End If
End With
'Makrobremsen zurücksetzen
With Application
.DisplayAlerts = True
.StatusBar = False
.ScreenUpdating = True
.Calculation = StatusCalc
End With
End Sub

Anzeige
AW: kopieren mehrerer Spalten in variable Dateien
23.11.2017 07:59:12
Tim
Guten Morgen Franz,
Vielen vielen Dank für deine Hilfe. Der Code funktioniert Reibungsfrei. Und danke für die Tipps, dass werde ich mir nochmal genauer anschauen.
Danke.
Gruß Tim
AW: kopieren mehrerer Spalten in variable Dateien
24.11.2017 08:23:12
Tim
Guten Morgen an Alle,
wäre es noch möglich während des Ablaufs des Makros eine Progressbar mit Fortschrittanzeige in Prozent anzeigen zu lassen? Da es viele Benutzer gibt, die bei längerer Ablaufdauer schnell ungeduldigen werden =) doch wenn ihnen angezeigt wird wie weit der Vorgang ungefähr ist, versuchen Sie vielleicht nicht gleich den Resetknopf zu drücken.
Ich habe es auch schon versucht mit einer Userform und einer Do While Schleife doch leider zeigt es keine Fortschritte an und er hängt sich dabei ziemlich auf.
Weis das zufällig jemand ob es möglich ist und könnte es mir dann Zeigen wie dies ginge?
Anzeige
AW: kopieren mehrerer Spalten in variable Dateien
24.11.2017 09:47:03
fcs
Hallo Tim,
man kann so einen Fortschrittbalken anzeigen, ist aber nicht ganz einfach.
Bei dir gibt es aber eigentlich nur 3 Schritte, da ist eine echte Forschrittsanzeige nur in soweit möglich z.B in einem ungebunden Userform, dass über der Excelarbeitsfläche "schwebt" den jeweiligen Schritt anzeigt.
Aber zusätzlich Informationsanzeigen bedeuten natürlich auch, dass ein Makro noch etwas mehr Zeit zur Ausführung braucht.
Als einfache Lösung kannst du aber auch am Ende des Makros eine MsgBox anzeigen, dass das Makro fertig ist.
Gruß
Franz
AW: kopieren mehrerer Spalten in variable Dateien
24.11.2017 10:34:16
Tim
Hallo Franz,
gut dass es dich gibt. Das Dachte ich mir schon, dass dies zusätzlich Zeit beansprucht. Jedoch würde ich es gerne mal versuchen um zu schauen ob man mit der "Mehrzeit" evtl leben könnte.
Hättest du mir da ein Bsp. oder könntest du mir mit Code zeigen wie und wo ich das einbauen kann?
Die MsgBox habe ich momentan schon in meinem Code eingebaut.
Gruß
Tim
Anzeige
AW: kopieren mehrerer Spalten in variable Dateien
25.11.2017 06:37:33
fcs
Hallo Tim,
hier eine Beispieldatei.
https://www.herber.de/bbs/user/117900.xlsm
Das Modul "Modul_Progress" und das Userform "UF_Progress" kannst du per Drag&Drop in deine Datei kopieren.
Im Makro "Read_Data" findest du Beispiele wie die Fortschrittsanzeige aufgerufen wird. Den Parameter "iPause" kannst du auf 0 setzen wenn die Ausführung der Makro-Abschnitte länger als 1 Sekunde dauert.
Zum Testen mit kleinen lokalen Dateien und einfachen Berechnungsformeln muste ich den Wert setzen, damit ich eine vernüftige Anzeige bekomme.
Gruß
Franz
Anzeige
AW: kopieren mehrerer Spalten in variable Dateien
27.11.2017 08:29:28
Tim
Guten Morgen Franz,
sorry für die verspätete Antwort, konnte leider nicht früher.
Vielen Dank für deine Hilfe, das funktioniert super. Es benötigt auch nicht wirklich mehr Zeit, daher kann ich es auch bei mir ohne Probleme einbauen.
Danke dir. Schöne Woche.
Gruß
Tim

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige