Ok. Keine Ahnung vorher du die Dateinamen nimmst - könnte man z.B. in Excel in Zellen untereinander auflisten.
Ich gehe hier jedoch mal den Weg über ein Datenfeld (Array):
Option Explicit
Sub Test()
Dim wkb As Excel.Workbook
Dim rngResult As Excel.Range
Dim vntFileList As Variant
Dim vntFile As Variant
vntFileList = Array("H:\Test1.xlsx", _
"H:\Test2.xlsx", _
"H:\Test3.xlsx")
For Each vntFile In vntFileList
'Mappe referenzieren (wir öffnen sie hier zugleich)
Set wkb = Workbooks.Open(vntFile)
'sicher stellen, dass sie im Vordergrund ist
' (nach einem Workbooks.Open() eigentlich immer autom. der Fall - trotzdem)
Call wkb.Activate
'der Nutzer soll jetzt den Bereich auswählen
On Error Resume Next
Set rngResult = Nothing
Set rngResult = Application.InputBox("Range", Type:=8)
On Error GoTo 0
If rngResult Is Nothing Then
'hier wurde auf Abbrechen geklickt
' ... also nix zu tun für uns
Else
'theoretisch kann der Benutzer anstatt einer Zelle auch einen Bereich auswählen
' Wie soll darauf reagiert werden?
' * darauf bestehen, das er nur eine Zelle auswählt
' * einfach die erste im Bereich nehmen (<- diese Variante wird hier gewählt)
Call MsgBox("Zelle: " & rngResult.Cells(1).Address & vbNewLine & _
"Wert: " & rngResult.Cells(1).Value, vbInformation)
End If
'Mappe schließen
Call wkb.Close(SaveChanges:=False)
Next
End Sub
Das makro öffnet nacheinander die drei Mappen, fragt bei jeder nach dem Bereich und gibt denn die Zell-Adresse und dessen Inhalt aus und schließt die Mappe dann wieder.
Falls der Benutzer auf Abbrechen klickt, wird die Mappe sozusagen übersprungen.
Nun bin ich mir noch nicht ganz sicher wohin mit den Werten. Willst du die erst sammeln und dann ausgeben, oder gleich, sobald du sie hast z.B. in einer Zelle in einer anderen Mappe - oder in der, in der dieses Makro läuft - ausgeben?
|