MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 31.03.2012, 04:45   #1
HolN
MOF User
MOF User
Standard VBA - Daten aus geschlossener Datei

Hallo zusammen,

zur Zeit habe ich ein VBA Code der mir eine zweite XLS Datei öffnet und in der aus einer Spalte die letzte Zeile ermittelt sowie die einzelnen Werte der Spalte in ein Array übernimmt. Danach wird die Datei wieder geschlossen und die Daten werden weiter verarbeitet.

Gibt es eine Möglichkeit, an den Daten zu kommen ohne die Datei zu öffnen. Ich erhoffe mir dadurch eine Geschwindigkeitsverbesserung.

Danke für Tipps
nolle
HolN ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 08:05   #2
Hajo_Zi
MOF Guru
MOF Guru
Standard

Code:

Option Explicit

Public Function GetDataClosedWB(SourcePath As String, _
    SourceFile As String, sourceSheet As String, _
        SourceRange As String, TargetRange As Range) As Boolean
    'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
    'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
    '© t.ramel@mvps.org
    ' wird durch die HoleDaten aufgerufen
    Dim strQuelle       As String
    Dim Zeilen          As Long
    Dim Spalten         As Byte
    On Error GoTo InvalidInput
    strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range(SourceRange).Cells(1, 1).Address(0, 0)
    Zeilen = Range(SourceRange).Rows.Count
    Spalten = Range(SourceRange).Columns.Count
    With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
        .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
        .Value = .Value
    End With
    GetDataClosedWB = True
    Exit Function
InvalidInput:
    MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from closed Workbook"
    GetDataClosedWB = False
End Function

Public Sub HoleDaten()
    ' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
    Dim Pfad            As String
    Dim Dateiname       As String
    Dim Blatt           As String
    Dim Bereich         As String
    Dim Ziel            As Range
    Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
    Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
    Blatt = "Tabelle1"  ' von welcher Tabelle soll er holen?
    Bereich = "A1:B9"   ' aus welchem Bereich soll er holen?
    Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer gesagt: Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
    If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
        MsgBox "Daten importiert"
    End If
End Sub
GrußformelHomepage

__________________

Signatur in jedem Beitrag
Bitte Version angeben. Bei keiner Angabe gehe ich von meinen Angaben aus.
Betriebssystem: Windows 10 - 64 Bit, Office 2016 - 32 Bit.
Fragen werden im Forum beantwortet, nicht per PN.
Hajo_Zi ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 08:36   #3
Thomas Ramel
MOF Profi
MOF Profi
Standard

Grüezi Nolle

Wenn du weisst welcher Bereich die Daten enthält kannst Du diese mimt meinem Code, den Hajo gezeigt hat direkt auslesen (lassen).

Aber es ist in einer geschlossenen Mappe nicht möglich Bereiche zu prüfen oder Inhalte zu zählen.

__________________

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]

Microsoft Excel - Die ExpertenTipps
Thomas Ramel ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 09:08   #4
HolN
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Hajo, Hallo Thomas

Hajo danke für den Code, Thomas danke für die Erklärung.

Eigentlich müsste ich die Daten in der geschlossenen Mappe zählen um meinen Bereich zu definieren. Wenn das aber nicht geht, könnte ich auch einen Bereich nehmen in dem ich mir sicher bin das alle Daten erfasst sind.
Meine Vorstellung wäre jetzt ein dreidimensionales Array in dem die Daten von (A100:B100;F100) enthalten sind.

Würde das gehen und kann mir einer den Code dafür nennen.

Danke + Gruß
nolle
HolN ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 16:27   #5
josef e
MOF Meister
MOF Meister
Standard


Hallo Nolle,

ob das geht, hängt einzig und alleine vom Aufbau der Tabelle ab.

Lade ein Beispiel hoch und beschreibe, was du genau auslesen willst.




« Gruß Sepp »
josef e ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 16:43   #6
HolN
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Sepp,

ich mochte gerne die Daten aus A1:A100 B1:B100 sowie F1:F100 auslesen ohne die Datei zu öffnen.
Die Werte sollen mir in ein Array(100,3) geschrieben werden mit denen ich dann weiter arbeite.

Gruß
nolle
HolN ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 17:05   #7
Thomas Ramel
MOF Profi
MOF Profi
Standard

Grüezi Nolle

Müssen die Daten in ein Array im Speicher geschrieben werden oder reichen da drei Spalten in einem (ev. temporären) Tabellenblatt auch aus?

Dann nimm den Code oben in zwei Durchgängen über deine beiden zusammenhängenden Bereiche und lasse diese in drei nebeneinander liegende Spalten schreiben.

Diesen Bereich kannst Du dann in dein Array einlesen und das Tabellenblatt (wenn es temporär war) dann wieder löschen.

Brauchst Du dafür neben den Erläuterungen im Code noch weitere Unterstützung?

__________________

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]

Microsoft Excel - Die ExpertenTipps
Thomas Ramel ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 17:48   #8
HolN
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Thomas,

in einem Array wäre natürlich besser. Aber wenns nicht geht muß ich eben den Umweg mit deinem Vorschlag machen.
Wenn ich den o.g. Code übernehme kommt immer eine Meldung das ich die Daten aktulisieren soll. Dann muß ich die Quelldatei nochmals auswählen

Gruß
nolle
HolN ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 31.03.2012, 18:30   #9
Thomas Ramel
MOF Profi
MOF Profi
Standard

Grüezi Nolle

Dann passt irgendwas mit den Pfacen und/oder Dateinamen die Du der Sub übergibst nicht. Ein Leerzeichen oder ein Slash - irgendwas ist da nicht vorhanden, sonst meldet sich Excel nicht.

Prüfe dies daher nochmal ganz penibel.

Ich habe dem Code zwischenzeitlich noch eine Prüfung eingebaut ob der Pfad auch wirlich einen Slash am Ende aufweist und dies korrigiert wenn das nicht der Falle ist:


Code:

Public Function GetDataClosedWB(SourcePath As String, _
                                SourceFile As String, _
                                SourceSheet As String, _
                                SourceRange As String, _
                                TargetRange As Range, _
                                Optional blFormula As Boolean) As Boolean

    'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
    'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
    '© t.ramel@mvps.org

Dim strQuelle            As String
Dim Zeilen               As Long
Dim Spalten              As Byte

    On Error GoTo InvalidInput

    If Right(SourcePath, 1) <> "\" Then SourcePath = SourcePath & "\"

    strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & _
                SourceSheet & "'!" & _
                Range(SourceRange).Cells(1, 1).Address(0, 0)

    Zeilen = Range(SourceRange).Rows.Count
    Spalten = Range(SourceRange).Columns.Count

    With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
        .Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
        If Not blFormula Then .Value = .Value
    End With

    GetDataClosedWB = True
    Exit Function

InvalidInput:
    MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", _
           vbExclamation, "Get data from closed Workbook"
    GetDataClosedWB = False
End Function

__________________

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]

Microsoft Excel - Die ExpertenTipps
Thomas Ramel ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.04.2012, 06:37   #10
HolN
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Thomas,
hatte ein \ am Ende vergessen. Kann meine Daten jetzt aus der geschlossenen Datei lesen.

Danke + Gruß
nolle
HolN ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.04.2012, 10:12   #11
Thomas Ramel
MOF Profi
MOF Profi
Standard

Grüezi Nolle

Ja, meistens liegt das an Kleinigkeiten - mit dem angepassten Code wird dieses Manko korrigiert.


Wie sieht es denn im Vergleicht mit der Geschwindigkeit aus?
Kannst Du die Daten auf diese Weise schneller aus der Mappe holen?

__________________

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]

Microsoft Excel - Die ExpertenTipps
Thomas Ramel ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.04.2012, 13:05   #12
HolN
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Thomas,
von der Geschwindigkeit habe ich mir mehr versprochen. Ich merke keinen Unterschied als wenn ich die Mappe per Makro öffne und mir dann die Daten daraus ziehe. Es sind ja nicht viele Daten. 300 Zellen. Das alles passiert jetzt hier bei mir lokal auf meinem privaten Recher. Mal sehen wie der Vergleich morgen iim Büro ausfällt. Dort liegen die Daten auf einen Netzlaufwerk. Ich weiss auch noch nicht was passiert wenn die Mappe von einer anderen Person geöffnet ist.

Gruß
nolle
HolN ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.04.2012, 13:20   #13
Thomas Ramel
MOF Profi
MOF Profi
Standard

Grüezi Nolle

Ja, das hatte ich eigentlich auch nicht anders erwartet - in aller Regel geht es sogar schneller wenn die verknüpfte Mappe geöffnet wird, da das Importieren mit einer Formel eben auch Zeit benötigt und zumindest ein DDE-Kanal zur Mappe hergestellt werden muss.

__________________

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]

Microsoft Excel - Die ExpertenTipps
Thomas Ramel ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.04.2012, 13:22   #14
josef e
MOF Meister
MOF Meister
Standard


Hallo Nolle,

darauf http://ms-office-forum.net/forum/sho...66&postcount=5 hast du ja nicht entsprechend reagiert!




« Gruß Sepp »
josef e ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.04.2012, 13:41   #15
HolN
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Sepp,

ich hatte ja geschrieben das es eine ganz einfache Tabelle ist von der ich mir die Bereiche A1:B100;F1:F100) rausziehen wollte.

Dachte mir das ich hier nicht unbedingt notwendig ist eine Beispielmappe hochzuladen.

Gruß
nolle
HolN ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.