Zellen kopieren aus anderer Arbeitsmappe

Bild

Betrifft: Zellen kopieren aus anderer Arbeitsmappe
von: ronforum
Geschrieben am: 21.07.2015 16:31:33

Hallo zusammen,
ich bin gerade dabei zwei Arbeitsmappen miteinander zu verknüpfen, weil ich gerne Werte aus einer in die andere Arbeitsmappe überspielen würde.
Mit einzelnen Werten klappt das soweit problemlos.

'Zugriff auf geschlossene Mappe
Sub Zelle_auslesen()
                '** Dimensionierung der Variablen
                Dim pfad As String, datei As String, blatt As String, zelle As String
                '** Angaben zur auszulesenden Zelle
                pfad = "E:\Beispielpfad"
                datei = "Blatt.xlsm"
                blatt = "1"
                bezug = "d6"
                '** Eintragen in Zelle
                ThisWorkbook.Sheets("Standard").Cells(38, 17) = GetValue(pfad, datei, blatt,  _
bezug)
End Sub
                                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
Ich würde nun aber gerne nicht nur auf ein Tabellenblatt zugreifen sondern gleich auf mehrere. Diese sind fortlaufen nummeriert. Es soll immer die gleiche Zelle angesprochen werden, bloß in verschiedenen Blättern. Gibt es eine Möglichkeit, dass ich eine Schleife mit einer Variablen erstelle?
Also quasi: Blattname: 1
1+k
Sub Zelle_auslesen()
                 For k = 3 To lngsheets
                '** Dimensionierung der Variablen
                Dim pfad As String, datei As String, blatt As String, zelle As String
                '** Angaben zur auszulesenden Zelle
                pfad = "E:\Beispielpfad"
                datei = "Blatt.xlsm"
                blatt = 1 + k
                bezug = "d6"
                '** Eintragen in Zelle
                ThisWorkbook.Sheets("Standard").Cells(38, 17) = GetValue(pfad, datei, blatt,  _
bezug)
                Next k
End Sub
Das klappt aber leider so auch noch nicht so ganz.
Die Ergebnisse sollen dann ab Cells (38/17) nach unten hin ausgegeben werden.
Gibt es hierfür eine Lösung und wie würde diese aussehen?
Vielen Dank schon mal
Ron

Bild

Betrifft: Wo sind die Cracks?
von: ronforum
Geschrieben am: 22.07.2015 13:50:56
Hi,
kann mir hierbei wirklich niemand helfen?
Grüße
Ron

Bild

Betrifft: AW: Wo sind die Cracks?
von: Rudi Maintaire
Geschrieben am: 22.07.2015 14:01:34
Hallo,
eher so:

Sub Zelle_auslesen()
    '** Dimensionierung der Variablen
    Dim pfad As String, datei As String, blatt As String, zelle As String
    Dim lngSheets As Long
    '** Angaben zur auszulesenden Zelle
    pfad = "E:\Beispielpfad"
    datei = "Blatt.xlsm"
    bezug = "d6"
     For k = 3 To lngSheets
      blatt = 1 + k
      '** Eintragen in Zelle
      ThisWorkbook.Sheets("Standard").Cells(38 + k - 3, 17) = _
        GetValue(pfad, datei, blatt, bezug)
    Next k
End Sub
Woher bekommt lngSheets den Wert?
Gruß
Rudi

Bild

Betrifft: AW: Wo sind die Cracks?
von: ronforum
Geschrieben am: 22.07.2015 17:38:12
Hi Rudi,
danke für deine Hilfe.
Du hast recht ich hab lngSheets noch überhaupt nicht bestimmt.
Schaff es aber trotzdem nicht.
Hab mal zwei Beispielmappen gebaut, wo 99019 auf die Tabellenblätter von 99020 versucht zuzugreifen.
Kriegst du das hin, dass das funktioniert. Wäre wirklich toll.
Viele Grüße und danke
Ron
https://www.herber.de/bbs/user/99019.xlsm
https://www.herber.de/bbs/user/99020.xlsx

Bild

Betrifft: AW: Wo sind die Cracks?
von: Rudi Maintaire
Geschrieben am: 23.07.2015 13:13:35
Hallo,
für das Beispiel:


Sub Zelle_auslesen()
  
  '** Dimensionierung der Variablen
  Dim pfad As String, datei As String, blatt As String, zelle As String
  '** Angaben zur auszulesenden Zelle
  pfad = "c:\test\"
  datei = "99020.xlsx"
  bezug = "a1"
  For k = 1 To 6
    blatt = k
    '** Eintragen in Zelle
    ThisWorkbook.Sheets("Tabelle1").Cells(k, 1) = _
      GetValue(pfad, datei, blatt, bezug)
  Next k
End Sub

Gruß
Rudi

Bild

Betrifft: AW: Wo sind die Cracks?
von: ronforum
Geschrieben am: 24.07.2015 16:17:06
Super klappt. Wirklich klasse.
Aber wie mach ich es wenn es eine variable Anzahl an Tabellenblätter sind. Also nicht wie hier sechs Stück die ausgelesen werden sollen sondern immer weiter hinzugefügt werden können. Dafür bräuchte ich dann einen Sheets.count oder?
Wie ich das im Zusammenhang mit dem anderen Workbook mache weis ich aber leider nicht.
Kannst du mir bitte nochmal helfen Rudi.
Danke
Beste Grüße
Ron

Bild

Betrifft: AW: Wo sind die Cracks?
von: Rudi maintaire
Geschrieben am: 24.07.2015 19:50:42
Hallo,
lass die Schleife laufen bis ein Fehler auftritt.
Do
K=k+1
wert=getvalue(.....)
If iserror(wert) then exit do
Thisworkbook.sheets(1).Cells(k,1)=wert
Loop
Sorry bin am Tablet
Gruß
Rudi

Bild

Betrifft: AW: Wo sind die Cracks?
von: ronforum
Geschrieben am: 27.07.2015 16:28:05
Hi Rudi,
das mag leider noch nicht so ganz funktionieren.
Wenn ich das so umsetze dann passiert gar nichts.
Hab jetzt diesen Code.

 Sub Zelle_auslesen()
                                    
                Do
                k = k + 1
                wert = GetValue("E:\Dokumente\Eigene Dateien", "test2.xlsx", "k+1", "a1")
                  If IsError(wert) Then Exit Do
                    ThisWorkbook.Sheets("Tabelle1").Cells(k, 1) = wert
                     Loop
                     
                End Sub
Hab das Blatt auch schon nur mit Variabler laufen lassen aber auch da passiert nix.
Weist du woran das liegen könnte?
Grüße und danke
Ron

Bild

Betrifft: sauber deklarierte Variablen...
von: Michael
Geschrieben am: 27.07.2015 20:13:12
... erleichtern das Leben ungemein, Ron,
denn dann mault Excel wenigstens gleich los...
Wenn Du Deine
Function GetValue(pfad, datei, blatt, zelle)
sauber deklarierst,
Function GetValue(pfad as String, datei as String, blatt as long, zelle as string)
wirst Du sehen, daß pfad und datei zwar Strings sind, blatt jedoch die *Nummer* des auszuwertenden Blattes.
Kurzum: Beim Aufruf von GetValue darfst Du das k bzw. k+1 *nicht* in Anführungszeichen setzen!
Abgesehen davon: wenn Du wirklich *viele* Werte holen möchtest, würde ich die bestehende GetValue etwas erweitern, denn *jedesmal* zu prüfen, ob die Datei da ist, kostet nur Zeit.
Schöne Grüße,
Michael

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zellen kopieren aus anderer Arbeitsmappe"