2014-12-17 3 views
2

Я использую VBA в MS Access, и один из подэлементов принимает путь к файлу в сети, проверяет, существует ли файл или нет, и записывает результат запроса на Это. Проблема в том, что когда я пытаюсь запустить код, он дает мне ошибку 52 (неверное имя файла или номер). Но если я сначала открою сетевой путь в проводнике Windows, то после этого ошибка больше не произойдет. Любые идеи о том, что может быть проблемой?Путь к сетевому файлу не открывается в VBA/MSAccess

Вот некоторые из кода я бегу:

fpath = "\\networkpath\file.txt" 
DeleteFile fpath 

Sub DeleteFile(ByVal FileToDelete As String) 
    FileExists(FileToDelete) Then 
     SetAttr FileToDelete, vbNormal 
     FileToDelete 
    End If 
End Sub 

Function FileExists(ByVal FileToTest As String) As Boolean 
    FileExists = (Dir(FileToTest) <> "") 'this is where the error happens 
End Function 
+1

Если он запрашивает ошибку во время работы без ручного доступа к папке, во-первых, скорее всего, есть проблема разрешения доступа к папке – Alex

+1

Смотрите, если вы можете работать с этим: http://allenbrowne.com/func-11.html .. Играйте с файловым путем, поскольку мы LL. –

+1

Это путь WebDAV? Я видел это поведение с этим типом пути, но не имею чистого решения. Вы можете * попробовать открыть проводник по этому пути через VBA, прежде чем проверять, существует ли файл. –

ответ

2

путь UNC используется Содержит ли какие-либо не-ASCII символы, как акценты? Каков точный путь?

Ни одна из файловых функций в VBA не работает в любом случае с Unicode.

Вы можете попробовать использовать FileSystemObject для достижения того же немного более надежно, чем встроенные VBA функции:

Public Function FileExists(filePath as string) as Boolean 
    Dim o As Object 
    Set o = CreateObject("Scripting.FileSystemObject") 
    FileExists = o.FileExists(filePath) 
End Function 

Альтернативой с использованием API ТНА Win32 работает в 32 и 64-битных средах:

Private Const INVALID_FILE_ATTRIBUTES As Long = -1 

#If VBA7 Then ' Win API Declarations for 32 and 64 bit versions of Office 2010 and later 
    Private Declare PtrSafe Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesW" (ByVal lpFileName As LongPtr) As Long 
#Else ' WIN API Declarations for Office 2007 
    Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesW" (ByVal lpFileName As Long) As Long 
#End If 

Public Function FileExists(fname As Variant) As Boolean 
    If IsNull(fname) Or IsEmpty(fname) Then Exit Function 
    ' Make sure that we can take care of paths longer than 260 characters 
    If Left$(fname, 2) = "\\" Then 
     FileExists = GetFileAttributes(StrPtr("\\?\UNC" & Mid$(fname, 2))) <> INVALID_FILE_ATTRIBUTES 
    Else 
     FileExists = GetFileAttributes(StrPtr("\\?\" & fname)) <> INVALID_FILE_ATTRIBUTES 
    End If 
End Function 
+0

, к сожалению, он не работает. проблема, видимо, есть что-то с разрешениями. +1 хотя для подсказки и кода для чтения файла – htcoelho

Смежные вопросы