Проверка данных для создания новых папок - PullRequest
1 голос
/ 20 января 2020

Может ли кто-нибудь проверить мой текущий код, чтобы убедиться, что он правильно написан?

Короче говоря, в настоящее время я стажируюсь в компании, которая отвечает за рассылку счетов клиентам. Я создал макрос, который будет помещать счета клиентов в их папку, которая хранится в том году, в котором был создан этот счет. Учитывая, что это январь 2020 года, все счета будут храниться в папке 2020, а затем по имени клиента. Я обеспокоен тем, что после окончания 2020 года и что папка 2021 еще не создана. Будет ли мой текущий код обрабатывать это соответствующим образом?

Текущий код определяет, существует ли папка клиента, и если нет, то создаст папку в текущем году с именем этого клиента в качестве папки. И так как у меня уже есть созданная папка 2020 года, я предполагаю, что в течение следующих лет будут какие-то ошибки, потому что эти папки еще не созданы.

Моя текущая надежда состоит в том, что, если на самом деле эта годовая папка не была создана, вместо ошибки времени выполнения, то она будет go к ErrorHandlerCreateNewYearFolder, который затем сначала создаст путь к папке и создаст новая папка в этом году, а затем оттуда создайте новую папку для клиентов в этот новый год. Это мой текущий код:

If fdObj.FolderExists("C:\Users\" & strInvoiceYear & "\ " & GroupID) Then 'if the Clients folder already exists....
    Call EmailClient((EmailValue), (GroupID)) '...then the necessary data required is already availiable, so it calls to the EmailClient sub function
Else

    On Error GoTo ErrorHandlerCreateNewYearFolder ' In the occation of a potential error, the code below will skip the run time error and try its best to handle this
        fdObj.CreateFolder ("C:\Users\" & strInvoiceYear & "\ " & GroupID)
    Exit Sub
    ' INSIGHT: THE LINE OF CODE BELOW CREATES A FOLDER THAT CONTAINS THE GROUPID OF A CLIENT WITHIN THAT YEAR. SO GIVEN THAT THE CURRENT YEAR IS 2020, IT WILL STORE ALL INVOICES WITHIN THAT FOLDER
    ' HOWEVER, THERE IS NO CURRENT 2021,2020, ETC FOLDERS, SO THIS LINE OF CODE WILL BE UNABLE TO DETERMINE THE CORRECT PATH OF strInvoiceYear BECAUSE THIS VARIABLE'S (THAT CURRENT YEAR) FOLDER HAS
    ' YET TO HAVE BEEN CREATED. SO THERE MAY BE A RUN TIME ERROR. HOWEVER, THIS CODE BELOW SHOULD HELP OVERCOME THIS POTENTIAL ISSUE

ErrorHandlerCreateNewYearFolder: 'THIS IS AN ERROR HANDLER, SO IF THE NEW YEAR STARTS, LIKE 2021, AND NO 2021 FOLDER HAS BEEN CREATED, THE PROGRAM WILL GO HERE
    fdObj.CreateFolder ("C:\Users\" & strInvoiceYear)  ' IN WHICH THE PROGRAM WILL THEN CREATE THE NEW YEAR FOLDER
    fdObj.CreateFolder ("C:\Users\" & strInvoiceYear & "\ " & GroupID) ' AND THEN CREATE THE NEW CLIENT FOLDER OF THAT YEAR
    Resume Next

    MsgBox ("Folder created successfully."), vbInformation ' notifies user that a new folder has been created for the client
    Call EmailClient((EmailValue), (GroupID)) ' This then calls to the EmailClient sub function where the data from that client will then be emailed to them
End If

Я надеюсь, что этого достаточно, чтобы помочь решить эту проблему.

Любая помощь приветствуется!

1 Ответ

1 голос
/ 20 января 2020

Я не вижу необходимости в обработчике ошибок здесь. Это довольно просто.

Я вытащил Call. Мы звоним EmailClient несмотря ни на что, поэтому вам не нужно вкладывать его в свои условные выражения. Вместо этого запустите ваши проверки, при необходимости создайте папку, затем наберите EmailClient с тем, что у вас есть.

Ваши первые условные проверки, если папка существует. Если это так, отлично, больше не нужно условного. Если это не так, его родитель? Если ответ нет, сделайте это. Если ответ да, сделайте ребенка. Затем отправьте.

If fdObj.FolderExists("C:\Users\" & strInvoiceYear & "\ " & GroupID) = True Then

'Check if the parent folder exists (returns true if it doesn't)
ElseIf fdObj.FolderExists("C:\Users\" & strInvoiceYear) = False Then
    'Create parent
    fdObj.CreateFolder ("C:\Users\" & strInvoiceYear)
    'Create group folder
    fdObj.CreateFolder ("C:\Users\" & strInvoiceYear & "\ " & GroupID)
Else
    fdObj.CreateFolder ("C:\Users\" & strInvoiceYear & "\ " & GroupID)
End If

Call EmailClient((EmailValue), (GroupID))

End Sub

Если вы действительно хотите добавить обработчик ошибок, я бы поставил его перед вызовом EmailClient или внутри EmailClient. То, что вы делаете здесь, должно быть предельно простым с правильным условным форматированием.

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

В идеале вы должны использовать If Not, чтобы вообще пропустить первый пункт, но я хотел, чтобы он читался для вас, учитывая количество предоставленного вами кода.

...