我希望弹出窗口仅显示一次,而不管此代码中 tpred 的数量如何。 如何使用循环中的所有示例进入一个弹出窗口。现在,我需要使用“是”按钮确认每个发现。
该宏在MS Project中用于触发任务并检查前任者是否完整。如果有多个前任者,则每个前任者都会显示一个弹出窗口。
我在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
答案 0 :(得分:0)
添加变量以跟踪所有前辈是否已完成,并为不完整的前辈移动消息框 外部 :
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
答案 1 :(得分:-1)
您的解决方案是创建自定义表单,而不是使用内置消息框。
对您想要的内容进行一些假设:
For Each tpred In T.PredecessorTasks
将复选框添加到
您的表格。可以只是一个带有任务名称和相关前任标题的复选框。If compl <> 100
的任务
条件。For Each tpred In T.PredecessorTasks
中建立表单后
循环,然后必须显示该表格并允许用户检查/选择
每个任务。该表单还必须具有一个用户可以按以按下的按钮
确认他们的选择。我在这里使用了一些特定的术语-您学习过程的一部分就是找到并使用这些术语来建立您的知识和经验。在此过程中,您将学习以下内容:
在某些步骤中,您可能会遇到编码方面的挑战-如果您无法通过搜索找到答案(您最喜欢的搜索引擎或Stack Exchange上的此处),然后针对该特定问题提出一个新问题。这里有很多有经验的人愿意提供帮助。