Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA:Zellen (Werte) kopieren ohne Datei zu öffnen

VBA:Zellen (Werte) kopieren ohne Datei zu öffnen
16.12.2005 01:43:32
Atti
Hallo Excelfreunde.
Ich habe ein Problem bei dem ihr mir vielleicht helfen könnt.
Ich möchte gerne Daten aus einer anderen Excel per Makro aus einer anderen Excel-Tabelle kopieren. Das Problem liegt jetzt aber darin, dass ich die andere Excel-file nicht öffnen möchte. Ich habe es bereits über Query versucht, aber irgendwie will es nicht klappen (wahrscheinlich weil die Quelldatei von anderen Computern geändert wird).
Danke für eure Hilfe
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffnen
16.12.2005 06:37:22
WernerB.
Hallo Atti,
vielleicht kannst Du ja damit etwas anfangen:
- In diesem Beispiel bleibt die Quell-Mappe geschlossen.
- In diesem Beispiel liegen Quell- und Zielmappe im gleichen Verzeichnis.

Sub AuslesenGeschlDatei()
Dim rng As Range, _
sFile As String, sPath As String, _
oldStatusBar As Boolean
Application.ScreenUpdating = False
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
sFile = "quelle.xls"
sPath = ThisWorkbook.path & "\"
Application.StatusBar = "Daten werden importiert. Bitte warten..."
With Sheets(1)
.Range("A1:E100").Formula = "='" & sPath & "[" & sFile & _
"]Tabelle1'!A1:E100"
Set rng = .Range("A1:E100")
End With
rng.Cells(1).Copy rng
rng.Value = rng.Value
Application.ScreenUpdating = True
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
End Sub

Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
16.12.2005 09:16:05
Atti
Hallo Werner.
Danke für die schnelle Antwort. Ich werde es jetzt mal ausprobieren und mich später mal wieder melden.
Grüße
Atti
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
16.12.2005 09:51:38
Atti
Danke. Ich glaub, dass ich den code sehr gut gebrauchen kann.
Ich müsste da wohl aber noch ein bisschen was ändern. Könntest du mir vielleicht ein paar Kommentare dazuschreiben?
Ich möchte versuchen es so zu erweitern, dass es dynamisch die Werte kopiert. Also nicht A1:E100 sondern alles was in der Tabelle drin ist und nicht mehr.
Wenn das kopieren aber allgemein zu lange dauern sollte, weil die Tabelle zu groß ist möchte ich versuchen nur eine bestimmte Anzahl von Reihen kopieren zu lassen. Dann könnte ich die Tabelle Abschnittsweise auktualisieren lassen.
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
16.12.2005 12:18:14
WernerB.
Hallo Atti,
da kann ich Dir leider nicht weiter helfen.
Meines Wissens kann man den beschriebenen Bereich eines Tabellenblattes in einer geschlossenen Datei nicht ermitteln; dazu müsste sie schon geöffnet werden - was Du ja nicht möchtest.
Gruß
WernerB.
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffnen
16.12.2005 08:12:21
egon
Hallo!
Tschuldigung dass ich mich da dran hänge:
Habe den Code für mich nutzen können.
Wie könnte man da noch die Passwortabfrage reinbringen damit ohne
umständliche Eingabe des Passwortes die Daten geholt werden können.
Schönen Gruß
Egon
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffnen
16.12.2005 12:22:41
WernerB.
Hallo Egon,
da kann ich Dir leider auch nicht weiter helfen.
Wenn die Datei einen Leseschutz hat, muss sie möglicherweise erst geöffnet werden.
Da ich dies aber nicht konkret weiss, stelle ich Deine Frage auf "offen".
Gruß
WernerB.
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
19.12.2005 07:15:49
Atti
Hallo.
Da bin ich wieder. Ich habs mittlerweile eingesehen, dass es nicht möglich ist die Zellen mit Inhalt in eine andere xls-Datei zu speichern, ohne die quelldatei zu öffnen.
Also hab ich mich jetzt daran gesetzt und versuche gerade mit dem öffnen der File zu kopieren, aber ich stoß da auf ein Problem.
Ich muss erst mal alles löschen, Quelldatei öffnen, die Zellen mit Inhalt kopieren, in die Zieldatei die "Werte" einfügen, und erst dann kann ich die Quelldatei schließen.
Gibt es da einen Befehl, der die Werte aus der Quelldatei direkt in die Zieldatei kopiert, so dass ich dass Fenster danach sofort schließen kann?
(Vielleicht zur Vereinfachung: Quell und Zieldatei sind im selben Verzeichnis)
So sieht es bisher aus:

Sub copy()
Dim lngActiveRowB As Long
lngActiveRowB = ActiveCell.Row
Application.StatusBar = lngLastRowB
Cells.Select
Selection.ClearContents
Workbooks.Open Filename:= _
"...\Quelle.XLS" _
, ReadOnly:=True, Notify:=False
Windows("Quelle.XLS").Activate
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.copy
Windows("Ziel.xls").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Quelle.XLS").Activate
Application.CutCopyMode = False
ActiveWindow.Close (0)
Windows("Ziel.xls").Activate
Application.CutCopyMode = False
'select row
ActiveSheet.Cells(lngActiveRowB, 1).EntireRow.Select
End Sub

Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 03:57:48
Reinhard
Hi Atti,
Öffne die Quelldatei einmalig und dann im Editor, Doppelklick auf DieseArbetsmappe, folgendewn 3Zeiler reunkopieren ubnd Quelldatei schliessen:

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Tabelle2").Range("a1") = Worksheets("Tabelle1").Range("A65536").End(xlUp).Row
End Sub

Nachfolgenden Code dann in ein Modul deiner Zieldatei. Ich ölasse die Frage noch offen.
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen.
Option Explicit
Sub AuslesenGeschlDatei()
Dim rng As Range, sFile As String, sPath As String, oldStatusBar As Boolean
Dim zei As Long
Application.ScreenUpdating = False
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
sFile = "quelle.xls"
sPath = ThisWorkbook.Path & "\"
Application.StatusBar = "Daten werden importiert. Bitte warten..."
With Sheets(1)
.Range("A1").Formula = "='" & sPath & "[" & sFile & "]Tabelle2'!A1"
zei = Range("A1").Value
.Range(Cells(1, 5), Cells(zei, 5)).Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!A1:E" & zei
Set rng = .Range("A1:E" & zei)
End With
rng.Cells(1).Copy rng
rng.Value = rng.Value
Application.ScreenUpdating = True
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
End Sub

Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 04:36:25
Atti
Hallo Reinhard.
Danke für den code, aber ich bekomm eine Fehlermeldung bei
zei = Range("A1").Value
Vielleicht deswegen, weil da keine Zahl drin steht?
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 04:49:26
Reinhard
Hi Atti,
probier mal
zei = .Range("A1")
Wenn weiter Fehler, was steht denn in A1 von Tabelle2 von der Quelldatei und was in Zelle A1 wenn die Codezeile kommt?
Tipp, Maus beliebig in den Code stellen, dann F8...
Jetzt kannst du mit der Maus über zei fahren und siehst ihren Wert
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen.
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 05:53:27
Atti
Hallo
Ich habe die Zeile geändert und das Programm schrittweise durchlaufen.
In A1 der Quelldatei steht "JN/CTD".
Das wird dann auch noch in die Zieldatei übernommen.
zei=0 wenn der Befehl kommt.
Oder soll ich doch was anderes nachschauen?
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 06:02:46
Reinhard
Hi Atti,
ich meine A1 von Tabelle2 der Quelldatei, da steht keine Zahl? Aber in dem 3 Zeiler Code, wird Excel angewiesen die zeilenanzahl der Spalte A des ersten Blattes in A1 von tabelle 2 zu schreiben.
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen.
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 06:17:56
Atti
Oh es tut mir leid.
Ich hab den Quellcode in die Zieldatei geschrieben.
Der 3zeiler ist jetzt drin.
Ist es richtig, dass dort einmal Tebelle2 und einmal Tabell1 steht?
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 06:22:25
Reinhard
Hi Atti,
ja das ist richtig, ist ja der Sinn der Zeile.
Aber der 3Zeiler soll in den Code von "DieseArbeistmappe" der Quelldatei nicht der Zieldatei.
In einem Modul der Zieldatei steht der lange Code
Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen.
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 06:22:06
Atti
Oh, hab eben festgestellt, dass ich speichern musste.
In A1 der Quelldatei (Ich hab da nur eine Tabelle) steht jetzt eine Zahl. Die Anzahl der Reihen, die was enthalten
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
21.12.2005 06:50:54
Atti
Hallo Reinhard.
Ich habe jetzt 2 neue Dateien auf dem Desktop erstellt und mit diesn getestet.
Dann ging es komischerwese reibungslos.
Die Daten wurden alle kopiert.
Nur irgendwie kann ich das nicht auf die originaldateien übertragen.
Ich schau mal und dann melde ich mich noch mal.
Gruß
Atti
p.s.: Bisher schon mal vielen vielen Dank
Anzeige
AW: VBA:Zellen (Werte) kopieren ohne Datei zu öffn
22.12.2005 04:17:56
Atti
Hallo. Ich habe nicht verstanden, wieso ich bei deinem Programm ständig Probleme mit den Formatierungen hatte. Ich habe bedingte Formatierungen mit drin. Vielleicht war dies der Grund, wieso das Kopieren nicht ganz geklappt hat.
Deswegen habe ich versucht dein Programm umzustricken und es funtioniert jetzt, glaube ich. Hier das Programm, und vielen Dank für deine Hilfe!!!
Beschäftige mich jetzt mittlerweile seit 2Monaten damit, aber immer nur stückchenweise und bin noch hinzukommend in Singapur ...
Alles etwas stressig. Wenn ich die Dateien mit den bedingten Formatierung und einer Beschreibung des Programms Posten soll, sag bescheid, denn die Mühe die du gegeben hast, kann ich ja auch zurückgeben.
Gruß
Atti
----------------------------------------------------------------------------------------------------------
Option Explicit

Sub AuslesenGeschlDatei()
Dim rng As Range, sFile As String, sPath As String, oldStatusBar As Boolean
Dim zei As Long
Application.ScreenUpdating = False
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
sFile = "Quelle.xls"
sPath = ThisWorkbook.Path & "\"
Application.StatusBar = "Daten werden importiert. Bitte warten..."
With Sheets(1)
.Range("E1").Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!E1" 'zei=A1
zei = Range("E1").Value
'Kopieren der Datein ("A1:A" &zei) SpalteA!
.Range(Cells(2, 1), Cells(zei, 1)).Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!A1:D" & zei
'Kopieren der SpalteB!
.Range(Cells(2, 2), Cells(zei, 2)).Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!A1:D" & zei
'Kopieren der SpalteC!
.Range(Cells(2, 3), Cells(zei, 3)).Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!A1:D" & zei
'Kopieren der SpalteD!
.Range(Cells(2, 4), Cells(zei, 4)).Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!A1:D" & zei
End With
Application.ScreenUpdating = True
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
End Sub

----------------------------------------------------------------------------------------------------------
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Zellen kopieren ohne Datei zu öffnen


Schritt-für-Schritt-Anleitung

Um Daten aus einer anderen Excel-Datei zu kopieren, ohne diese zu öffnen, kannst Du den folgenden VBA-Code verwenden. Dieser Code bleibt in der Zieldatei und importiert die Daten dynamisch:

Sub AuslesenGeschlDatei()
    Dim rng As Range, sFile As String, sPath As String, oldStatusBar As Boolean
    Dim zei As Long
    Application.ScreenUpdating = False
    oldStatusBar = Application.DisplayStatusBar
    Application.DisplayStatusBar = True
    sFile = "quelle.xls" ' Name der Quelldatei
    sPath = ThisWorkbook.Path & "\"
    Application.StatusBar = "Daten werden importiert. Bitte warten..."
    With Sheets(1)
        .Range("E1").Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!E1" ' Zelle für die Zeilenzahl
        zei = Range("E1").Value
        ' Bereich A1:D zeilenweise kopieren
        .Range(Cells(2, 1), Cells(zei, 4)).Formula = "='" & sPath & "[" & sFile & "]Tabelle1'!A1:D" & zei
    End With
    Application.ScreenUpdating = True
    Application.StatusBar = False
    Application.DisplayStatusBar = oldStatusBar
End Sub

Dieser Code ermöglicht es Dir, die Daten aus einer geschlossenen Datei zu importieren. Stelle sicher, dass die Quelldatei im gleichen Verzeichnis wie die Zieldatei liegt.


Häufige Fehler und Lösungen

  1. Fehler bei der Zeilenanzahl
    Wenn Du eine Fehlermeldung erhältst, dass die Zeile nicht gefunden werden kann, überprüfe, ob die Zelle, die die Zeilenzahl enthält, korrekt referenziert ist. Es sollte in der Quelldatei eine Zahl stehen.

  2. Datei nicht gefunden
    Stelle sicher, dass der Dateiname und der Pfad zur Quelldatei korrekt angegeben sind. Achte auf Groß- und Kleinschreibung.

  3. Formel wird nicht aktualisiert
    Wenn die Formeln in der Zieldatei nicht aktualisiert werden, überprüfe, ob die Datei geschlossen ist, bevor Du den Import ausführst.


Alternative Methoden

Eine andere Methode, um Daten aus einer geschlossenen Excel-Datei zu importieren, ist die Verwendung von Power Query. Hierbei kannst Du Daten direkt aus einer Excel-Datei abrufen, ohne die Datei zu öffnen. Dies ist besonders nützlich, wenn Du regelmäßig Daten importieren möchtest.

  1. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Arbeitsmappe.
  2. Wähle die Datei aus und lade die gewünschten Tabellen, ohne die Datei zu öffnen.

Praktische Beispiele

Ein einfaches Beispiel für das Kopieren von Werten aus einer geschlossenen Datei könnte folgendermaßen aussehen:

Sub WerteKopieren()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rng As Range

    ' Quelldatei öffnen
    Set wb = Workbooks.Open("C:\Pfad\zu\deiner\datei.xlsx", ReadOnly:=True)
    Set ws = wb.Sheets(1)

    ' Werte kopieren
    Set rng = ws.Range("A1:A10")
    rng.Copy

    ' Zieldatei aktivieren und einfügen
    ThisWorkbook.Activate
    ThisWorkbook.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues

    ' Quelldatei schließen
    wb.Close savechanges:=False
End Sub

In diesem Beispiel wird die Quelldatei geöffnet, eine bestimmte Range kopiert und die Werte in die aktive Zieldatei eingefügt.


Tipps für Profis

  • Verwende Named Ranges: Statt die Zellen direkt zu referenzieren, kannst Du benannte Bereiche nutzen, um die Wartbarkeit des Codes zu erhöhen.
  • Fehlerbehandlung einfügen: Implementiere eine Fehlerbehandlung in Deinem VBA-Code, um unerwartete Fehler abzufangen und zu protokollieren.
  • Performance optimieren: Deaktiviere die Bildschirmaktualisierung und Statusleiste während des Imports, um die Performance zu verbessern, wie im obigen Code gezeigt.

FAQ: Häufige Fragen

1. Kann ich Daten aus mehreren Zellen gleichzeitig kopieren?
Ja, Du kannst einen Bereich definieren (z.B. Range("A1:E100")), um mehrere Zellen auf einmal zu kopieren.

2. Was passiert, wenn die Quelldatei nicht vorhanden ist?
Der Code wird eine Fehlermeldung ausgeben, wenn die Quelldatei nicht gefunden wird. Achte darauf, den Dateipfad korrekt anzugeben.

3. Wie kann ich die Daten aus einer passwortgeschützten Datei importieren?
Für passwortgeschützte Dateien musst Du zuerst die Datei mit dem Passwort öffnen, was zusätzliche Programmierung erfordert. In solchen Fällen kann der Workbooks.Open Befehl mit dem Passwortparameter verwendet werden.

Durch die Anwendung dieser Methoden und Tipps kannst Du effektiv Daten aus einer anderen Excel-Datei kopieren, ohne die Datei zu öffnen. Verwende die bereitgestellten VBA-Skripte, um Deine Arbeit zu automatisieren und Zeit zu sparen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige