您可以使用 运行 时间 window 而不是 MsgBox 来输出吗?
Can you have a run-time window instead of a MsgBox for output?
我目前的代码如下:我输入一个 UID,然后一个消息框显示任务的松弛度。但是,当消息框打开时无法编辑 Microsoft Project 文件。
我可以在 VBA 中使用另一个对象来显示相同的输出,但允许我在输出输出的同时处理项目文件吗?而且,是否可以实时输出?换句话说,如果我更改了我的日程安排,如果在我进行更改时松弛发生变化,我是否可以看到输出不断变化,而无需再次 运行 应用程序?
Sub SlackFinder()
Dim User_UID, User_ID As Integer
Dim Slack As Variant
Dim NewSlack As Variant
User_UID = InputBox("Enter UID for slack:")
If User_UID = "" Then Exit Sub
On Error GoTo Error_Not_Found
User_ID = ActiveProject.Tasks.UniqueID(User_UID).ID
On Error GoTo Error_Collapsed
Slack = ActiveProject.Tasks.UniqueID(User_UID).TotalSlack
NewSlack = Slack / 480
MsgBox "Total Slack: " & NewSlack
Exit Sub
Error_Not_Found:
MsgBox "UID " & User_UID & " not found in " & ActiveProject.Name
Exit Sub
Error_Collapsed:
MsgBox "UID is present but cannot be selected. Perhaps it is collapsed?", vbOKOnly, "COLLAPSED UID?"
Exit Sub
End Sub
您可以使用无模式用户窗体显示实时松弛。在 VBA 中创建一个用户窗体,例如具有用于输入任务 UID 的文本框和用于显示 Total Slack 值的标签的东西:
然后将此代码添加到用户窗体模块:
Private Sub UID_Change()
UpdateTotalSlack
End Sub
Sub UpdateTotalSlack()
On Error Resume Next
Me.TSlack = "Total Slack = " & ActiveProject.Tasks.UniqueID(Me.UID).TotalSlack / 480
End Sub
将此添加到项目模块:
Sub ShowSlack()
UserForm1.Show False
End Sub
Private Sub Project_Change(ByVal pj As Project)
UserForm1.UpdateTotalSlack
End Sub
首先,调用 ShowSlack
过程。这将无模式地显示用户表单(例如,它漂浮在 MS 项目 window 上方,允许您在日程表中进行更改)。在文本框中输入任务 UID,总时差将立即显示并在计划发生更改时更新(感谢 Change 事件代码)。
项目模块:
Private Sub Project_Change(ByVal pj As Project)
MsgBox "hi"
UserForm10.UpdateTotalSlack
End Sub
第 29 单元:
Sub ShowSlack()
UserForm10.Show False
End Sub
用户表单 10:
Dim User_UID As Variant
Dim TSlack As Variant
Private Sub TextBox3_Change()
User_UID = UserForm10.TextBox3.Value
UpdateTotalSlack
End Sub
Sub UpdateTotalSlack()
On Error Resume Next
If Not User_UID = "" Then
TSlack = ActiveProject.Tasks.UniqueID(User_UID).TotalSlack / 480
Else
TSlack = ""
End If
UserForm10.Label1.Caption = TSlack
End Sub
我目前的代码如下:我输入一个 UID,然后一个消息框显示任务的松弛度。但是,当消息框打开时无法编辑 Microsoft Project 文件。
我可以在 VBA 中使用另一个对象来显示相同的输出,但允许我在输出输出的同时处理项目文件吗?而且,是否可以实时输出?换句话说,如果我更改了我的日程安排,如果在我进行更改时松弛发生变化,我是否可以看到输出不断变化,而无需再次 运行 应用程序?
Sub SlackFinder()
Dim User_UID, User_ID As Integer
Dim Slack As Variant
Dim NewSlack As Variant
User_UID = InputBox("Enter UID for slack:")
If User_UID = "" Then Exit Sub
On Error GoTo Error_Not_Found
User_ID = ActiveProject.Tasks.UniqueID(User_UID).ID
On Error GoTo Error_Collapsed
Slack = ActiveProject.Tasks.UniqueID(User_UID).TotalSlack
NewSlack = Slack / 480
MsgBox "Total Slack: " & NewSlack
Exit Sub
Error_Not_Found:
MsgBox "UID " & User_UID & " not found in " & ActiveProject.Name
Exit Sub
Error_Collapsed:
MsgBox "UID is present but cannot be selected. Perhaps it is collapsed?", vbOKOnly, "COLLAPSED UID?"
Exit Sub
End Sub
您可以使用无模式用户窗体显示实时松弛。在 VBA 中创建一个用户窗体,例如具有用于输入任务 UID 的文本框和用于显示 Total Slack 值的标签的东西:
然后将此代码添加到用户窗体模块:
Private Sub UID_Change()
UpdateTotalSlack
End Sub
Sub UpdateTotalSlack()
On Error Resume Next
Me.TSlack = "Total Slack = " & ActiveProject.Tasks.UniqueID(Me.UID).TotalSlack / 480
End Sub
将此添加到项目模块:
Sub ShowSlack()
UserForm1.Show False
End Sub
Private Sub Project_Change(ByVal pj As Project)
UserForm1.UpdateTotalSlack
End Sub
首先,调用 ShowSlack
过程。这将无模式地显示用户表单(例如,它漂浮在 MS 项目 window 上方,允许您在日程表中进行更改)。在文本框中输入任务 UID,总时差将立即显示并在计划发生更改时更新(感谢 Change 事件代码)。
项目模块:
Private Sub Project_Change(ByVal pj As Project)
MsgBox "hi"
UserForm10.UpdateTotalSlack
End Sub
第 29 单元:
Sub ShowSlack()
UserForm10.Show False
End Sub
用户表单 10:
Dim User_UID As Variant
Dim TSlack As Variant
Private Sub TextBox3_Change()
User_UID = UserForm10.TextBox3.Value
UpdateTotalSlack
End Sub
Sub UpdateTotalSlack()
On Error Resume Next
If Not User_UID = "" Then
TSlack = ActiveProject.Tasks.UniqueID(User_UID).TotalSlack / 480
Else
TSlack = ""
End If
UserForm10.Label1.Caption = TSlack
End Sub