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

Funktion Datei auslesen

Funktion Datei auslesen
28.04.2016 10:12:26
nikelwerner
Hallo Leute,
habe eine Funktion geschrieben, der ein Pfad als Parameter als Quelldatei übergeben werden soll und dann ein bestimmter bereich daraus gelesen und in meine Zieldatei geschrieben werden soll...
hier der Code
__________________________________________________

Public Sub DateienAuslesen3(ByVal pfad As String)
Dim Ziel As Worksheet
Dim Quelle As Worksheet
Application.ScreenUpdating.Updating = False
Set Ziel = ActiveWorkbook.ActiveSheet
Set Quelle = Workbooks.Open(Filename:=pfad).Worksheets(1)
Quelle.Range(Cells(40, 4), Cells(40, 72)).Copy
Ziel.Range(Cells(40, 4), Cells(40, 72)).Select
Sheets(ActiveSheet).Cells(ActiveRange).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone,   _
_
SkipBlanks:=False, Transpose:=False
Sheets(ActiveSheet).Cells(ActiveRange).PasteSpecial Paste:=xlPasteValues
Quelle.Parant.Close
Set Quelle = Nothing
Set Ziel = Nothing
End Sub

______________________________________________
Wenn ich die FUnktion allerdings in eine Zelle schreibe und den entsprechenden Pfad einfüge scheint die Funktion nicht zu funktionieren und in der ausgewählten Zelle steht lediglich:
"#WERT!"
Habt Ihr eine Idee woran das liegen könnte?
Danke und liebe Grüße :)

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

Betreff
Datum
Anwender
Anzeige
AW: Funktion Datei auslesen
28.04.2016 10:23:52
Michael
Hallo!
Ohne auf Deinen Code konkret einzugehen...
habe eine Funktion geschrieben
Nein, hast Du nicht. Du hast eine Sub-Routine geschrieben, eine Funktion wäre
Function DatenAuslesen(...)
'... Code
End Function
Wenn ich die FUnktion allerdings in eine Zelle schreibe... steht lediglich: "#WERT!"
Weil es eben aktuell noch keine (aufrufbare) Funktion ist. Siehe oben.
Ändere den Prozedurrahmen einmal auf eine Function, wie oben beschrieben, und schaue dann, ob's klappt. Wenn nicht könnte es natürlich am Code innerhalb der Funktion liegen.
LG
Michael

Anzeige
AW: Funktion Datei auslesen
28.04.2016 10:38:27
nikelwerner
Hallo
Mein Fehler.. hatte es schon zur Funktion abgeändert aber ausversehen die ältere Version reingeschrieben...
Dementsprechend sieht die Funkiton bei mir so aus:
Public Funtcion DateienAuslesen3(ByVal pfad As String)
Dim Ziel As Worksheet
Dim Quelle As Worksheet
Application.ScreenUpdating.Updating = False
Set Ziel = ActiveWorkbook.ActiveSheet
Set Quelle = Workbooks.Open(Filename:=pfad).Worksheets(1)
Quelle.Range(Cells(40, 4), Cells(40, 72)).Copy
Ziel.Range(Cells(40, 4), Cells(40, 72)).Select
Sheets(ActiveSheet).Cells(ActiveRange).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
_
SkipBlanks:=False, Transpose:=False
Sheets(ActiveSheet).Cells(ActiveRange).PasteSpecial Paste:=xlPasteValues
Quelle.Parant.Close
Set Quelle = Nothing
Set Ziel = Nothing
End Function
Fehler bleibt allerdings leider der gleiche aber trotzdem Danke schon mal für die schnelle Antwort

Anzeige
Diese Aktionen sind einer udFkt in einer ZellFml …
28.04.2016 11:09:21
Luc:-?
nicht gestattet, Werner!
Gruß, Luc :-?
Besser informiert mit …

AW: Funktion Datei auslesen
28.04.2016 11:09:53
Michael
Hallo!
Hab jetzt doch in Deinen Code geschaut: Das ist so nicht möglich.
Eine Funktion gibt einen Wert zurück; Du willst hier einen Kopiervorgang im Blatt über eine Funktion lösen, eine Aufgabe, die eben sonst eine Sub-Prozedur übernimmt.
Also doch zurück zur Sub...End Sub. Allerdings: Dein Code kann auch in einer Sub-Routine nicht funktionieren. Du hast da einige Konstruktionen, die es schlicht nicht gibt, bspw.:
- Application.ScreenUpdating.Updating = False
- Quelle.Parant.Close
?
Ich würde es ja so schreiben:
Sub DateiAuslesen()
'Dateipfad und Zellbereich könnten auch als Parameter
'übergeben werden
'----- Anpassen ab hier -----
Const Pfad As String = "C\DeinPfad\DeineDatei.xlsx"
Const ZellBereich As String = "D40:BT40"
'----- Anpassen bis hier -----
Dim QuellMappe As Workbook
Dim QuellBlatt As Worksheet
Dim ZielMappe As Workbook
Dim ZielBlatt As Worksheet
Application.ScreenUpdating = False
Set ZielMappe = ThisWorkbook
Set ZielBlatt = ZielMappe.ActiveSheet
Set QuellMappe = Workbooks.Open(Pfad)
Set QuellBlatt = QuellMappe.Worksheets(1)
QuellBlatt.Range(ZellBereich).Copy
ZielBlatt.Range(ZellBereich).PasteSpecial xlPasteValues
ZielBlatt.Range(ZellBereich).PasteSpecial xlPasteFormats
QuellMappe.Close False
Set QuellBlatt = Nothing
Set QuellMappe = Nothing
Set ZielBlatt = Nothing
Set ZielMappe = Nothing
With Application
.ScreenUpdating = True
.CutCopyMode = False
End With
End Sub
LG
Michael

Anzeige
AW: Funktion Datei auslesen
28.04.2016 14:14:23
nikelwerner
Achso alles klar :D
kann ich den Pfad ganz normal als Parameter übergeben wie bei der Funktion?
Und wie kann ich die Prozedur dann in einer Zelle aufrufen? Es geht nämlich um mehrere Dateien die in eine eingelsen werden müssen..deshalb würde ihc gern immer rechts von der Zelle wo die Prozedur aufgerufen wird die Werte hinkopieren und auf Knopfdruck auch alles aktualisieren können...
geht das? Danke :)

AW: Funktion Datei auslesen
28.04.2016 15:30:30
Michael
Hallo!
Achso alles klar
Scheint mir nicht so!
Du solltest Code und Hinweise, die Dir gegeben werden, auch lesen!
Zu kann ich den Pfad ganz normal als Parameter übergeben wie bei der Funktion?
steht in meinem Kommentar 'Dateipfad und Zellbereich könnten auch als Parameter übergeben werden
Und wie kann ich die Prozedur dann in einer Zelle aufrufen?
Wie Luc bzw. ich Dir geschrieben haben: Was Du machen willst, lässt sich nicht als Zellfunktion ausführen. Du musst dieses Makro also anderweitig aufrufen (zB durch eine Schaltfläche, oder ein Zell-Ereignis...)
Es geht nämlich um mehrere Dateien
Davon war nie die Rede; wenn Du schon merkst, dass Du eigentlich nicht weißt, wie ein Problem zu lösen ist, warum zeigst Du uns nicht von Anfang an ALLE Details und KONKRETEN Verhältnisse, damit wir Dir entsprechenden Code zur Verfügung stellen können?
Hierzu musst Du (vermutlich) zellenweise in einer Schleife abarbeiten; aber das schreibe ich erst, wenn ich genau weiß, dass die Sache dann erledigt ist. Sonst dauert dieser Faden bis morgen! Zeig also bitte eine Beispieldatei (Ausgangslage und beispielhafte Zielsetzung).
LG
Michael

Anzeige
AW: Funktion Datei auslesen
28.04.2016 16:38:22
Michael
Hallo!
Weil ich ja nicht so bin... Falls das dies Deinen Verhältnissen entspricht:
Tabelle2

 ABCDEFGHIJ
1DateilisteKopierbereich Kopierte Daten ab Spalte D… (zeilenweise)      
2MeineDatei.xlsxA5:D5 LoremLoremLoremLorem   
3AndereDatei.xlsxB6:H10 ipsumipsumipsumipsumipsumipsumipsum
4NeueDatei.xlsxC2:F2 dolordolordolordolor   
5          

...kann das folgendes Makro bewerkstelligen (die Parameter Dateiname und zu kopierender Bereich wären in diesem Fall die Zellinhalte, Pfad muss im Makro angegeben werden):
Sub DateienNachZeilenAuslesen()
'Dateinamen auf aktivem Blatt in A2:Ax durchgehen und
'jeweilige Datei öffnen, den in B2:Bx des aktiven Blattes
'angegebenen Bereich kopieren und in D2:Dx einfügen. Ist
'der angegebene Bereich ein mehrzeiliger Bezug, wird auf
'die erste Zeile des Bezugs reduziert.
'Nicht vorhandene Dateien werden ignoriert, ein fehlender
'abschließender "\" im Pfad wird ergänzt.
'----- Anpassen ab hier -----
Const Pfad As String = "C:\DeinPfad"
'----- Anpassen bis hier -----
Dim QuellMappe As Workbook
Dim QuellBlatt As Worksheet
Dim QuellBereich As String
Dim Dateien As Range
Dim Datei As Range
Dim Dname As String
Dim ZielMappe As Workbook
Dim ZielBlatt As Worksheet
Dim Zielbereich As String
Application.ScreenUpdating = False
Set ZielMappe = ThisWorkbook
Set ZielBlatt = ZielMappe.ActiveSheet
'Zellen A2 bis zur letzten gefüllten Zelle in A durchgehen
With ZielBlatt
Set Dateien = .Range("A2:A" & _
.Cells(.Rows.Count, 1).End(xlUp).Row)
End With
For Each Datei In Dateien
'In den Zellen stehen die zu öffnenden Dateinamen
Dname = Datei.Text
'Evtl. fehlenden "\" im Pfad ergänzen
If Right(Pfad, 1)  "\" Then Dname = "\" & Dname
'Der Zielbereich startet in Spalte D der aktuellen Zeile
Zielbereich = Datei.Offset(0, 3).Address
'Nicht vorhandene Dateien werden ignoriert
If Dir(Pfad & Dname, vbDirectory)  vbNullString Then
Set QuellMappe = Workbooks.Open(Pfad & Dname)
Set QuellBlatt = QuellMappe.Worksheets(1)
'In Spalte B stehen die Quelladressen der Quelldateien
QuellBereich = Datei.Offset(0, 1).Text
'Mehrzeilige Bezüge werden auf die erste Zeile reduziert!)
With QuellBlatt.Range(QuellBereich)
If .Rows.Count > 1 Then
QuellBereich = .Rows(1).Address
End If
End With
'Werte und Formate aus dem Zielbereich werden in den
'Quellbereich geschrieben und Quelle geschlossen
QuellBlatt.Range(QuellBereich).Copy
ZielBlatt.Range(Zielbereich).PasteSpecial xlPasteValues
ZielBlatt.Range(Zielbereich).PasteSpecial xlPasteFormats
QuellMappe.Close False
End If
Next Datei
'Aufräumen
Set QuellBlatt = Nothing: Set QuellMappe = Nothing: Set ZielBlatt = Nothing
Set ZielMappe = Nothing: Set Dateien = Nothing: Set Datei = Nothing
With Application
.ScreenUpdating = True
.CutCopyMode = False
End With
End Sub
Wie gesagt, Anpassungen nur nach konkreten Details!
LG
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige