Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Aus Geschlossener Datei daten auslesen

Betrifft: Aus Geschlossener Datei daten auslesen von: Herbert Greim
Geschrieben am: 30.07.2014 17:04:54

Hallo zusammen,
ich komme einfach nicht weiter, habe mir folgenden Vbacode kopiert, aber jetzt fehlt mir noch eine Kleinigkeit.Meine geschlossene Datei hat in Zeile 1 ein fortlaufendes Datum für ein ganzes Jahr stehen also 01.01.2014 bis 31.12.2014. Ich möchte, das wenn ich in der aktiven Tabelle ein Datum eingebe in der geschlossenen Datei danach gesucht wird und dann die Spalte von einer bestimmten Range an in die aktive Tabelle J9 kopiert wird.
kann mir da jemand helfen ?

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 = "F:\"
       Dateiname = "AWH.xls" ' aus welcher Datei soll er holen?
       Blatt = "AWH"  ' von welcher Tabelle soll er holen?
       Bereich = "G15:G50"   ' aus welchem Bereich soll er holen?
       Set Ziel = ActiveSheet.Range("J9")  ' 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

Danke im Voraus
Herby

  

Betrifft: AW: Aus Geschlossener Datei daten auslesen von: Herbert Greim
Geschrieben am: 30.07.2014 17:08:40

Hier die Dateien zu testzwecken


Geschlossene Datei

https://www.herber.de/bbs/user/91793.xlsx

offene Datei

https://www.herber.de/bbs/user/91794.xlsx


  

Betrifft: AW: Aus Geschlossener Datei daten auslesen von: Peter Feustel
Geschrieben am: 30.07.2014 18:40:57

Hallo Herby,

wenn Du ab einem betimmten Datum aus der geschlossenen Datei lesen willst, brauchst Du doch nur den Tag deines Datums zu nehmen und hast bereits die Spalte, ab der es losgehen soll.

Gruß Peter


  

Betrifft: AW: Aus Geschlossener Datei daten auslesen von: Herbert Greim
Geschrieben am: 30.07.2014 18:52:03

Hi Peter,

so einfach mach ich es dir nicht(grins)
ich möchte in der offenen Tabelle per datapicker ein Datum eingeben und nach diesem Datum soll er in der geschlossenen Datei suchen und dann die Daten ab einer gewissen Zelle in die offene Tabelle kopieren.

Gruß
Herby


  

Betrifft: AW: Aus Geschlossener Datei daten auslesen von: Daniel
Geschrieben am: 30.07.2014 19:04:56

Hi
öffne die Datei doch einfach schreibgeschützt.
der Datenaustausch mit geöffneten Dateien ist einfach schneller und dir steht das volle VBA- und Excelinstrumentarium zur Verfügung.

Gruß Daniel


  

Betrifft: ich bin fast fertig.... von: Oberschlumpf
Geschrieben am: 30.07.2014 19:07:01

...aber anscheinend hast du es ziemlich eilig

Hi Herbert

du drängelst ja echt ganz schön.

Eigtl hab ich es schon fast.
Aber nun ess ich erst mal, und schaue mir später Peters Bemühen an, wenn er denn Lust hat, sich Gedanken zu machen.

Ciao
Thorsten


  

Betrifft: AW: ich bin fast fertig.... von: Herbert Greim
Geschrieben am: 30.07.2014 20:08:15

Sorry Thorsten,

erst einmal guten hunger,
bin neu hier und wusste nicht ob Du noch einmal antwortest.
Aber was lange dauert wird bestimmt gut(nicht so ernst gemeint).

Gruß
Herby


  

Betrifft: AW: ich bin fertig.... von: Oberschlumpf
Geschrieben am: 31.07.2014 01:46:28

Hi Herbert

alles ok, ja, du kannst ja nich wissen, ob von mir noch was kommt, oder nicht.

Trotzdem noch etwas:
Was nützt mir ne Bsp-datei, die KEINE Datenzeilen enthält????
Deine "geschlossene" Bsp-Datei zeigt zwar das angedeutete Layout mit den Tagen 1.1 - 2.2, aber wo sind die Werte in den Zeilen ab Zeile 14???
Damit ich arbeiten kann, hab ich in die erste + letzte Datenzeile die Werte 101-202 eingetragen, damit ich sehe, dass die Werte von der ersten bis zur letzten Zeile übertragen werden.

Also, hier is meine Idee:
https://www.herber.de/bbs/user/91799.zip

Die ZIP-Datei enthält 2 Excel-Dateien: auf.xls + zu.xls

auf.xls = Datei mit Makro
zu.xls = die Datei, die geschlossen bleiben soll

Vor dem Start müssen beide Dateien im gleichen Verzeichnis gespeichert sein.

1. Öffne nun die Datei auf.xls + aktiviere die Makros
2. Trag nun in deine Datumszeile Y5 ein Datum zwischen 01.01.2014 und 02.02.2014 ein
3. nach Enter wird zuerst mit Hilfe der Funktion fncTageImJahr ermittelt, um welchen Tag im Jahr es sich handelt
Bei z Bsp dem 02.02.2014 handelt es sich um den 33. Tag im Jahr
4. Da in der geschl. Datei die Datumswerte nicht in Spalte 1 (A) sondern in Spalte 6 (F) beginnen, weißt du also schon vor Ausführung des Makros, dass sich der 02.02.2014 in Spalte 38 befindet...33 + 5 = 38
5. Im nächsten Schritt wird also der gefundene Tag im Jahr 33 + 5 = 38 an die Sub TestGetValue übergeben.
6. Nun werden aus der geschlossenen Datei alle Werte von Zeile 14 - 45 in der 38. Spalte ausgelesen und in die offene Datei in Spalte J in Zeile 9 - 40 übertragen

Hilfts?

Ciao
Thorsten


  

Betrifft: AW: ich bin fertig.... von: Herbert Greim
Geschrieben am: 31.07.2014 05:02:43

Supi funzt prima,

Vielen Dank

Herby


  

Betrifft: AW: ich bin fertig.... von: Herbert Greim
Geschrieben am: 31.07.2014 20:21:27

Hi Thorsten,

erstmal Danke für den Code funzt richtig gut.
noch eine kleinigkeit fehlt mein Fehler.
Dein Code geht nur auf der Tabelle (Di), ich habe aber für eine ganze Woche Tabellenblätter angelegt.
Mo - Di- Mi usw.bis So wie schaffe ich es, das der Code auf jedem Blatt funktioniert ?

Gruß
Herby


  

Betrifft: AW: ich bin fertig.... von: Oberschlumpf
Geschrieben am: 31.07.2014 20:47:28

Hi Herbert

ich hab die Tabelle "Di" als Kopie in die Datei eingefügt und sie in "Mo" umbenannt.

hier die Datei (es ist die neue Datei "auf.xls")
https://www.herber.de/bbs/user/91819.xls

Wiederhol das noch 5x für die übrigen Tage.
Dann musst du den Code in den 5 neuen Tabellen anpassen.

Ich hab den Codezeilen Kommentare hinzugefügt, damit du weißt, wo du was ändern musst.

Hilfts?
(für "Mo" + "Di" klappt es jedenfalls)

Ciao
Thorsten


  

Betrifft: AW: Aus Geschlossener Datei daten auslesen von: Peter Feustel
Geschrieben am: 30.07.2014 22:15:07

Hallo Herby,

ich hatte mir das so vorgestellt und dabei angenommen, die Zeilen gehen von 15 - 35

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
       Dim iSpalte         As Integer
       Dim sSpalte         As String
       Dim dDatum          As Date    ' per DatePicker geholt - z. B. heute
       
       dDatum = Date ' das per DatePicker geholte Datum - z. B. heute
       
       Pfad = "F:\"
       Dateiname = "AWH.xls" ' aus welcher Datei soll er holen?
       Blatt = "AWH"  ' von welcher Tabelle soll er holen?
'         die Spalte aus dem Datum ableiten + 5 für die Spalten A-E
       iSpalte = dDatum - DateSerial(Year(Date), 1, 1) + 1 + 5
'         die nummerische Spalte in den Spaltenbuchstaben umwandeln
       sSpalte = Replace(Cells(1, iSpalte).Address(0, 0), 1, "")
       Bereich = sSpalte & "15:" & sSpalte & 35 ' aus welchem Bereich soll er holen?
       
       MsgBox Bereich
       
       
       
       Set Ziel = ActiveSheet.Range("J9")  ' 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ß Peter


  

Betrifft: AW: Aus Geschlossener Datei daten auslesen von: Herbert Greim
Geschrieben am: 31.07.2014 05:06:50

Hi Peter,

vielen Dank werde es heute ausprobieren und melde mich
wenn es funzt.

Vielen Dank
Herby


 

Beiträge aus den Excel-Beispielen zum Thema "Aus Geschlossener Datei daten auslesen "