Проверьте наличие папки / файлов - PullRequest
0 голосов
/ 12 декабря 2018
Sub CWSSCheck()

If ActiveSheet.Name = "Position_by_Fixture" Then

Call FileCheck

ElseIf ActiveSheet.Name = "Group_PositionList" Then
MsgBox "This is the Group Position List. Convert the Shelfstock to the old 
format using the 'Convert Shelfstock' function and try again.", vbExclamation, "Invalid Format"

Else
MsgBox "This workbook doesn't have a Shelfstock sheet. Please open a valid Shelfstock file and try again.", vbExclamation, "Shelfstock Not Found"

End If
End Sub

Sub FileCheck()

'Check the REQUIRED FILES folder
UserForm1.Show

Dim RFPath As String
Dim UOLPath As String
Dim SOLPath As String

RFPath = ""
On Error Resume Next
RFPath = Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\"
On Error GoTo 0

UOLPath = ""
On Error Resume Next
UOLPath = Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\UPDATED_OUTLET_LIST.xlsx"
On Error GoTo 0

SOLPath = ""
On Error Resume Next
SOLPath = Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\SAP_OUTLET_LIST.xlsx"
On Error GoTo 0

If RFPath = "" Then
    UserForm1.CheckBox3.Value = False
Else
    UserForm1.CheckBox3.Value = True
End If

If SOLPath = "" Then
    UserForm1.CheckBox2.Value = False
Else
    UserForm1.CheckBox2.Value = True
End If

If UOLPath = "" Then
    UserForm1.CheckBox1.Value = False
Else
    UserForm1.CheckBox1.Value = True
End 

End Sub

Я написал следующий код для проверки папки на рабочем столе пользователя и двух файлов в этой папке, а затем обновил три флажка в пользовательской форме.

Но каждый раз, когда я запускаю это, я получаю разные результаты, независимо от наличия файлов в указанной папке.Кажется, код проверяет флажки случайным образом.

Мне трудно понять, что не так с кодом.Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Я бы посоветовал использовать file scripting object, чтобы избежать нестабильности, когда вы можете столкнуться с проблемами при зацикливании функции:

Sub FileCheck()
Dim FSO As Object
Dim CheckForFolder As Boolean, CheckForFile1 As Boolean, CheckForFile2 As Boolean

Set FSO = CreateObject("Scripting.FileSystemObject")
CheckForFolder = False
CheckForFile1 = False
CheckForFile2 = False

'Check the REQUIRED FILES folder
UserForm1.Show

If FSO.FolderExists(Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\") Then CheckForFolder = True ' Checks for the folder. If it exsists, set boolean to "True"

If FSO.FileExists(Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\UPDATED_OUTLET_LIST.xlsx") Then CheckForFile1 = True ' Checks for the 1st file. If it exsists, set boolean to "True"

If FSO.FileExists(Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\SAP_OUTLET_LIST.xlsx") Then CheckForFile2 = True ' Checks for the 2nd file. If it exsists, set boolean to "True"


If CheckForFolder = False Then ' Checks the boolean, asings the checkbox accordingly
    UserForm1.CheckBox3.Value = False
Else
    UserForm1.CheckBox3.Value = True
End If

If CheckForFile2 = False Then ' Checks the boolean, asings the checkbox accordingly
    UserForm1.CheckBox2.Value = False
Else
    UserForm1.CheckBox2.Value = True
End If

If CheckForFile1 = False Then ' Checks the boolean, asings the checkbox accordingly
    UserForm1.CheckBox1.Value = False
Else
    UserForm1.CheckBox1.Value = True
End

Set FSO = Nothing 'Tidy up the memory

End Sub
0 голосов
/ 12 декабря 2018
RFPath = ""
On Error Resume Next
RFPath = Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\"
On Error GoTo 0

Вы создаете путь в строковой переменной, но не проверяете, существует он или нет.Используйте эту функцию

Public Function FileFolderExists(strFullPath As String) As Boolean
    On Error GoTo EarlyExit
    If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True
EarlyExit:
    On Error GoTo 0
End Function

Пример:

Debug.Print FileFolderExists(RFPath)

Также для хранения в строковой переменной вам не нужно On Error Resume Next.Вы можете напрямую сделать

RFPath = Environ("USERPROFILE") & "\Desktop\REQUIRED FILES\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...