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

Makro zum Kopieren von Daten zwischen 2 Dateien

Makro zum Kopieren von Daten zwischen 2 Dateien
Daten
Hallo,
ich habe eine Frage zum Visual Basic:
Ich habe das nachfolgend dargestellte Makro erstellt, welches die Aufgabe hat, Daten aus der Basisdatei "Auslegung_Rohr_Wasser_Gas_ASME.XLS" in die Zieldatei "ASMEB31_1OD_V162.xls" zu kopieren.
Die Zieldatei "ASMEB31_1OD_V162.xls" befindet sich an immer der gleichen Stelle (Laufwerk C:\...) und unter dem gleichen Namen, während ich die Basisdatei "Auslegung_Rohr_Wasser_Gas_ASME.XLS" unter jeweils verschiedenen Namen in den jeweiligen Projekten speichern möchte.
Wenn ich die Basisdatei "Auslegung_Rohr_Wasser_Gas_ASME.XLS" aber umbenenne, findet das Makro meine Daten nicht mehr. Wie kann ich erreichen, dass das Makro trotzdem funktioniert, auch wenn ich die Basisdatei (in dem Fall "Auslegung_Rohr_Wasser_Gas_ASME.XLS") jeweils von Projekt zu Projekt umbennene?
Hier ist das bisherige Makro:
Sub Wandstärken_Wasser_Dampf_berechnen()
' Wandstärken_Wasser_Dampf_berechnen Makro
' Makro am 24.04.2012 von spind00e aufgezeichnet
Workbooks.Open Filename:="C:\Data\Common\Wandstaerke\ASMEB31_1OD_V162.xls"
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
ActiveWorkbook.Unprotect
ActiveSheet.Unprotect
Range("I89:J89").Select
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Sheets("ANSB31OD-B36.10").Select
Range("E7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F12").Select
Selection.ClearContents
Range("F13").Select
Selection.ClearContents
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("C89:E89").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Sheets("ANSB31OD-B36.10").Select
Range("E8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("I95").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("L6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("C122").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("G11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("Y5").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("B22").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("B1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("B3").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Range("J2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("ANSI-Class nach ASME B16.34").Visible = True
Sheets("ANSI-Class nach ASME B16.34").Select
Range("O12:P12").Select
Selection.Copy
Sheets("Druck-Temperatur Stufen").Visible = True
Sheets("Druck-Temperatur Stufen").Select
Range("E4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ANSI-Class nach ASME B16.34").Select
Range("O8").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Druck-Temperatur Stufen").Select
Range("E5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ANSI-Class nach ASME B16.34").Select
Range("O9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Druck-Temperatur Stufen").Select
Range("E6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ANSI-Class nach ASME B16.34").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Druck-Temperatur Stufen").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Auslegung Rohr").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub

Vielen Dank im Voraus.
Liebe Grüße
Eckart
AW: Makro zum Kopieren von Daten zwischen 2 Dateien
09.05.2012 10:32:39
Daten
Hallo Eckart,
vielleicht mit Hilfe einer Eingabe in eine Variable.
Dim Variable As String
Variable=InputBox("bitte geben Sie den Dateinamen ein!")
Danach mit Hilfe der Variablen die Datei öffnen.
Gruß Manfred
AW: Makro zum Kopieren von Daten zwischen 2 Dateien
10.05.2012 11:19:46
Daten
Hallo Manfred,
erstmal Danke für die Info. Ich habe die von Dir genannten Befehlszeilen in das Makro eingefügt. Wenn ich das Makro ausführen lasse, erscheint ein Eingabefeld, in welches ich den Dateinamen einfügen kann.
Welchen Befehl muß ich in das Makro schreiben, damit Excel die Datei mit dem eingegebenen Dateinamen findet und öffnet?
Liebe Grüße
Eckart
Anzeige
AW: Makro zum Kopieren von Daten zwischen 2 Dateien
10.05.2012 13:59:34
Daten
Hallo Eckart,
öffnen kannst du es dann mit:
Workbooks.Open (Variable)
Gruß Manfred
AW: Makro zum Kopieren von Daten zwischen 2 Dateien
10.05.2012 18:03:43
Daten
Hallo Manfred,
erstmal Danke für Deine Hilfe.
Ich habe das Makro entsprechend Deinem Vorschlag ergänzt.
Wenn ich aber nun meine Basisdatei in ein anderes Verzeichnis kopiere, erscheint die Fehlermeldung:
Laufzeitfehler '1004':
Eine Datei mit dem Namen 'Auslegung_Rohr_Wasser_Gas_ASME.xls' ist bereits geöffent. Es können keine zwei Dokument mit dem selben Namen geöffnet werden, selbst wenn sich die Dokumente in unterschiedlichen Ordnern befinden. Schließen Sie entweder das erste Dokument, um das zweite zu öffnen, oder benennen Sie eines der Dokumente um.
Das Makro ist folgendes:
Sub Wandstärken_Wasser_Dampf_berechnen()
' Wandstärken_Wasser_Dampf_berechnen Makro
' Makro am 24.04.2012 von spind00e aufgezeichnet
Workbooks.Open Filename:="C:\Data\Common\Wandstaerke\ASMEB31_1OD_V162.xls"
Dim Variable As String
Variable = InputBox("bitte geben Sie den Dateinamen ein!")
Workbooks.Open (Variable)
Sheets("Auslegung Rohr").Select
ActiveWorkbook.Unprotect
ActiveSheet.Unprotect
Range("I89:J89").Select
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Sheets("ANSB31OD-B36.10").Select
Range("E7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F12").Select
Selection.ClearContents
Range("F13").Select
Selection.ClearContents
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("C89:E89").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Sheets("ANSB31OD-B36.10").Select
Range("E8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("I95").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("L6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("C122").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("G11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("Y5").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("B22").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("B1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("Auslegung Rohr").Select
Range("B3").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Range("J2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ASMEB31_1OD_V162.xls").Activate
Range("M4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Auslegung_Rohr_Wasser_Gas_ASME.XLS").Activate
Sheets("ANSI-Class nach ASME B16.34").Visible = True
Sheets("ANSI-Class nach ASME B16.34").Select
Range("O12:P12").Select
Selection.Copy
Sheets("Druck-Temperatur Stufen").Visible = True
Sheets("Druck-Temperatur Stufen").Select
Range("E4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ANSI-Class nach ASME B16.34").Select
Range("O8").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Druck-Temperatur Stufen").Select
Range("E5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ANSI-Class nach ASME B16.34").Select
Range("O9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Druck-Temperatur Stufen").Select
Range("E6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("ANSI-Class nach ASME B16.34").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Druck-Temperatur Stufen").Select
ActiveWindow.SelectedSheets.Visible = False
Sheets("Auslegung Rohr").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveWorkbook.Protect Structure:=True, Windows:=False
End Sub

Nach der 4. Befehlszeile erscheint die Fehlermeldung.
Ich möchte aber meine Datei unter beliebigen Namen und in beliebigen Verzeichnissen speichern, ohne dass das Programm abstürzt.
Gibt es eine Möglichkeit zu programmieren, dass der gerade aktuelle (neue) Dateiname beim Aktivieren meiner Basisdatei automatisch erkannt und eingegeben wird (ohne dass ich meinen aktuellen neuen Dateinamen in ein Eingabefeld eingeben muß)?
Gruß
Eckart
Anzeige
AW: Makro zum Kopieren von Daten zwischen 2 Dateien
11.05.2012 00:04:41
Daten
Hallo Eckart,
damit das Ganze flexibel wird arbeitest du am besten mit Objekt-Variablen für die Arbeitsmappen (für Zieldatei und Auslegunsbasis-Datei) und die in den Datenkopiervorgang involvierten Tabellenblätter.
Zusätzlich kannst du dann auch auf die ganzen Activate und Select/Selection verzichten und alle Zellen direkt ansprechen fürs kopieren und einfügen.
Wenn die Datei mit den Auslegungs-Basis-Daten zum Zeitpunkt des Makrostarts die aktive Datei ist, dann geht die Übernahme dieser Datei in das Makro mit einer einfachen Zuweisung zu einer Objektvariablen.
Ich hab noch eine kleine Rückfrage eingebaut, bevor das Makro loslegt.
Zusätzlich wird auch geprüft ob die Zieldatei schon/noch geöffnet ist.
Gruß
Franz
Sub Wandstärken_Wasser_Dampf_berechnen()
' Wandstärken_Wasser_Dampf_berechnen Makro
' Makro am 24.04.2012 von spind00e aufgezeichnet
Dim wbAuslegung As Workbook
Dim wksAuslegungRohr As Worksheet
Dim wksDruckTempStufen As Worksheet
Dim wksANSI_Class_ASME_B16_34 As Worksheet
Dim strFileZiel As String
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim CalcStatus As Long
'Name der Zieldatei
strFileZiel = "C:\Data\Common\Wandstaerke\ASMEB31_1OD_V162.xls"
'Aktive Arbeitsmappe als Auslegungsbasis verwenden
If MsgBox("Datei """ & ActiveWorkbook.Name & """ als Auslegungsbasis verwenden?", _
vbOKCancel + vbQuestion + vbDefaultButton2, "Auslegungsbasis auswählen") = vbCancel Then
GoTo Beenden
Else
Set wbAuslegung = ActiveWorkbook
End If
'Prüfen, ob Zieldatei bereits geöffnet ist
For Each wbZiel In Application.Workbooks
If LCase(wbZiel.FullName) = LCase(strFileZiel) Then
If MsgBox("Die Zieldatei """ & wbZiel.Name & """ ist bereits geöffnet!" & vbLf _
& "Soll die Datei überschrieben werden?", _
vbQuestion + vbOKCancel + vbDefaultButton2, "Zieldatei überschreiben") = vbOK Then
Exit For
Else
GoTo Beenden
End If
End If
Next
'Einstellungen zur Beschleunigung der Makroausführung
With Application
.ScreenUpdating = False
.EnableEvents = False
CalcStatus = .Calculation
.Calculation = xlCalculationManual
End With
If wbZiel Is Nothing Then
'Zieldatei öffnen
Set wbZiel = Application.Workbooks.Open(Filename:=strFileZiel)
End If
'Tabellenblatt in Zieldatei setzen
Set wksZiel = wbZiel.Sheets("ANSB31OD-B36.10")
With wbAuslegung
.Activate
.Unprotect
Set wksAuslegungRohr = .Sheets("Auslegung Rohr")
Set wksDruckTempStufen = .Sheets("Druck-Temperatur Stufen")
Set wksANSI_Class_ASME_B16_34 = .Sheets("ANSI-Class nach ASME B16.34")
End With
With wksAuslegungRohr
.Unprotect
.Range("I89:J89").Copy
With wksZiel
.Range("E7").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("F12").ClearContents
.Range("F13").ClearContents
End With
.Range("C89:E89").Copy
wksZiel.Range("E8").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("I95").Copy
wksZiel.Range("L6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("C122").Copy
wksZiel.Range("G11").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("Y5").Copy
wksZiel.Range("B22").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("B2").Copy
wksZiel.Range("M1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("B1").Copy
wksZiel.Range("M2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("B3").Copy
wksZiel.Range("M3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("J2").Copy
wksZiel.Range("M4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End With
wbAuslegung.Activate
wksANSI_Class_ASME_B16_34.Visible = True
With wksDruckTempStufen
.Visible = True
wksANSI_Class_ASME_B16_34.Range("O12:P12").Copy
.Range("E4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
wksANSI_Class_ASME_B16_34.Range("O8").Copy
.Range("E5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
wksANSI_Class_ASME_B16_34.Range("O9").Copy
.Range("E6").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End With
Application.CutCopyMode = False
wksANSI_Class_ASME_B16_34.Visible = False
wksDruckTempStufen.Visible = False
wksAuslegungRohr.Activate
wksAuslegungRohr.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
wbAuslegung.Protect Structure:=True, Windows:=False
Beenden:
'Einstellungen zur Beschleunigung der Makroausführung zurücksetzen
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcStatus
End With
'Variablen zurücksetzen
Set wbAuslegung = Nothing: Set wbZiel = Nothing
Set wksAuslegungRohr = Nothing: Set wksANSI_Class_ASME_B16_34 = Nothing
Set wksDruckTempStufen = Nothing: Set wksZiel = Nothing
End Sub

Anzeige
AW: Makro zum Kopieren von Daten zwischen 2 Dateien
15.05.2012 13:48:14
Daten
Hallo Franz,
vielen Dank für Deine Hilfe. Bis jetzt funktioniert alles tadellos.
Grüße
Eckart

157 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige