vba - 1 次迭代后仅弹出一次 MsgBox
问题描述
无论此代码中tpred的数量如何,我都希望弹出窗口只显示一次。如何使用循环中的所有示例打开一个弹出窗口。现在我需要用是按钮确认每个发现。
该宏在 MS Project 中用于触发任务并检查 predesessor 是否完整。如果有多个前任,则弹出窗口与每个前任一起出现。
我在 VBA 方面很差,所以会很感激你的帮助。
For Each T In ActiveSelection.Tasks
reportingTeam = T.Text3
RICEF = T.Text21
UniqueID = T.UniqueID
TaskName = T.Name
completion = T.PercentComplete
Duration = T.Duration / 60 & " hour/s"
Start = DatePart("d", T.Start) & "." & DatePart("m", T.Start) & "." & DatePart("yyyy", T.Start)
Finish = DatePart("d", T.Finish) & "." & DatePart("m", T.Finish) & "." & DatePart("yyyy", T.Finish)
primaryres = T.Text4
DataTeamResp = T.Text23
recip2 = T.Text25
reso = T.ResourceNames
SPOC = T.Text10
' check if task isnt trigered?
If completion > 0 Then
MsgBox ("Task already triggered")
Exit Sub
End If
For Each tpred In T.PredecessorTasks
compl = compl & tpred.PercentComplete
prednewid = prednewid & vbNewLine & tpred.UniqueID & "<br />"
prednnazwa = prednnazwa & vbNewLine & tpred.Name & "<br />"
predres = predres & vbNewLine & tpred.ResourceNames & "<br />"
predSPOC = predSPOC & vbNewLine & tpred.Text10 & "<br />"
predcomp = predcomp & vbNewLine & tpred.PercentComplete & " %" & "<br />"
If compl <> 100 Then
info = info & vbNewLine & tpred.UniqueID & " -> " & tpred.Name & " -> " & tpred.PercentComplete & " %" & " -> " & tpred.ResourceNames
If MsgBox("For the: " & T.UniqueID & " -> " & T.Name & vbNewLine & "following predecessors are not complete: " & vbNewLine & info & vbNewLine & vbNewLine & "Do you still want to trigger this task?", vbYesNo) = vbNo Then
info = ""
Exit Sub
End If
End If
Next tpred
T.PercentComplete = 5
completion = T.PercentComplete / 100
Next T
解决方案
添加一个变量来跟踪所有前辈是否完整,并将未完成前辈的消息框移到循环外:
Dim AllPredsComplete As Boolean
AllPredsComplete = True
For Each tpred In T.PredecessorTasks
prednewid = prednewid & vbNewLine & tpred.UniqueID & "<br />"
prednnazwa = prednnazwa & vbNewLine & tpred.Name & "<br />"
predres = predres & vbNewLine & tpred.ResourceNames & "<br />"
predSPOC = predSPOC & vbNewLine & tpred.Text10 & "<br />"
predcomp = predcomp & vbNewLine & tpred.PercentComplete & " %" & "<br />"
If tpred.PercentComplete < 100 Then
AllPredsComplete = False
info = info & vbNewLine & tpred.UniqueID & " -> " & tpred.Name & " -> " _
& tpred.PercentComplete & " %" & " -> " & tpred.ResourceNames
End If
Next tpred
If Not AllPredsComplete Then
If MsgBox("For the: " & T.UniqueID & " -> " & T.Name & vbNewLine _
& "following predecessors are not complete: " & vbNewLine & info & vbNewLine _
& vbNewLine & "Do you still want to trigger this task?", vbYesNo) = vbNo Then
info = ""
Exit Sub
End If
End If
推荐阅读
- spring-boot - Spring Batch Multiple JobExecutionListener - 不工作
- javascript - 如何在不使用 document.write() 的情况下在 Javascript 中开始新行?
- sql - 使用“with”函数和中位数有困难
- python - 索引ndarray时应该如何使用arange函数?
- azure - Azure APIM 控制在开发人员门户中显示哪些 API
- ocaml - OCaml-图像 (.png) 到颜色数组
- twitter-bootstrap-3 - 如何使用较新版本的 Less 运行 Bootstrap 3.0.2?
- unit-testing - 在 Nestjs 的单元测试中模拟服务
- asp.net-mvc - 在 ASP.NET MVC 中不使用 HTML 表单将数据发布到控制器
- javascript - 在浏览器窗口中居中,适用于 safari 但不适用于 firefox 或 chrome