【发布时间】:2020-01-20 16:52:19
【问题描述】:
公司向客户发送发票。我创建了一个宏,它将客户的发票放入他们的文件夹中,存储在该发票的创建年份之下。
鉴于现在是 2020 年 1 月,发票将存储在 2020 文件夹下,然后按客户名称存储。
一旦 2020 年结束并且尚未创建 2021 年文件夹,我当前的代码是否会妥善处理这个问题?
代码确定客户端文件夹是否已存在,以及是否没有在当前年份下创建以该客户端名称作为文件夹的文件夹。
我假设在接下来的几年中会出现某种类型的错误,因为这些文件夹尚未创建。
我希望它不会出错,而是转到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
【问题讨论】:
-
你的程序有太多的责任。将代码移动到较小的过程范围(根据需要传递参数),这样您就可以限制它失败的原因。负责创建新年文件夹的东西不应该同时负责发送电子邮件或弹出任何消息框。
标签: excel vba error-handling