You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET操作MS Project 2019如何更新甘特图的任务排序显示

核心问题原因

你当前仅修改了自定义WBSProject类的内存任务序列,未同步修改MS Project COM对象的任务顺序,甘特图视图读取的是MS Project自身的任务集合排序规则,所以不会自动同步。


解决方案代码

替换你现有WBSTaskRearangement方法的实现即可:

''' <summary>
''' 重新排列MS Project中的任务顺序并同步刷新甘特图
''' </summary>
''' <param name="ProjectApp"> MSProject应用实例</param>
''' <param name="project"> 自定义WBS项目对象</param>
''' <param name="Sequence"> 新的任务排序序列</param>
Public Sub WBSTaskRearangement(ByRef ProjectApp As MSProject.Application, ByRef project As WBSProject, Sequence As List(Of WBSTask))
    ' 先更新自定义对象的任务列表
    project.SetProjectTaskList(Sequence)
    
    ' 关闭屏幕更新提升性能,避免界面闪烁
    Dim originalScreenUpdating As Boolean = ProjectApp.ScreenUpdating
    Dim originalAlertState As Boolean = ProjectApp.DisplayAlerts
    ProjectApp.ScreenUpdating = False
    ProjectApp.DisplayAlerts = False
    
    Try
        Dim activeProj As MSProject.Project = ProjectApp.ActiveProject
        ' 按新的序列依次调整任务位置
        For targetIndex As Integer = 1 To Sequence.Count
            Dim wbsTask = Sequence(targetIndex - 1)
            ' 推荐用UniqueID匹配任务,避免重名匹配错误,可根据你WBSTask的实际存储字段调整
            Dim msTask As MSProject.Task = activeProj.Tasks.UniqueID(wbsTask.MSUniqueID) 
            
            ' 如果没有存UniqueID可以临时用名称匹配,注意规避重名问题
            ' Dim msTask As MSProject.Task = activeProj.Tasks.Cast(Of MSProject.Task).FirstOrDefault(Function(t) t.Name = wbsTask.name)
            
            If msTask IsNot Nothing Then
                ' 将任务移动到目标行位置(MS Project行号从1开始)
                msTask.Move(to:=targetIndex)
            End If
        Next
        
        ' 重新计算项目数据
        ProjectApp.CalculateProject()
        ' 强制刷新甘特图视图
        ProjectApp.ViewApplyEx(ApplyTo:=0, BuiltInView:=MSProject.PjViewType.pjViewGantt)
    Catch ex As Exception
        ' 可根据业务需要补充异常处理逻辑
        Throw ex
    Finally
        ' 恢复原有设置
        ProjectApp.ScreenUpdating = originalScreenUpdating
        ProjectApp.DisplayAlerts = originalAlertState
    End Try
End Sub

注意事项

  • 如果任务存在大纲层级(父子任务结构),移动父任务时会自动携带所有子任务,无需单独调整子任务位置
  • 操作跨子项目的任务时,需要先激活对应子项目再执行移动逻辑

内容的提问来源于stack exchange,提问作者Louis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:06:03