Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1236to1240
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

Daten aus geschlossener Datei mit Bedingungen kopi

Daten aus geschlossener Datei mit Bedingungen kopi
Heiner
Hallo zusammen,
ich habe folgenden Code gefunden um Daten aus einer geschlossennen Datei zu holen:
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 = "C:\Users\heiner\Desktop\Tag2011\"
Dateiname = "Tagesbericht.xls" ' aus welcher Datei soll er holen?
Blatt = "Gesamt" ' von welcher Tabelle soll er holen?
Bereich = "A1:Z500" ' aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("d4") ' 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
Was muss ich ändern, damit folgendes erfüllt wird:
Wenn Datum in Quelle (D5) = Datum in Ziel (A:A) und Wert in Quelle A:A = Wert in Ziel (C3) dann _
_
kopiere
Quelle (A:A) in Ziel (C7)
Also, das Datum der Quelle (D5) soll mit dem Datum im Ziel Spalte A verglichen, sowie der Wert _
aus Quelle Spalte A mit Wert aus Ziel (C3) verglichen werden. Wenn beides gefunden soll der entsprechde Wert in die Zielzeile (Datum) und Zielspalte (Wert (C3)) kopiert werden.
Ich hoffe ich habe mich nicht zu umständlich ausgedrück so das mir jemand helfen kann.
Gruß
Heiner
AW: Daten aus geschlossener Datei mit Bedingungen kopi
03.11.2011 19:15:27
Josef

Hallo Heiner,
wenn die Daten in "Quelle" als Tabelle aufgebaut sind, dann geht das.
Lade doch eine kleine Beispielmappe mit einer Tabelle die wie deine Quelle aussieht und einer die wie "Ziel" aufgebaut ist hoch.

« Gruß Sepp »

AW: Daten aus geschlossener Datei mit Bedingungen kopi
03.11.2011 20:48:19
Heiner
Hallo Josef,
hier eine Beispeildatei
https://www.herber.de/bbs/user/77347.xlsx
Gruß
Heiner
Anzeige
AW: Daten aus geschlossener Datei mit Bedingungen kopi
04.11.2011 17:12:27
Josef

Hallo Heiner,
ein paar Nachfragen:
  1. Soll immer nur in einer Quell-Datei gesucht werden, oder gibt es mehrere?

  2. Wenn es mehrere Quellen gibt, hat der Dateiname vielleicht etwas mit dem Datum zu tun?

  3. Wie soll die Quell-Datei ausgewählt werden?

  4. Ist das Layout der Quelle fix vorgegeben, oder könnte es etwas angepasst werden?


« Gruß Sepp »

Anzeige
AW: Daten aus geschlossener Datei mit Bedingungen kopi
04.11.2011 19:59:22
Heiner
Hallo Sepp,
zu 1. es ist nur eine Quelle (Datei wird täglich neu erstellt unter gleichem Namen)
zu 2. man könnte mehrere daraus machen (wäre schön) z.B. Quelle_221011.xls (also mit angehängtem Datum
zu 3. fest in VBA hinterlegter Pfad (bei Umsetzung von 2. wäre die Möglichkeit schön, alle Quellen mit angehängtem Datum einzulesen, falls Zieldatum noch nicht gefüllt ist.
zu 4. Quelle ist nicht veränderbar vom Layout
Ideal wäre noch, wenn ein Fehlermeldung kommt, falls Datum, das eingelesen wird im Ziel schon vorhanden ist. (falls zu 2. + 3. nicht realisierbar ist)
Gruß und schönes Wochenende
Heiner
Anzeige
AW: Daten aus geschlossener Datei mit Bedingungen kopi
04.11.2011 20:44:45
Josef

Hallo Heiner,
https://www.herber.de/bbs/user/77363.xlsm
teste mal.
Zusätzlich könnte man noch einbauen, dass bereits bestehende Daten nicht überschrieben werden, oder das nur ab einem bestimmten Datum aufwärts eingelesen wird.

« Gruß Sepp »

Anzeige
AW: Daten aus geschlossener Datei mit Bedingungen kopi
04.11.2011 23:32:14
Heiner
Hallo Sepp,
klappt wunderbar!!! Allerdings werden die Zahlen im Ziel als Text eingefügt.
Woran liegt das? Datenzellen aus der Quelle sind als Währung formatiert. Ist das der Grund?
Da es im laufe des Jahres 365 Quelldateien werden, wird sich die Laufzeit sicher erhöhen, wenn immer alle kopiert werden.
Wäre es möglich erst mit dem Datum zu beginnen, wo im Ziel noch kein Wert eingetragen ist?
Gruß und Danke für die Unterstützung
Heiner
AW: Daten aus geschlossener Datei mit Bedingungen kopi
05.11.2011 11:22:51
Josef

Hallo Heiner,
das ist kein Problem.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub getData()
  Dim rng As Range, rngDate As Range
  Dim objADO As Object
  Dim vntValues As Variant
  Dim strPath As String
  Dim strFile As String
  Dim lngIndex As Long
  
  Const cstrRef As String = "Tabelle1$B3:B8" 'Überschriftenzeile mit angeben!
  'Tabellenname + $ + Bereichsadresse
  
  On Error GoTo ErrExit
  
  strPath = "E:\Forum"
  strPath = IIf(Right(strPath, 1) = "\", strPath, strPath & "\")
  
  With Sheets("Ziel") 'Tabellenname - Anpassen!
    On Error Resume Next
    Set rngDate = .Columns(1).SpecialCells(xlCellTypeConstants, xlNumbers)
    On Error GoTo ErrExit
    If Not rngDate Is Nothing Then
      For Each rng In rngDate.Cells
        If Application.CountA(rng.Offset(0, 1).Resize(1, 5)) = 0 Then
          strFile = Dir("quelle_" & Format(rng, "yyMMdd") & ".xls*", vbNormal)
          If strFile <> "" Then
            Set objADO = ExcelTable(strPath & strFile, cstrRef)
            vntValues = objADO.GetRows
            objADO.Close
            On Error Resume Next
            For lngIndex = 0 To UBound(vntValues, 2)
              vntValues(0, lngIndex) = Val(vntValues(0, lngIndex))
            Next
            On Error GoTo ErrExit
            rng.Offset(0, 1).Resize(1, 5) = Application.Transpose(Application.Transpose(vntValues))
            rng.Offset(0, 1).Resize(1, 5).NumberFormat = "#,##0.00 $" 'Nummerformat ggf. anpassen!
          End If
        End If
      Next
    End If
  End With
  
  ErrExit:
  If Not objADO Is Nothing Then If objADO.State <> 0 Then objADO.Close
  
  With Err
    If .Number <> 0 Then
      MsgBox IIf(Erl, vbLf & "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbLf & _
        .Description, vbExclamation, "Fehler"
    End If
    .Clear
  End With
  
  Set objADO = Nothing
  Set rng = Nothing
  Set rngDate = Nothing
End Sub


Private Function ExcelTable(ByRef Path As String, ByRef SourceRange As String) As Object
  Dim SQL As String
  Dim Con As String
  
  SQL = "select * from [" & SourceRange & "]"
  
  If Mid(Path, InStrRev(Path, ".") + 1) = "xls" Then
    Con = "Provider=Microsoft.Jet.OLEDB.4.0;" _
      & "Extended Properties=Excel 8.0;" _
      & "Data Source=" & Path & ";"
  ElseIf Mid(Path, InStrRev(Path, ".") + 1) Like "xls?" Then
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" _
      & "Extended Properties=""Excel 12.0;HDR=YES"";" _
      & "Data Source=" & Path & ";"
  Else
    Exit Function
  End If
  Set ExcelTable = CreateObject("ADODB.Recordset")
  ExcelTable.Open SQL, Con, 3, 1
End Function



« Gruß Sepp »

Anzeige
AW: Daten aus geschlossener Datei mit Bedingungen kopi
06.11.2011 00:07:28
Heiner
Hallo Sepp,
danke für Deine Hilfe.
Leider wird nix mehr kopiert. Das Skript findet weinfach nix mehr :o(
Gruß und Nacht
Heiner
AW: Daten aus geschlossener Datei mit Bedingungen kopi
06.11.2011 08:51:19
Josef

Hallo Heiner,
wenn jetzt nichts mehr gefunden wird, dann wird deine Beispieltabelle halt mal wieder nicht dem Original entsprechen, mit deinen Beispieldateien funktioniert es bei mir.

« Gruß Sepp »

Anzeige
AW: Daten aus geschlossener Datei mit Bedingungen kopi
06.11.2011 22:48:37
Heiner
Hallo Sepp,
mein Fehler! Alles klappt wunderbar. Nochmal VIELEN Dank für Deine Hilfe.
Gruß
Heiner

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige