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

Best. Bereich kopieren aus geschl. Datei

Best. Bereich kopieren aus geschl. Datei
17.04.2020 15:54:37
Bernd
Hallo Zusammen,
ich möchte folgendes Makro (Quelle https://www.excel-inside.de/beispiele_vba/vba-workbooks-datei/947-daten-aus-geschlossener-arbeitsmappe-auslesen)
verfeinern,
Hier das zu verfeinernde Makro...

Sub Bereich_auslesen()
'** Dimensionierung der Variablen
Dim pfad As String, datei As String, blatt As String, bereich As Range, zelle As Object
'** Angaben zur auszulesenden Zelle
pfad = "F:\Excel\Beispiele"
datei = "geschlossene Mappe2.xls"
blatt = "Tabelle1"
Set bereich = Range("A1:B10")
'** Bereich auslesen
For Each zelle In bereich
'** Zellen umwandeln
zelle = zelle.Address(False, False)
'** Eintragen in Bereich
ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
Next zelle
End Sub

indem in der Datei "geschlossene Mappe2.xls" zunächst ein mit Zahlen befüllter Bereich gesucht wird, der wie folgt definiert ist:
Suche die letzten n = 25 Zeilen der Spalten A bis F, die mit Zahlen befüllt sind
Es kann in der Spalte A gesucht werden ab der Zelle A10 bis zu der Zelle, die nicht mehr befüllt ist und dann der Range markiert werden, der aus der nicht geöffneten Datei zu kopieren ist.
Hier der vba-code, den ich verwende, wenn die Datei(en) geöffnet werden, was viel zu lange dauert, da die Dateien recht groß sind.
k = 10 'die Suche soll in Zelle A10 beginnen!
Do
k = k + 1
Loop Until wks_1.Cells(k, 1).Value = "" ' die erste leere Zelle suchen
k_Ende = k - 1
k_Anfang = k - 1 - 25 'n ist zum Beispiel 25
' Folgender Range soll dann in der nicht geöffneten Arbeitsmappe kopiert werden
Range(Cells(k_Anfang, 1), Cells(k_Ende, 6)).Select
Wie baue ich diese Suche nach dem Range der letzten 25 Zahlenreihen in den Spalten A bis F in das obere Makro "Bereich_auslesen()" ein?
Besten Dank vorab für den Support in dieser kniffeligen Sache...
Bernd

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

Betreff
Datum
Anwender
Anzeige
AW: Best. Bereich kopieren aus geschl. Datei
17.04.2020 22:45:26
onur
Statt der Quelle deines Codes (wen interessiert das überhaupt, wo du den her hast ?) hättest du mal deine Datei posten sollen.
Was sollen wir den mit deinem Code ohne die Datei?
Sollen wir sie denn nachbauen, nur um dir helfen zu dürfen ?
AW: Best. Bereich kopieren aus geschl. Datei
19.04.2020 16:39:48
Bernd
Hallo Onur,
du hast RECHT -Punkt! und entschuldige...
Hier die Beispieldateien.
Achtung: da ich sehr wenig Ahnung von vba habe, habe ich den Originalcode der Makros so belassen, d.h. wenn das Makro der Beispieldatei gestartet wird, dann werden aus der Testdatei 136862.xls die Daten aus den Zellen A1 bis B10 in die Datei "136863.xlsm" geschrieben.
https://www.herber.de/bbs/user/136862.xls ist die Testdatei, aus der geschlossen die letzten 25 Zeilen ausgelesen werden sollen in den Spalten A bis G.
https://www.herber.de/bbs/user/136863.xlsm ist die Datei, in die die Daten aus den letzten 25 Zeilen der Spalten A bis G eingelesen werden sollen ab der Zelle B10. In dieser Datei sind auch die Makros enthalten, die modifiziert werden sollen, um in der Datei 136862 die Daten entsprechend zu suchen.
Ich hoffe, jetzt wird mein Problem klarer..
Besten Dank vorab
Bernd
Anzeige
AW: Best. Bereich kopieren aus geschl. Datei
17.04.2020 23:34:28
volti
Hallo Bernd,
ich weiß, Du wolltest eigentlich eine Verfeinerung Deines Makros haben.
Ich biete Dir aber jetzt trotzdem mal alternativ die nachfolgende Variante einer Kopie aus einer "geschlossenen" Datei an.
Da Du Daten im Block kopiert haben möchtest bietet sich auch eine einmalige Übernahme der Daten an, anstatt sie in einer Schleife zu übernnehmen.
Die Übernahme Deines Makros erfolgt über Formelbildung via Excel4Makro, eine sicherlich schnelle aber m.E. hier nicht verwendbare Methode, da Du ja dynamisch die letzten 25 Zeilen haben möchtest.
Zur Ermittlung der Zeilenanzahl in der Quelldatei müsste diese ohnenhin erst mal geöffnet werden.
Außerdem wird durch die ständige Prüfung auf vorhanden sein der Quelldatei im Makro GetValue auch Zeit verbraten.
Ich denke, nachstehender Code ist in Punkto Schnelligkeit der Formelvariante ebenbürtig...
Probiere es einfach mal aus:
PS: Dieser Code ersetzt Dein Makro und auch die GetValue-Funktion komplett.

Option Explicit
Sub Bereich_auslesen()
'** Dimensionierung der Variablen
 Dim sPfad As String, sDatei As String, sBlatt As String
 Dim WShZ As Worksheet, sZiel As String
 Dim iZeile As Long, sBer As String
'Quelldaten angeben
 sPfad = "F:\Excel\Beispiele"
 sDatei = "geschlossene Mappe2.xls"
 sBlatt = "Tabelle1"
'Zieldaten angeben
 Set WShZ = ActiveSheet         'Ggf. auch anderes Blatt angeben
 sZiel = "$C$6"
'Exceldatei im Hintergrund öffnen und Wert holen
 If Right$(" " & sPfad, 1) <> "\" Then sPfad = sPfad & "\"
 On Error GoTo Fehler
 With GetObject(PathName:=sPfad & sDatei)
   With .Sheets(sBlatt)
     iZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
     If iZeile < 26 Then iZeile = 26
     sBer = "$A$" & iZeile - 25 & ":$F$" & iZeile
    WShZ.Range(sZiel).Resize(25, 6).value = .Range(sBer).value
   End With
   .Close SaveChanges:=False
 End With
Fehler:
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Best. Bereich kopieren aus geschl. Datei
19.04.2020 15:41:40
Bernd
Hallo Karl-Heinz,
vielen Dank für den Code.
Ich habe folgende Probleme mit dem Code:
1.) Die Datei wird nicht immer geöffnet. Wenn ich die Datei mit dem vba Code öffnen und das Makro schrittweise laufen lasse, wir die Datei geöffnet und sofort wieder geschlossen und zwar in der Zeile
2.) wenn ich das Makro dann ein zweites Mal laufen lassen schrittweise, dann öffnet das Makro die Datei gar nicht mehr, so als ob die Datei gar nicht vorhanden wäre, was aber nicht der Fall ist...?
Ganz komisch...
With GetObject(PathName:=sPfad & sDatei)
Daraus folgt,wenn die Datei sofort wieder geschlossen wird, dann findet er natürlich auch nicht die letzten 25 Werte...
Hoffe, du kannst mir weiterhelfen. Ich lade noch eine Beispieldatei gleich hoch...
BG
Bernd
Anzeige
AW: Best. Bereich kopieren aus geschl. Datei
19.04.2020 16:41:49
Bernd
Hallo Karlheinz,
ich habe jetzt im Beitrag zwei Beispieldateien hochgeladen...
Vielleicht kannst du ja mal dein Marko kurz testen, in dem du es in die eine Beispieldatei reinkopierst und die Pfade/Datei- und Tabellennamen eingibst...
Besten Dank
Bernd
AW: Best. Bereich kopieren aus geschl. Datei
19.04.2020 18:47:39
volti
Hallo Bernd,
hier hast Du Deine Datei zurück. Ich habe das angepasste Makro dort reinkopiert und auch einen Startbutton für die Aktualisierung angebracht.
Es funktioniert bei mir soweit ganz gut und fehlerfrei.
Ich wusste nicht, dass Du mit einer alten XLS-Datei (65535 Zeilen max) arbeitest. Offensichtlich hat der LetzteZeile- Befehl damit ein Problem gehabt, ist abgestürzt und hat die Datei nicht geschlossen.
Im neuen Makro ist jetzt auch etwas mehr Sicherheit eingebaut.
Probiere es einfach noch mal aus. Ggf. noch mal schauen, ob die Bereiche so stimmen. In der Datei geht es bis Spalte $G und auch erst ab Zeile 10 los. Das war im ersten Beitrag irgendwie anders.
DatenübernahmeAusGeschlossenerDatei.xlsm
PS: PFad bitte anpassen. Habe ich vergessen, will aber nicht noch mal neu hochladen.
viele Grüße
Karl-Heinz
Anzeige
AW: Best. Bereich kopieren aus geschl. Datei
19.04.2020 19:57:45
Bernd
Hallo Karl-Heinz,
vielen, vielen Dank für deine Mühe - das Makro funktioniert super.
Learning...nächstes Mal lade ich gleich Beispieldateien hoch...dann passieren weniger Mißverständnisse
Beste Grüße
Bernd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige