Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Daten aus geschlossener Arbeitsmappe auslesen
08.11.2018 12:45:23
Ulli
Hallo zusammen,
ich möchte aus einer geschlossenen Arbeitsmappe einen Bereich einlesen (D5:D30) und diesen Bereich spaltenversetzt (F5:F30) in die geöffnete Datei einfügen.
Habe folgende Lösung gefunden, mit der ich jedoch nur wieder in den gleichen Bereich (D5:D30) der Aktuellen Datei einfügen kann.
Ich habe schon mit offset versucht aber leider gelingt mit das nicht.
Für eine Lösung wäre ich sehr dankbar.
Gruß Ulli
Private Function GetValue(pfad, datei, blatt, zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen
'*** Dimensionierung der Variablen
Dim arg As String
'Sicherstellen, dass das datei vorhanden ist
If Right(pfad, 1)  "\" Then pfad = pfad & "\"
If Dir(pfad & datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If
'** Das Argument erstellen
arg = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(zelle).Range("A1").Address(, ,  _
xlR1C1)
'** Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(arg)
End Function
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("D5:D30")
'** 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

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus geschlossener Arbeitsmappe auslesen
08.11.2018 12:53:24
Rudi
Hallo,
For Each zelle In bereich
'** Eintragen in Bereich
zelle.Offset,2) = GetValue(pfad, datei, blatt, zelle.Address(0, 0))
Next zelle

Gruß
Rudi
AW: Daten aus geschlossener Arbeitsmappe auslesen
08.11.2018 17:26:39
Ulli
Hallo Rudi,
ich habe deinen Vorschlag eingegeben aber leider kommt die Meldung: Syntax-Fehler.
Soll deine Zeile anstatt "ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)"
eingegeben werden?
Das habe ich gemacht mit oben beschriebenem Erfolg.
Lieben Dank für die schnelle Meldung.
Gruß Ulli


Anzeige
AW: Daten aus geschlossener Arbeitsmappe auslesen
08.11.2018 17:54:50
Ulli
Hallo Rudi,
den Syntaxfehler habe ich erfolgreich ausgemerzt. Dennoch macht die Lösung nicht das was ich möchte.
Das Ergebnis liest zwar die Daten ein und versetzt sie auch in der Zieldatei um x Spalten aber gleichzeitig wird in der Quellspalte die Zelladresse angegeben:
D F
D5 34
D6 56
…
D30 102
Die D-Spalte überschreibt dort bereits eingetragene Werte.
Für eine Antwort wäre ich sehr dankbar

AW: Daten aus geschlossener Arbeitsmappe auslesen
08.11.2018 22:04:03
Werner
Hallo Ulli,
warum ignorierst du den Lösungsvorschlag von Case?
Gruß Werner
Du könntest es auch ohne...
08.11.2018 13:01:05
Case
Hallo, :-)
... Schleife machen: ;-)
Option Explicit
Const strSheetQ As String = "Tabelle1" ' DIE Tabelle wird ausgelesen"
Const strSheetZ As String = "Tabelle1" ' Die Tabelle in DIESER Datei
Const strRange As String = "D5:D30" ' Der Bereich wird ausgelesen
Const strFile As String = "C:\Temp\TestDatei.xls" ' Pfad und Datei
Public Sub Main()
With ThisWorkbook.Worksheets(strSheetZ)
.Range("F5:F30").Formula = "='" & Mid(strFile, 1, _
InStrRev(strFile, "\")) & "[" & _
Mid(strFile, InStrRev(strFile, _
"\") + 1) & "]" & _
strSheetQ & "'!" & strRange
.Range("F5:F30").Value = .Range("F5:F30").Value
End With
End Sub
Anpassungen nicht vergessen.
Servus
Case

Anzeige
AW: Du könntest es auch ohne...
08.11.2018 22:33:24
Ulli
Hallo Case,
Wie binde ich eine Option Explicit in eine Private Sub ein?
Sorry, aber meine Kenntnisse reichen da noch nicht aus.
Könntest du mir die Komplettlösung geben?
Liebe Grüße, Ulli

AW: Du könntest es auch ohne...
08.11.2018 22:56:24
Werner
Hallo Ulli,
den kompletten Code in ein allgemeines Modul. Du brauchst dann doch nur noch die Constanten für die Blätter und den Pfad an deine Bedürfnisse anzupassen.
Gruß Werner
AW: Du könntest es auch ohne...
08.11.2018 23:15:15
Ulli
Hallo Werner,
leider bekomme ich dann eine Fehlermeldung:
Private Sub CommandButton1_Click()
Option Explicit
Const strSheetQ As String = "Tabelle1" ' DIE Tabelle wird ausgelesen"
Const strSheetZ As String = "Tabelle1" ' Die Tabelle in DIESER Datei
Const strRange As String = "D5:D30" ' Der Bereich wird ausgelesen
Const strFile As String = "C:\User\PC\Documents\Beispiel2.xls" ' Pfad und Datei

Public Sub Main()
With ThisWorkbook.Worksheets(strSheetZ)
.Range("F5:F30").Formula = "='" & Mid(strFile, 1, _
InStrRev(strFile, "\")) & "[" & _
Mid(strFile, InStrRev(strFile, _
"\") + 1) & "]" & _
strSheetQ & "'!" & strRange
.Range("F5:F30").Value = .Range("F5:F30").Value
End With
End Sub
Fenster:
Fehler beim Kompilieren:
Innerhalb einer Prozedur ungültig

Anzeige
AW: Du könntest es auch ohne...
08.11.2018 23:21:57
Werner
Hallo Ulli,
die erste codezeile das Private SUB muss weg.
Gruß Werner
AW: Du könntest es auch ohne...
09.11.2018 14:09:12
ulli
Hallo Werner,
ganz ganz lieben Dank für deine Hilfe.
Ja, es Klappt.
Würde jetzt noch gern den Dateinamen variabel halten, indem ich ihn in eine Zelle eintrage. Sonst müsste ich jedes Mal den code ändern. Ist das möglich?
Kann ich dafür "=INDIREKT(VERKETTEN))" verwenden?
Gruß Ulli
AW: Du könntest es auch ohne...
11.11.2018 10:55:47
Werner
Hallo Ulli,
zum Beispiel so:
Option Explicit
Const strSheetQ As String = "Tabelle1" ' DIE Tabelle wird ausgelesen"
Const strSheetZ As String = "Tabelle1" ' Die Tabelle in DIESER Datei
Const strRange As String = "D5:D30" ' Der Bereich wird ausgelesen
Public Sub Main()
Dim strDateiname As String, strFile As String
'hier an deine Bedürfnisse anpassen. Der Dateiname wird aktuell im
'Zielblatt in Zelle A1 erfasst. Nur Deteiname, ohne Dateierweiterung
strDateiname = ThisWorkbook.Worksheets(strSheetZ).Range("A1") & ".xls"
strFile = "C:\Temp\" & strDateiname
If Not Worksheets("Tabelle1").Range("A1") = "" Then
With ThisWorkbook.Worksheets(strSheetZ)
.Range("F5:F30").Formula = "='" & Mid(strFile, 1, _
InStrRev(strFile, "\")) & "[" & _
Mid(strFile, InStrRev(strFile, _
"\") + 1) & "]" & _
strSheetQ & "'!" & strRange
.Range("F5:F30").Value = .Range("F5:F30").Value
End With
Else
MsgBox "Es ist kein Dateiname erfasst."
End If
End Sub
Gruß Werner
Anzeige
Für ein Feedback....
13.11.2018 18:04:08
Werner
Hallo Ulli,
...scheint es wohl nicht zu reichen? Oder ist die Tastatur kaputt gegangen?
Gruß Werner
AW: Für ein Feedback....
17.11.2018 22:56:09
Ulli
Hallo Werner,
kann dir erst jetzt antworten, da ich im Krankenhaus war. Aber wieder alles gut.
Herzlichen Dank für deine Lösungen.
Das klappt suupär.
Ich habe allerdings eine Verständnisfrage:
".Range("G5:G30").Value = .Range("G5:G30").Value" … kann diese Zeile nicht weggelassen werden?
Wenn ich nämlich die Einträge verändere, passiert nichts anders.
Nochmals lieben Dank für die Hilfe,
Ulli

Schaue es dir doch...
18.11.2018 10:49:57
Case
Hallo Ulli, :-)
... einfach an, wenn Du diese Codezeile weglässt - richtig erkannt, dann steht statt den Werten die Formeln in den Zellen. ;-)
Servus
Case

Anzeige
AW: Schaue es dir doch...
18.11.2018 11:35:10
Ulli
Danke für die Hilfe!

349 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige