PDA

Vollständige Version anzeigen : Excel Datei öffnen


derhard
03.10.2016, 10:16
Hallo,

Bitte um VBA Hilfe!

In dem Verzeichnis D:\Excel_Dateien
befinden sich weitere Unterverzeichnisse mit Excel Arbeitsmappen.

In einer Übersichtsmappe sind all diese Dateien namentlich erfasst.

Wie wird mir aus der Übersichtmappe die ausgewählte Datei in der momentan Aktiven Zelle in dem der Name z.B xyz.xls steht aus dem Verzeichnis D:\Excel_Dateien und deren Unterverzeichnisse gesucht und diese Arbeitsmappe geöffnet?

Vielen für Eure Hilfe
Gruß Derhard

Storax
03.10.2016, 10:27
https://support.office.com/en-us/article/HYPERLINK-function-333c7ce6-c5ae-4164-9c47-7de9b76f577f

derhard
03.10.2016, 10:37
Hi,
gibt es keine VBA Lösung?

Gruß Derhard

RPP63neu
03.10.2016, 10:47
Moin!
Ich empfinde die Hyperlink-Lösung auch als das Sinnvollste.
"Reines" VBA wäre doch ein simples Workbooks.Open(PfadZurDatei)

Nebenbei:
Das Durchsuchen der Unterverzeichnisse ist doch eher kontraproduktiv.
Was ist mit Dubletten in verschiedenen UV?
Warum keine zusätzliche Spalte mit dem jeweiligen UV?
Dann wäre es ein einfaches
<pre style='border:thin solid #000000; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Sub</span> RPP() <span style='color:#0000EE'>With</span> Selection <span style='color:#0000EE'>If</span> .Count &gt; <span style='color:#FF0080'>1</span> <span style='color:#0000EE'>Then</span> <span style='color:#0000EE'>Exit</span> <span style='color:#0000EE'>Sub</span> Workbooks.Open <span style='color:#FF0000'>&quot;D:\Excel_Dateien\&quot;</span> & .Offset(<span style='color:#FF0080'>0</span>, <span style='color:#FF0080'>1</span>) & <span style='color:#FF0000'>&quot;\&quot;</span> & .Value <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span></pre>

Gruß Ralf

derhard
03.10.2016, 12:55
Hallo Ralf,

Bei deinem Markro erscheint Fehlermeldung:
Laufzeitfehler 1004'

Die markierte Datei ist aber definitiv vorhanden!

Gruß Derhard

Storax
03.10.2016, 13:26
1004 kommt, wenn es die Datei nicht gibt!!
Debuggen hilft und dann schau Dir an, was im Dateinamen steht.

RPP63neu
03.10.2016, 13:45
Was ergibt denn der Offset der Selection & .Offset(0, 1) & "\"?
Bei mir ist das Unterverzeichnis rechts vom Dateinamen, aber das weist Du ja sicherlich.

Gruß Ralf

derhard
03.10.2016, 19:23
Hallo
Das Makro funktioniert dann, wenn ich den kompletten Pfad eingebe wo die Datei abgelegt ist.
Es sollte aber auch funktionieren, wenn nur der Haupt Pfad eingeben ist und in
weiteren Unterverzeichnissen die Datei gesucht gefunden und dann geladen wird!!

Gruß Derhard

Storax
03.10.2016, 19:27
Ja, so ist das "Makro" aufgebaut :( und hier weiß keiner, was genau in Deiner Datei steht und wie Deine Verzeichnisstruktur aussieht.
Sollen jetzt ausgehend vom "Hauptverzeichnis" alle Unterverzeichnisse durchsucht werden?
http://stackoverflow.com/questions/20687810/vba-macro-that-search-for-file-in-multiple-subfolders
Was soll passieren, wenn die Datei mehrmals vorhanden ist?

derhard
03.10.2016, 19:44
Hallo,
Zu 1: Ja ausgehend vom Hauptverzeichnis sollen alle Unterverzeichnisse durchsucht werden!
Zu 2: Es sollten normalerweise keine Dateien mehrmals vorkommen!
Sollte dies einmal der Fall dann sollte vielleicht ein Hinweis Dialog darauf
aufmerksam gemacht werden!

Vielen Dank
Gruß Derhard

Storax
03.10.2016, 20:21
Dann nimm den Code aus dem LinkSub GetFiles(StartFolder As String, Pattern As String, _
DoSubfolders As Boolean, ByRef colFiles As Collection)

Dim f As String, sf As String, subF As New Collection, s

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

f = Dir(StartFolder & Pattern)
Do While Len(f) > 0
colFiles.Add StartFolder & f
f = Dir()
Loop

sf = Dir(StartFolder, vbDirectory)
Do While Len(sf) > 0
If sf <> "." And sf <> ".." Then
If (GetAttr(StartFolder & sf) And vbDirectory) <> 0 Then
subF.Add StartFolder & sf
End If
End If
sf = Dir()
Loop

For Each s In subF
GetFiles CStr(s), Pattern, True, colFiles
Next s

End SubDer liefert Dir das gewünschte, z.B. soSub TesterA()

Const START_DIR = "-Start-Verzecihnis anpassen-"
Dim colFiles As New Collection
Dim fName As String
Dim anzFiles As Long
Dim rg As Range

Set rg = Selection

If rg.Cells.Count > 1 Then
MsgBox "Auswahl 'zu groß'"
Exit Sub
End If

' Die Selection sollte einen Dateiname liefern
fName = rg.Value
If Len(fName) = 0 Then
MsgBox "Auswahl ist leer"
Exit Sub
End If

GetFiles START_DIR, fName, True, colFiles
anzFiles = colFiles.Count

Select Case colFiles.Count
Case 0
MsgBox fName & " Datei nicht gefunden"
Case 1
Workbooks.Open START_DIR & fName
Case Else
MsgBox fName & " gibt es " & anzFiles & "-mal"
End Select

End Sub

derhard
03.10.2016, 21:00
Hallo,
auch mit dem neuen Code bringt er Laufzeitfehler 1004!

gelb unterstrichen
Workbooks.Open START_DIR & fName

Gruß Derhard

Storax
03.10.2016, 21:03
Wahrscheinlich hast Du das START_DIR "falsch" eingegeben. Wenn Du so etwas nicht alleine rauskriegst ...
Last Call: Beispieldatei (mit dem Code!)
Public Function TrailingSlash(strFolder As String) As String
If Len(strFolder) > 0 Then
If Right(strFolder, 1) = "\" Then
TrailingSlash = strFolder
Else
TrailingSlash = strFolder & "\"
End If
End If
Sub TesterA()

Const START_DIR = "-Start-Verzecihnis anpassen-"

Dim colFiles As New Collection
Dim fName As String
Dim anzFiles As Long
Dim rg As Range

Set rg = Selection

If rg.Cells.Count > 1 Then
MsgBox "Auswahl 'zu groß'"
Exit Sub
End If

' Die Selection sollte einen Dateiname liefern
fName = rg.Value
If Len(fName) = 0 Then
MsgBox "Auswahl ist leer"
Exit Sub
End If

GetFiles START_DIR, fName, True, colFiles
anzFiles = colFiles.Count

Select Case colFiles.Count
Case 0
MsgBox fName & " Datei nicht gefunden"
Case 1
Workbooks.Open TrailingSlash(START_DIR) & fName
Case Else
MsgBox fName & " gibt es " & anzFiles & "-mal"
End Select

End Sub

derhard
03.10.2016, 21:42
Hallo,
Auch mit diesem Code funktioniert es nicht. Die Datei wird erst geladen, wenn
in der Start Dir auch das Unterverzeichnis in dem sich die Datei befindet angegeben ist!!!

Gruß Derhard

Storax
03.10.2016, 22:01
Bei mir funktioniert der Code, so wie ich mir das vorstelle. Und da Du keine Beispieldatei hochlädst, Deine Fehlerbeschreibungen minimal sind, war es das für mich ...