Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1140to1144
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

geschlossene Dateien auslesen

geschlossene Dateien auslesen
Mario
Hallo,
ich muss aus verschiedenen, geschlossenen Excel-Dateien einige Zellen auslesen.
Ich habe gelesen das soll funktionieren. Problem ist, dass es nicht bei allen Dateien die selben Zellen
sind, die ausgelesen werden müssen. Und es kommt noch schwieriger: Das alles muss sich
alle 10 Sekunden automatisch aktualisiern.
Ich weiß das ist ziehmlich schwer hinzubekommen oder? Hat einer ne Idee wie es klappen könnte?
Sehe ja, dass hier Profis am Werk sind, also wenn nicht hier, wo dann?:)
Kann mir hier vielleicht einer helfen? Ich hab schon viel versucht aber ich habe nicht die nötigen
Kenntnisse für solch ein Makro.
Ich bin gespannt ;)...
mfg

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: geschlossene Dateien auslesen
23.02.2010 07:49:00
Josef
Hallo Mario,

das könnte nach diesem Muster funktionieren.

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Activate()
  startTimer
End Sub

Private Sub Workbook_Deactivate()
  stopTimer
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Const cstrProc As String = "updateData"
Private Const clngInterval As Long = 10 'Intervall in Sekunden

Private cdblNextTime As Double

Sub startTimer()
  cdblNextTime = Now + TimeSerial(0, 0, clngInterval)
  Application.OnTime cdblNextTime, cstrProc
End Sub

Sub stopTimer()
  On Error Resume Next
  Application.OnTime cdblNextTime, cstrProc, Schedule:=False
  On Error GoTo 0
End Sub

Sub updateData()
  Dim strReference(1 To 10) As String, strSplit() As String
  Dim intIndex As Integer
  
  'INFO: Pfad;Datei;Tabelle;Quellzelle;Zielzelle
  strReference(1) = "E:\Forum;test.xls;Tabelle1;C5;A10"
  strReference(2) = "E:\Forum;test1.xls;Tabelle3;F11;B10"
  strReference(3) = "E:\Forum;test2.xls;Tabelle1;H5;C3"
  strReference(4) = "E:\Forum;test3.xls;Tabelle2;C5;A11"
  strReference(5) = "E:\Forum;test4.xls;Tabelle1;C5;A12"
  strReference(6) = "E:\Forum;test5.xls;Tabelle4;C5;A13"
  strReference(7) = "E:\Forum;test6.xls;Tabelle1;C5;A14"
  strReference(8) = "E:\Forum;test7.xls;Tabelle3;C5;A15"
  strReference(9) = "E:\Forum;test8.xls;Tabelle1;C5;A16"
  strReference(10) = "E:\Forum;test9.xls;Tabelle1;C5;A17"
  
  With ThisWorkbook.Sheets("Tabelle1") 'Zieltabelle
    For intIndex = LBound(strReference) To UBound(strReference)
      strSplit = Split(strReference(intIndex), ";")
      .Range(strSplit(4)) = GetValue(strSplit(0), strSplit(1), strSplit(2), strSplit(3))
    Next
  End With
  
  startTimer
End Sub

Private Function GetValue(path As String, file As String, _
    sheet As String, ref As String)

  ' Retrieves a value from a closed workbook
  Dim arg As String
  ' Make sure the file exists
  If Right(path, 1) <> "\" Then path = path & "\"
  
  If Dir(path & file) = "" Then
    GetValue = "File Not Found"
    Exit Function
  End If
  
  ' Create the argument
  arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
    Range(ref).Range("A1").Address(, , xlR1C1)
  
  ' Execute an XLM macro
  GetValue = ExecuteExcel4Macro(arg)
End Function

Gruß Sepp

Anzeige
AW: geschlossene Dateien auslesen
23.02.2010 08:52:11
Mario
Das ging ja mal wirklich schnell! Danke! Ich hab jetzt Feierabend ich werds gleich morgen einbauen und testen. Da in Deutschland aber grade der Tag anbricht stell ich gleich jetz schonmal 2 Fragen damit ich dir morgen vielleicht schon beantwortet haben kann, wenn ich anfange zu arbeiten. ;) Ich wette, das weißt du sowieso:
1. Kann ich das hier -- strReference(1) = "E:\Forum;test.xls;Tabelle1;C5;A10" -- so oft vervielfältigen, wie ich es brauche? Und wenn ja muss ich dann im übrigen Code etwas ändern?
2. Kann beliebig viele Zellen (hier jetzt z.B. C5 und A10) dahinter schreiben oder gehn immer nur 2? Ich brächte nämlich eigentlich mehr.
Und ich schätze das kommt in ein Modul?
Danke schonmal, dass du dir die Zeit genommen hast, dich um meine Frage zu bemühen.
mfg
Anzeige
AW: geschlossene Dateien auslesen
23.02.2010 09:12:24
Reinhard
Hallo Mario,
zu 1)
Ja. Du mußt dann Dim strReference(1 To 10) As String anpassen.
zu 2)
Ja. Immer paarweise Quell- und Zielzelle
.Range(strSplit(4)) = GetValue(strSplit(0), strSplit(1), strSplit(2), strSplit(3))
.Range(strSplit(6)) = GetValue(strSplit(0), strSplit(1), strSplit(2), strSplit(5))
.Range(strSplit(8)) = GetValue(strSplit(0), strSplit(1), strSplit(2), strSplit(7))
.Range(strSplit(10)) = GetValue(strSplit(0), strSplit(1), strSplit(2), strSplit(9))
Gruß
Reinhard
AW: geschlossene Dateien auslesen
23.02.2010 11:46:42
Josef
Hallo Mario,

ich habe den Code erweitert. Du kannst jetzt pro Datei mehrere Zellen angeben, immer nach dem Schema "Pfad;Datei;Tabelle;1.Quellzelle;1.Zielzelle;2.Quellzelle;2.Zielzelle; ....."
Der obere Teil des Codes gehört in das Modul "DieseArbeitsmappe", der untere in ein allgemeines Modul.

' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Activate()
  startTimer
End Sub

Private Sub Workbook_Deactivate()
  stopTimer
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Const cstrProc As String = "updateData"
Private Const clngInterval As Long = 10 'Intervall in Sekunden

Private cdblNextTime As Double

Sub startTimer()
  cdblNextTime = Now + TimeSerial(0, 0, clngInterval)
  Application.OnTime cdblNextTime, cstrProc
End Sub

Sub stopTimer()
  On Error Resume Next
  Application.OnTime cdblNextTime, cstrProc, Schedule:=False
  On Error GoTo 0
End Sub

Sub updateData()
  Dim strReference(1 To 10) As String, strSplit() As String
  Dim intIndex As Integer, IntC As Integer
  'INFO: strReference(1 To 10) anpassen an die Anzahl der Dateien (1 To n)
  
  'INFO: Pfad;Datei;Tabelle;1.Quellzelle;1.Zielzelle;2.QuellZelle;2.Zielzelle; ...
  strReference(1) = "E:\Forum;test.xls;Tabelle1;C5;A10;C6;B10"
  strReference(2) = "E:\Forum;test1.xls;Tabelle3;F11;B10"
  strReference(3) = "E:\Forum;test2.xls;Tabelle1;H5;C3"
  strReference(4) = "E:\Forum;test3.xls;Tabelle2;C5;A11"
  strReference(5) = "E:\Forum;test4.xls;Tabelle1;C5;A12"
  strReference(6) = "E:\Forum;test5.xls;Tabelle4;C5;A13"
  strReference(7) = "E:\Forum;test6.xls;Tabelle1;C5;A14"
  strReference(8) = "E:\Forum;test7.xls;Tabelle3;C5;A15"
  strReference(9) = "E:\Forum;test8.xls;Tabelle1;C5;A16"
  strReference(10) = "E:\Forum;test9.xls;Tabelle1;C5;A17"
  
  With ThisWorkbook.Sheets("Tabelle1") 'Zieltabelle
    For intIndex = LBound(strReference) To UBound(strReference)
      strSplit = Split(strReference(intIndex), ";")
      For IntC = 3 To UBound(strSplit) - 1 Step 2
        .Range(strSplit(IntC + 1)) = GetValue(strSplit(0), strSplit(1), strSplit(2), strSplit(IntC))
      Next
    Next
  End With
  
  startTimer
End Sub

Private Function GetValue(path As String, file As String, _
    sheet As String, ref As String)

  ' Retrieves a value from a closed workbook
  Dim arg As String
  ' Make sure the file exists
  If Right(path, 1) <> "\" Then path = path & "\"
  
  If Dir(path & file) = "" Then
    GetValue = "File Not Found"
    Exit Function
  End If
  
  ' Create the argument
  arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
    Range(ref).Range("A1").Address(, , xlR1C1)
  
  ' Execute an XLM macro
  GetValue = ExecuteExcel4Macro(arg)
End Function

Gruß Sepp

Anzeige
AW: geschlossene Dateien auslesen
24.02.2010 02:47:49
Mario
Ich kann garnicht sagen wie dankbar ich euch bin! Endlich geschafft. Hat alles funktioniert soweit;)
Super Forum!
Ich werd mich bestimmt nochmal hier melden wenns was gibt.
Bis dann
Mario

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige