2017-12-19 4 views
1

私は現在、次のように動作しています。UIDを入力した後、メッセージボックスにタスクの余裕が表示されます。ただし、メッセージボックスが開いている間は、Microsoft Projectファイルを編集することはできません。MsgBoxではなくランタイムウィンドウを出力できますか?

同じ出力を表示するのに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 

答えて

0

モードレスのユーザーフォームを使用してリアルタイムのスラックを表示できます。

enter image description here

そして、ユーザーフォームモジュールにこのコードを追加します:たとえば、タスクUIDと総余裕期間値を表示するラベルを入力するためのテキストボックスを持っているもの、VBAでユーザーフォームを作成します

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 Projectウィンドウの上に浮かび、スケジュールを変更できます)。テキストボックスにタスクUIDを入力すると、(Changeイベントコードのおかげで)スケジュールに変更が加えられるたびにTotal Slackがすぐに表示され、更新されます。

+0

ありがとうございます!これは非常に助けになりました! –

+0

@AndreDavis素晴らしいその答えに合格とマークするようにしてください。 –

+0

ほとんどのコードが正しく機能するようになった。ただし、スケジュールを変更しているときにスラック値を変更すると、スラック値は更新されません。プロジェクトがどのように変更を行ったかをプロジェクトで常に確認しているかどうかを説明できますか(Project_Changeメソッドと思いますか?)。私は同じコードを持っていますが、更新していません。ありがとう。 –

0

プロジェクトモジュール:

Private Sub Project_Change(ByVal pj As Project) 
MsgBox "hi" 
UserForm10.UpdateTotalSlack 
End Sub 

モジュール29:

Sub ShowSlack() 
    UserForm10.Show False 
End Sub 

Userform10:

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 
関連する問題