Registriert seit: 08.07.2016
Version(en): 2016
13.03.2017, 17:51
hi,
Daten innerhalb eines Workbooks zu kopieren geht ja einfach so:
Code: Worksheets("Tabelle1").Range("A6:A40").Value = Worksheets("Tabelle2").Range("A6:A40").Value
Dabei wird von Tabelle2 in Tabelle1 kopiert, wenn der Code ausgeführt wird.
Jetzt möchte ich jedoch von dem Workbook, welchesn in Tabelle2 in Feld D109 steht, Daten kopieren in Tabelle1. Dort auch wie zuvor aus Tabelle2. (Der Workbookname in Feld D109 lautet: [Wb1.xlsm]
Code: Worksheets("Tabelle1").Range("A6:A40").Value = Workbook("Tabelle2!D109").Worksheets("Tabelle2").Range("A6:A40").Value
Jedoch funktioniert der Code nicht: "Fehler beim Kompilieren: Sub oder Function nicht definiert"
Wo steckt der Fehler?
lieben Dank
Julia :)
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo Julia
Zitat:Code: Worksheets("Tabelle1").Range("A6:A40").Value = Workbook("Tabelle2!D109").Worksheets("Tabelle2").Range("A6:A40").Value
Vorsicht Vorsicht wenn du zwischen Mappen kopiert, wegen der Gefahr von Datenverlust!! Überschreiben der falschen Tabelle!
Natürlich kann man problemlos aus Mappen kopieren, aber Excel ist sehr penibel - in den Details-! Schauen wir uns deinen Code an.
Du kopierst in Tabelle1, sagst aber nicht um welches Workbook es sich handelt, ob es die Quelle oder die Ziel iMappe st! Dann wird in die Tabelle1 der Mappe kopiert, die i m Bildschirm aktiv ist. Und Excel fragt dich nicht, ob dir das gefaellt! So habe ich mir schon mehrfach Dateien zerschossen!
Du solltest den Namen der Ziel-Tabelle mit angeben, oder wenn das Makro in dier Ziel-Mappe ist "ThisWorkbbok.Worksheets("Tabelle")" davorstellen
2. Fehler ist hier, den hier sieht Excel den eingefügten Text als Datei Namen an Workbook("Tabelle2!D109")
Du solltest dir angewöhnen diese Namen vorher in eine Variable zu laden, und diese Varaible einsetzen: z.B. so: (externe Mappe, Wbook extern)
ExMappe oder WbEx oder Datei = ThisWorkbook.Worksheets("Tabelle2").Range("D109").Value
Dann sieht der fertige Code so aus:
ExMappe = ThisWorkbook.Worksheets("Tabelle2").Range("D109").Value
ThisWorkbook.Worksheets("Tabelle1").Range("A6:A40").Value = _
Workbook(ExMappe).Worksheets("Tabelle2").Range("A6:A40").Value
mfg Gast 123
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28
• o0Julia0o
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Julia,
ist die andere Datei offen?
Gruß Stefan
Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
13.03.2017, 23:07
(Dieser Beitrag wurde zuletzt bearbeitet: 13.03.2017, 23:07 von o0Julia0o.)
Nein, die andere Datei ist geschlossen. Könnte aber offen sein, evlt. auch. Aber im Normalfall geschlossen. Und danke euch beiden!
(13.03.2017, 18:40)Gast 123 schrieb: Vorsicht Vorsicht wenn du zwischen Mappen kopiert, wegen der Gefahr von Datenverlust!! Überschreiben der falschen Tabelle!
Natürlich kann man problemlos aus Mappen kopieren, aber Excel ist sehr penibel -in den Details-! Schauen wir uns deinen Code an.
Du kopierst in Tabelle1, sagst aber nicht um welches Workbook es sich handelt, ob es die Quelle oder die Ziel iMappe st! Dann wird in die Tabelle1 der Mappe kopiert, die im Bildschirm aktiv ist. Und Excel fragt dich nicht, ob dir das gefaellt! So habe ich mir schon mehrfach Dateien zerschossen! Hier ist das bereits bei mir der Fall, die Gefahr von Datenverlust?
Code: Worksheets("Tabelle1").Range("A6:A40").Value = Worksheets("Tabelle2").Range("A6:A40").Value
Meines erachtens heißt der Code soviel wie:
Kopiere A6:A40 von Tabelle2 in Tabelle1 A6:A40. Und zwar immer. Egal, welche Worksheet ich gerade angewählt habe.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Julia,
versuche es mal mit der Hilfe einer Funktion von Thomas Ramel.
Code: Sub prcHoleDaten()
Dim Pfad As String
Dim Dateiname As String
Dim Blatt As String
Dim Bereich As String
Dim Ziel As Range
Pfad = "L:\Eigene Dateien\Benutzer\Test\" 'Pfad anpassen!!!!!
Dateiname = Worksheets("Tabelle2").Range("D109").Text ' aus welcher Datei soll er holen?
Blatt = "Tabelle2" ' von welcher Tabelle soll er holen?
Bereich = "A6:A40" ' aus welchem Bereich soll er holen?
Set Ziel = Worksheets("Tabelle1").Range("A6") ' in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Daten importiert"
End If
'Worksheets("Tabelle1").Range("A6:A40").Value = Workbook("Tabelle2!D109").Worksheets("Tabelle2").Range("A6:A40").Value
End Sub
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, _
sourceSheet As String, _
SourceRange As String, _
TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
Dim strQuelle As String
Dim Zeilen As Long
Dim Spalten As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & _
Range(SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
vbExclamation, "Get data from closed Workbook"
GetDataClosedWB = False
End Function
Gruß Stefan
Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28
• o0Julia0o
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo
Zitat:Worksheets("Tabelle1").Range("A6:A40").Value = Worksheets("Tabelle2").Range("A6:A40").Value
Völlig korrekt, bei diesem Kopieren spielt es keine Rolle welches Blatt gerade aktiviert ist. Der Code funktioniert immer.
Bitte nur zu bedenken, er prüft nicht - in welcher Mappe dur gerade bist-, wenn mehrere Mappen geöffnet sind!
Auch damit, das ein Makro für Mappe A geschrieben war, aber Mappe B gerade aktiv geöffnet war, und es jetzt versehentlich in Mappe B ausgeführt wurde habe ich mir schon Daten zerstört! :Erfahrung ist halt die Summe aller dummen Fehler!
Macht nix solange man die Datei nicht speichert, flucht man im stillen, und - schliesst sie ungespeichert- zum Datenretten!!
mfg Gast 123
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
(14.03.2017, 12:46)Gast 123 schrieb: Auch damit, das ein Makro für Mappe A geschrieben war, aber Mappe B gerade aktiv geöffnet war, und es jetzt versehentlich in Mappe B ausgeführt wurde habe ich mir schon Daten zerstört!
Ich führe das Makro ja in der MappeA aus, somit ist MappaA aktiv. Wenn dann eine MappeB noch geöffnet ist, führt er das Makro dann in beiden Arbeitsmappen aus? Wie kann ich das verhindern?
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Julia,
versuche es mal mit ActiveWorkbook bzw. ThisWorkbook vor dem Worksheets. Wo was hingehört, darfst Du dir selber überlegen.
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 12.03.2016
Version(en): Excel 2003
Hallo Julia
ein bisschen eigenes Nachdenken und probieren schadet bestimmtnicht. Wenn du dann garnicht mehr weiter kommst benenne uns bitte die Datei Namen der Mappen, von wo nach wo du kopieren willst, welche Mappe/Tabelle Quelle ist, und welche Ziel ist, stelle den Code den du schon erarbeitetest hast ins Forum, dann können wir ihn prüfen, und ggf.korrigieren.
mfg Gast 123
Registriert seit: 08.07.2016
Version(en): 2016
18.03.2017, 23:58
(Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2017, 00:04 von o0Julia0o.)
(13.03.2017, 18:40)Gast 123 schrieb: Dann sieht der fertige Code so aus:
Sub KopieVonExtern()
ExMappe = ThisWorkbook.Worksheets("Tabelle2").Range("D109").Value
ThisWorkbook.Worksheets("Tabelle1").Range("A6:A40").Value = _
Workbook(ExMappe).Worksheets("Tabelle2").Range("A6:A40").Value
End Sub Egal, ob ich das Workbook offen habe, welches in Tabelle2 in D109 steht, oder nicht. Ich erhalte folgenden Fehler:
"Fehler beim Kompilieren: Sub or Function nicht definiert" Dabei wird "Wokbook" markiert. Und "Sub KopieVonExtern()" wird gelb marktiert. Der Workbookname in Feld D109 lautet: [Wb1.xlsm]
Die Datei ist geöffnet(auch wenn sie geschlossen ist funktioniert es nicht) und es gibt dort Tabelle1, wo sich auch Zahlen in den Feldern A6:A40 befinden. Die Datei ist auch stets im gleichen Ordner wie die Hauptdatei.
(14.03.2017, 07:17)Steffl schrieb: versuche es mal mit der Hilfe einer Funktion von Thomas Ramel.
Code: [...]
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, _
sourceSheet As String, _
SourceRange As String, _
TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
Dim strQuelle As String
Dim Zeilen As Long
Dim Spalten As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & _
Range(SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
vbExclamation, "Get data from closed Workbook"
GetDataClosedWB = False
End Function
So sieht mein Code dann aus:
Code: Sub prcHoleDaten()
Dim Pfad As String
Dim Dateiname As String
Dim Blatt As String
Dim Bereich As String
Dim Ziel As Range
Pfad = ThisWorkbook.Path 'Die von der zu kopierenden Datei liegt stets im gleichen Verzeichnis, wie die Hauptdatei
Dateiname = Worksheets("Tabelle2").Range("D109").Text ' In D109 steht: [Wb1.xlsm] Die Datei heißt: Wb1.xlsm. Auch mit D108 probiert, wo Wb1.xlsm als Zellinhalt steht.
Blatt = "Tabelle2" ' von welcher Tabelle soll er holen?
Bereich = "A6:A40" ' aus welchem Bereich soll er holen?
Set Ziel = Worksheets("Tabelle1").Range("A6") ' in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Daten importiert"
End If
'Worksheets("Tabelle1").Range("A6:A40").Value = Workbook("Tabelle2!D109").Worksheets("Tabelle2").Range("A6:A40").Value
End Sub
Auch bei dieser Variante funktioniert es nicht. Egal, ob ich das Workbook offen habe, welches in Tabelle2 in D109 steht, oder nicht. Ich erhalte folgenden Fehler:
"Fehler beim Kompilieren: Sub or Function nicht definiert" Dabei wird "GetDataClosedWB" markiert. Und "Sub KopieVonExtern()" wird gelb marktiert. Der Workbookname in Feld D109 lautet: [Wb1.xlsm]. Jedoch auch mal mit Wb1.xlsm probiert. Die Datei ist geöffnet(auch wenn sie geschlossen ist funktioniert es nicht) und es gibt dort Tabelle1, wo sich auch Zahlen in den Feldern A6:A40 befinden. Die Datei ist auch stets im gleichen Ordner wie die Hauptdatei.
Die Zeile:
Code: Dateiname = Worksheets("Tabelle2").Range("D109").Text
Auch mal geändert in:
Code: Dateiname = Worksheets("Tabelle2").Range("D109")
Hilft alles nichts. Quasi immer der gleiche Fehler wie auch bei Gast 123st Idee.
Julia :)
|