Sub test()
thesentence = InputBox("Type the filename with full extension", "Raw Data File")
Range("A1").Value = thesentence
If Dir("thesentence") <> "" Then
MsgBox "File exists."
Else
MsgBox "File doesn't exist."
End If
End Sub
En cela, lorsque je récupère la valeur de texte dans la zone de saisie, cela ne fonctionne pas. Si cependant, si supprime "the sentence"
de If Dir()
et le remplace par un nom réel dans le code, cela fonctionne. Quelqu'un peut aider?
Notez que votre code contient Dir("thesentence")
qui devrait être Dir(thesentence)
.
Changez votre code pour cela
Sub test()
thesentence = InputBox("Type the filename with full extension", "Raw Data File")
Range("A1").Value = thesentence
If Dir(thesentence) <> "" Then
MsgBox "File exists."
Else
MsgBox "File doesn't exist."
End If
End Sub
Utilisez l'objet Office FileDialog
pour que l'utilisateur sélectionne un fichier dans le système de fichiers. Ajoutez une référence dans votre projet VB ou dans l'éditeur VBA à Microsoft Office Library
et consultez l'aide. C'est beaucoup mieux que d'avoir des gens qui entrent dans des chemins pleins.
Voici un exemple utilisant msoFileDialogFilePicker
pour permettre à l'utilisateur de choisir plusieurs fichiers. Vous pouvez également utiliser msoFileDialogOpen
.
'Note: this is Excel VBA code
Public Sub LogReader()
Dim Pos As Long
Dim Dialog As Office.FileDialog
Set Dialog = Application.FileDialog(msoFileDialogFilePicker)
With Dialog
.AllowMultiSelect = True
.ButtonName = "C&onvert"
.Filters.Clear
.Filters.Add "Log Files", "*.log", 1
.Title = "Convert Logs to Excel Files"
.InitialFileName = "C:\InitialPath\"
.InitialView = msoFileDialogViewList
If .Show Then
For Pos = 1 To .SelectedItems.Count
LogRead .SelectedItems.Item(Pos) ' process each file
Next
End If
End With
End Sub
Il existe de nombreuses options. Vous devez donc consulter l'intégralité des fichiers d'aide pour comprendre tout ce qui est possible. Vous pouvez commencer par Objet Office 2007 FileDialog ((vous devrez bien sûr trouver l’aide appropriée pour la version que vous utilisez).
Correction à fileExists de @UberNubIsTrue:
Function fileExists(s_directory As String, s_fileName As String) As Boolean
Dim obj_fso As Object, obj_dir As Object, obj_file As Object
Dim ret As Boolean
Set obj_fso = CreateObject("Scripting.FileSystemObject")
Set obj_dir = obj_fso.GetFolder(s_directory)
ret = False
For Each obj_file In obj_dir.Files
If obj_fso.fileExists(s_directory & "\" & s_fileName) = True Then
ret = True
Exit For
End If
Next
Set obj_fso = Nothing
Set obj_dir = Nothing
fileExists = ret
End Function
EDIT: version abrégée
' Check if a file exists
Function fileExists(s_directory As String, s_fileName As String) As Boolean
Dim obj_fso As Object
Set obj_fso = CreateObject("Scripting.FileSystemObject")
fileExists = obj_fso.fileExists(s_directory & "\" & s_fileName)
End Function
juste se débarrasser de ces marques de discours
Sub test()
Dim thesentence As String
thesentence = InputBox("Type the filename with full extension", "Raw Data File")
Range("A1").Value = thesentence
If Dir(thesentence) <> "" Then
MsgBox "File exists."
Else
MsgBox "File doesn't exist."
End If
End Sub
C'est celui que j'aime bien:
Option Explicit
Enum IsFileOpenStatus
ExistsAndClosedOrReadOnly = 0
ExistsAndOpenSoBlocked = 1
NotExists = 2
End Enum
Function IsFileReadOnlyOpen(FileName As String) As IsFileOpenStatus
With New FileSystemObject
If Not .FileExists(FileName) Then
IsFileReadOnlyOpen = 2 ' NotExists = 2
Exit Function 'Or not - I don't know if you want to create the file or exit in that case.
End If
End With
Dim iFilenum As Long
Dim iErr As Long
On Error Resume Next
iFilenum = FreeFile()
Open FileName For Input Lock Read As #iFilenum
Close iFilenum
iErr = Err
On Error GoTo 0
Select Case iErr
Case 0: IsFileReadOnlyOpen = 0 'ExistsAndClosedOrReadOnly = 0
Case 70: IsFileReadOnlyOpen = 1 'ExistsAndOpenSoBlocked = 1
Case Else: IsFileReadOnlyOpen = 1 'Error iErr
End Select
End Function 'IsFileReadOnlyOpen
Function FileExists(fullFileName As String) As Boolean
FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End Function
Fonctionne très bien, presque, sur mon site. Si je l'appelle avec "" la chaîne vide, Dir renvoie " connection.odc " !! Ce serait génial si vous pouviez partager votre résultat.
En tout cas, j'aime ça:
Function FileExists(fullFileName As String) As Boolean
If fullFileName = "" Then
FileExists = False
Else
FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End If
End Function
Function FileExists(fullFileName As String) As Boolean
FileExists = VBA.Len(VBA.Dir(fullFileName)) > 0
End Function
Je ne sais pas ce qui ne va pas dans votre code, mais j'utilise cette fonction trouvée en ligne (URL dans les commentaires) pour vérifier l'existence d'un fichier
Private Function File_Exists(ByVal sPathName As String, Optional Directory As Boolean) As Boolean
'Code from internet: http://vbadud.blogspot.com/2007/04/vba-function-to-check-file-existence.html
'Returns True if the passed sPathName exist
'Otherwise returns False
On Error Resume Next
If sPathName <> "" Then
If IsMissing(Directory) Or Directory = False Then
File_Exists = (Dir$(sPathName) <> "")
Else
File_Exists = (Dir$(sPathName, vbDirectory) <> "")
End If
End If
End Function
sur la base d'autres réponses ici, je voudrais partager mes one-liners qui devrait fonctionner pour les répertoires et les fichiers:
Len(Dir(path)) > 0 or Or Len(Dir(path, vbDirectory)) > 0 'version 1 - ... <> "" should be more inefficient generally
Len(Dir(path))
ne fonctionnait pas pour les répertoires (Excel 2010/Win7))CreateObject("Scripting.FileSystemObject").FileExists(path) 'version 2 - could be faster sometimes, but only works for files (tested on Excel 2010/Win7)
comme fonction PathExists(path)
:
Public Function PathExists(path As String) As Boolean
PathExists = Len(Dir(path)) > 0 Or Len(Dir(path, vbDirectory)) > 0
End Function
Très vieux post, mais comme cela m'a aidé après quelques modifications, j'ai pensé partager. Si vous vérifiez si un répertoire existe, vous voudrez ajouter l'argument vbDirectory à la fonction Dir, sinon vous renverrez 0
à chaque fois. (Edit: c'était en réponse à la réponse de Roy, mais j'ai accidentellement fait une réponse régulière.)
Private Function FileExists(fullFileName As String) As Boolean
FileExists = Len(Dir(fullFileName, vbDirectory)) > 0
End Function