MS Project 2010导入Excel数据时程序冻结无响应问题求助
解决方案
1. 重构自定义导入映射
- 直接在Project 2010环境中新建空白项目,重新手动创建一套完整的导入映射,不要直接沿用从2003版本导出的旧映射。2003到2010的字段底层ID存在兼容性问题,尤其是涉及*分配(Assignment)*类的自定义字段、工时计算字段,旧映射会触发后台字段匹配死循环。
- 导入时拆分测试:先单独导入任务表、再单独导入资源表、最后单独导入分配表,逐一定位是哪个表的映射规则触发的冻结。
2. 关闭导入阶段的自动计算与实时视图渲染
- 导入前先修改Project 2010全局配置:点击「文件>选项>日程」,把计算模式改为「手动」,取消勾选「打开项目时自动计算所有项目」。
- 导入前切换到纯文本的「任务工作表」视图,关闭时间线、甘特图、资源图表等需要实时渲染的视图,你观察到的时间线显示完成后立刻卡顿,大概率是导入最后一步的视图实时重算触发的渲染崩溃,导入完成后再手动触发计算、切回所需视图即可。
3. 调整VBA导入逻辑,修复代码问题
你现有代码缺少2010版本COM接口调用需要的等待逻辑,还存在变量笔误问题,修改后的参考代码如下:
Dim filename As String ' 提前关闭屏幕刷新、自动计算、自动调配,减少卡顿概率 Application.ScreenUpdating = False Application.Calculation = pjManual Application.AutoLevel = False FileNew Template:="", FileNewWorkpane:=False ' 关闭新建任务窗格,减少不必要加载 FileOpen Name:="PATH TO THE TEMPLATE FILE", ReadOnly:=False DoEvents ' 等待模板完全加载 ' 增加模板加载完成校验,避免后续操作提前触发 While Application.ActiveProject Is Nothing DoEvents Wend ' 导入数据时指定合并参数,避免导入文件直接替换当前打开的模板 FileOpenEx Name:="PATH TO FILE TO IMPORT", ReadOnly:=False, Map:="MY CUSTOM MAPNAME", Merge:=pjMerge DoEvents ' 等待导入完成再执行后续保存逻辑 While Application.ActiveProject.Tasks.Count = 0 And Application.ActiveProject.Resources.Count = 0 DoEvents Wend filename = "C:\Imported.mpp" Set fs = CreateObject("Scripting.FileSystemObject") ' 修复原代码的变量笔误:原代码写的namedoc是未定义变量,会导致判断逻辑失效 If fs.FileExists(filename) Then Dim OldName, NewName, nomfile As Integer nomfile = 1 OldName = filename NewName = "C:\Imported old Copy " & nomfile & ".mpp" While fs.FileExists(NewName) nomfile = nomfile + 1 NewName = "C:\Imported old Copy " & nomfile & ".mpp" Wend Name OldName As NewName End If FileSaveAs Name:="C:\Imported.mpp", FormatID:="MSProject.MPP" ' 恢复原有配置 Application.ScreenUpdating = True Application.Calculation = pjAutomatic Application.AutoLevel = True
4. 排查Excel源文件的异常数据
- 检查分配表中是否存在无效的任务ID、资源ID,比如引用了不存在的任务/资源,2003对这类错误会自动忽略,2010会触发循环校验导致崩溃。
- 检查所有工时、日期字段是否有非法值,比如日期超出Project支持的范围(1984年之前或者2149年之后)、工时为负数等。
内容的提问来源于stack exchange,提问作者GSabev
相关产品推荐
相关产品推荐

