Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的VBA脚本在Outlook中随机查找子文件夹,但有时却无法正常工作?_Vba_Excel_Outlook - Fatal编程技术网

为什么我的VBA脚本在Outlook中随机查找子文件夹,但有时却无法正常工作?

为什么我的VBA脚本在Outlook中随机查找子文件夹,但有时却无法正常工作?,vba,excel,outlook,Vba,Excel,Outlook,我在Excel VBA中有一个脚本,用于在工作时在共享收件箱的子文件夹中查找特定的电子邮件。团队中的每个人都有自己的个人收件箱,然后我们都可以访问团队的单个收件箱。我已签入Outlook库引用。大部分时间它都在我的电脑上工作。当我的同事尝试运行脚本时,它有时会工作,但通常不会运行。然后,每当我在我的机器上运行它,它就会工作,然后在我同事的机器上运行得非常好 当脚本试图将“userf”变量设置为Outlook.MAPIfolder对象时,它将失败。子文件夹存在于我们所有机器的共享收件箱中,因此我不

我在Excel VBA中有一个脚本,用于在工作时在共享收件箱的子文件夹中查找特定的电子邮件。团队中的每个人都有自己的个人收件箱,然后我们都可以访问团队的单个收件箱。我已签入Outlook库引用。大部分时间它都在我的电脑上工作。当我的同事尝试运行脚本时,它有时会工作,但通常不会运行。然后,每当我在我的机器上运行它,它就会工作,然后在我同事的机器上运行得非常好

当脚本试图将“userf”变量设置为
Outlook.MAPIfolder
对象时,它将失败。子文件夹存在于我们所有机器的共享收件箱中,因此我不确定它为什么随机工作,有时不工作

我在脚本崩溃的代码底部写了一条注释

代码如下:

Dim olNs As Outlook.Namespace
Dim f As Outlook.MAPIFolder, subf As Outlook.MAPIFolder, userf As Outlook.MAPIFolder
Dim currentitem As Object
Dim currentatt As Outlook.Attachment
Dim firstDayNo As Variant, monthNo As Variant
Dim wbMonth As String, attachmentname As String, fpath As String, rngName As String, datestring As String
Dim five9 As Outlook.Items, five9rng As Outlook.Items
Dim wbCopy As Workbook, wbPaste As Workbook
Dim ReadyDone As Boolean, CallsDone As Boolean, ACWDone As Boolean, LoginDone As Boolean, NotReadyDone As Boolean, monthReal As Boolean, dayReal As Boolean
Dim newdate As Date
Dim daysInMonthSelected As Long

monthReal = False
Do Until monthReal
monthNo = InputBox("Enter the month number you wish to create the Agent Reason Code Summary for.")
If monthNo = vbNullString Then
ThisWorkbook.Close savechanges:=False
ElseIf (monthNo < 1 Or monthNo > 12) Then
MsgBox "Input must be a numeric value between 1 and 12.  Try again."
Else
monthReal = True
End If
Loop

ReadyDone = False
CallsDone = False
ACWDone = False
LoginDone = False
NotReadyDone = False

Select Case monthNo
Case 1
wbMonth = "Jan"
Case 2
wbMonth = "Feb"
Case 3
wbMonth = "Mar"
Case 4
wbMonth = "Apr"
Case 5
wbMonth = "May"
Case 6
wbMonth = "Jun"
Case 7
wbMonth = "Jul"
Case 8
wbMonth = "Aug"
Case 9
wbMonth = "Sep"
Case 10
wbMonth = "Oct"
Case 11
wbMonth = "Nov"
Case 12
wbMonth = "Dec"
End Select

strMnth = CStr(monthNo)

yr = Year(Date)

ActiveWorkbook.SaveAs "\\hrn-prod-nas2\enrollment_operations\WFM\Agent Reason Code\" & yr & "\" & monthNo & " " & wbMonth & "_Agent Reason Code Summary.xlsm", FileFormat:=52

If strMnth = "" Then
ThisWorkbook.Close
Else

dayReal = False
Do Until dayReal
firstDayNo = InputBox("Enter the first day number.")

daysInMonthSelected = MonthDays(monthNo)
If firstDayNo = vbNullString Then
ThisWorkbook.Close savechanges:=False
ElseIf (firstDayNo < 1 Or firstDayNo > daysInMonthSelected) Then
MsgBox "Input must be a numeric value between 1 and " & daysInMonthSelected & ".  Try again."
Else
datestring = monthNo & "/" & firstDayNo & "/" & Year(Date)
newdate = CDate(datestring)
If newdate >= Date Then
MsgBox "You can only create an ARCS for days in the past.  Enter a date before today."
Else
dayReal = True
End If
End If
Loop

strFirstDay = CStr(firstDayNo)

If strFirstDay = "" Then
ThisWorkbook.Close
Else

Set olNs = GetNamespace("MAPI")
Set f = olNs.Folders("WFM")
Set subf = f.Folders("Inbox")
Set userf = subf.Folders("Five9 Reports") 'This line will throw a run-time error
Set five9 = userf.Items
Set five9rng = five9.restrict("[ReceivedTime]>'" & Format(newdate + 1, "DDDDD HH:NN") & "'")
Set five9rng = five9rng.restrict("[ReceivedTime]<'" & Format(newdate + 2, "DDDDD HH:NN") & "'")
Set wbPaste = ActiveWorkbook
Dim olNs作为Outlook.Namespace
Dim f作为Outlook.MAPIFolder,subf作为Outlook.MAPIFolder,userf作为Outlook.MAPIFolder
将当前项设置为对象
将currentatt设置为Outlook.Attachment
Dim firstDayNo作为变体,monthNo作为变体
Dim wbMonth作为字符串,attachmentname作为字符串,fpath作为字符串,rngName作为字符串,datestring作为字符串
将five9调暗为Outlook.Items,将five9rng调暗为Outlook.Items
将wbCopy设置为工作簿,将wbPaste设置为工作簿
Dim ReadyOne为布尔型,CallsOne为布尔型,ACWDone为布尔型,LoginOne为布尔型,NotReadyOne为布尔型,monthReal为布尔型,dayReal为布尔型
将newdate设置为日期
黯淡的一天选择了一个月
monthReal=假
你会一直干到三月吗
monthNo=InputBox(“输入您希望为其创建代理原因代码摘要的月份号。”)
如果monthNo=vbNullString,则
ThisWorkbook.Close savechanges:=False
ElseIf(monthNo<1或monthNo>12)则
MsgBox“输入必须是介于1和12之间的数值。请重试。”
其他的
monthReal=True
如果结束
环
ReadyDone=False
CallsDone=False
ACWDone=False
LoginDone=False
NotReadyDone=False
选择案例monthNo
案例1
wbMonth=“一月”
案例2
wbMonth=“二月”
案例3
wbMonth=“三月”
案例4
wbMonth=“四月”
案例5
wbMonth=“五月”
案例6
wbmount=“Jun”
案例7
wbMonth=“Jul”
案例8
wbMonth=“八月”
案例9
wbMonth=“九月”
案例10
wbMonth=“十月”
案例11
wbMonth=“11月”
案例12
wbMonth=“12月”
结束选择
strMnth=CStr(月)
年=年(日期)
ActiveWorkbook.SaveAs“\\hrn-prod-nas2\enrollment\u operations\WFM\Agent Reason Code\”&yr&“\”&monthNo&“&wbMonth&”\u Agent Reason Code Summary.xlsm”,文件格式:=52
如果strMnth=“”,则
此工作簿。关闭
其他的
dayReal=假
直到第二天
firstDayNo=InputBox(“输入第一天的编号”)
daysInMonthSelected=MonthDays(monthNo)
如果firstDayNo=vbNullString,则
ThisWorkbook.Close savechanges:=False
ElseIf(选择firstDayNo<1或firstDayNo>DaysInMonth)然后
MsgBox“输入必须是介于1和“&daysInMonthSelected&”之间的数值。请重试
其他的
datestring=monthNo&“/”&firstDayNo&“/”&Year(日期)
newdate=CDate(日期字符串)
如果newdate>=日期,则
MsgBox“您只能为过去的天创建弧。请输入今天之前的日期。”
其他的
dayReal=真
如果结束
如果结束
环
strFirstDay=CStr(firstDayNo)
如果strFirstDay=“”,则
此工作簿。关闭
其他的
设置olNs=GetNamespace(“MAPI”)
Set f=olNs.Folders(“WFM”)
Set subf=f.文件夹(“收件箱”)
Set userf=subf.Folders(“Five9报告”)'此行将抛出运行时错误
Set five9=userf.Items
设置five9rng=five9.restrict(“[ReceivedTime]>”&Format(newdate+1,“ddddddd HH:NN”)&“”)

设置five9rng=five9rng.restrict(“[ReceivedTime]作为旁注,您可以将大约14行代码清理为1。
wbMonth=Format(MonthNo&“/1/2017”,“mmm”)
当通过VBA引用时,Outlook在共享收件箱中找不到子文件夹,这是唯一的“解决办法”“我曾经发现,文件夹引用在Outlook打开后会立即持续工作。希望其他人知道Outlook设置或其他在VBA中解析文件夹的方法,从而解决此问题。@ScottHoltzman,甚至
wbMonth=MonthName(MonthNo,True)
将正确返回月份名称,而不考虑用户的默认日期格式。(您的
格式为我返回
“Jan”
,而不考虑月份,因为我生活在一个正常的dd/mm/yyyy国家/地区。))您的同事在Outlook中是否也设置了其他帐户/配置文件?outlook中文件夹窗格的屏幕截图将显示help@YowE3K-向上投票评论,在我的出生地旁边破解;)作为补充说明,您可以将大约14行代码整理成1行
wbMonth=Format(MonthNo&“/1/2017”,“mmm”)
我遇到过同样的问题,Outlook在通过VBA引用时无法在共享收件箱中找到子文件夹。我所发现的唯一“解决办法”是,文件夹引用在Outlook打开后会立即持续工作。希望其他人知道Outlook设置或其他解决VBA中文件夹问题的方法来解决此问题。@ScottHoltzman或甚至
wbMonth=MonthName(MonthNo,True)
,无论用户的默认日期格式如何,它都会正确返回月份名称。(您的
格式
为我返回
“Jan”
,不考虑月份,因为我生活在一个正常的国家/地区。;)您的同事在Outlook中是否也设置了其他帐户/配置文件?outlook中文件夹窗格的屏幕截图将显示help@YowE3K-向上投票评论,在我的出生地旁边破解;)