2016-07-20 9 views
0

Ich erstelle ein Programm, das eine Datei in einem angegebenen Dateipfad aus einer langen Liste von Dateien öffnet. Sie alle haben das gleiche Namensformat, aber sie sind nicht alle .xlsx Dateiformat, einige sind .xlsm Format.Dateiformat Test

For file = 2 To 200 
If RefSheet.Cells(file, 1) = "" Then Exit For 'no more data, end now 

     If KeepOpen Then 
      'continue as is, because already open 
     Else 
      Set InBook = Workbooks.Open(Filename:=RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2), UpdateLinks:=False, ReadOnly:=True) 

     End if 
End If 

Ich versuche, einen einfachen Test, der würde erste Textdateinamen für XLSX/XLSM zu machen, bevor zu öffnen versucht, aber kann nicht scheinen, um es richtig zu machen.

Haben Sie versucht die Fehlerbehandlung zu tun, aber es wird nicht ausführen

+0

Ist der Code, den Sie VBA teilen? Bitte fügen Sie das zugehörige Tag hinzu, wenn es –

+0

ist. Enthält Ihr Dateiname (Spalte B von RefSheet?) nicht die Dateierweiterung, und Ihr Problem ist, dass Sie nicht wissen, welches zu verwenden? – YowE3K

+0

Danke für Ihre Antwort. Was ich wirklich testen muss, ist das Format der eigentlichen Datei im Ordner. Es ist einfach genug, meinen Pfadnamen zu testen, aber ich muss in der Lage sein zu sehen, ob die eigentliche Datei .xlsx oder .xlsm ist. Dann muss ich den Namen in Spalte B mit .xlsx oder .xlsm entsprechend ändern – rCorn

Antwort

0
gewünschten Code
Set InBook = Workbooks.Open(Filename:=RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2), UpdateLinks:=False, ReadOnly:=True) 

zu

Dim fName As String 
If Dir(RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2))<>"" Then 
    fName = RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) 
ElseIf Dir(RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".xlsm")<>"" Then 
    fName = RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".xlsm" 
Else 
    fName = RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".xlsx" 
End If 
Set InBook = Workbooks.Open(Filename:=fName, UpdateLinks:=False, ReadOnly:=True) 

Dies wird erste Test von

ändern

, wenn der Dateiname zu sehen ist genau so, wie es in Spalte B aufgezeichnet ist. Wenn nicht, wird es sehen, ob eine Datei mit einer "xlsm" -Extension existiert, und wenn ja, benutze sie. Andernfalls wird angenommen, dass die Datei die Erweiterung "xlsx" hat.

Eine alternative Methode (was wahrscheinlich auch mit csv und txt-Dateien funktionieren wird) wäre:

Dim fName As String 
'The Dir command will just return the filename.extension portion of the first file that matches the specification 
fName = Dir(RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ".*") 
If fName = "" Then 
    'No matching file was found 
    MsgBox "File requested (" & RefSheet.Cells(file, 1) & RefSheet.Cells(file, 2) & ") does not exist" 
Else 
    'Concatenate the path and filename.extension together and open the file 
    Set InBook = Workbooks.Open(Filename:=RefSheet.Cells(file, 1) & fName, UpdateLinks:=False, ReadOnly:=True) 
End If 

P. S. Die Deklaration von fName kann an den Anfang Ihres Subs (oder der Funktion) verschoben werden, wenn Sie es vorziehen, dass alle Ihre Deklarationen im Voraus ausgeführt werden.