Project VBA运行报错1100:EditPaste方法不可用如何解决
错误原因
这个运行时错误1100的触发根源是Microsoft Project的UI层操作是异步执行的:执行EditCut剪切任务后,程序还没完成剪切状态的上下文更新,就立刻执行了选中目标行、粘贴的操作,此时粘贴方法的触发条件不满足,就会抛出「当前场景下该方法不可用」的报错。进入调试模式时的停顿间隙,系统刚好完成了状态更新,所以无需修改代码重新运行就能正常执行。
解决方案
方案1:快速适配原有代码逻辑
只需要在剪切操作后加DoEvents让系统完成待处理的UI状态更新即可,如果仍偶发报错可以再加短延迟,修改后代码如下:
' 如加DoEvents后仍偶发报错可声明Sleep接口使用短延迟 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Move() Dim i As Integer i = ActiveCell.Task.ID ' 选中当前行剪切 SelectRow Row:=0, RowRelative:=True EditCut DoEvents ' 等待系统完成剪切状态更新 ' 如加DoEvents仍不稳定,可再加一句 Sleep 100 等待100毫秒 ' 选中第2行粘贴 SelectRow Row:=2, RowRelative:=False EditPaste ' 跳转回原位置 Application.Find Field:="ID", Test:="equals", Value:=i + 1 End Sub
方案2:更稳定的无UI模拟实现(推荐)
直接调用Project VBA的原生对象方法移动任务,完全避免模拟UI操作带来的状态不同步问题,性能和稳定性都更高:
Sub MoveTaskToRow2() Dim originalTask As Task Dim targetID As Long ' 记录当前选中的任务 Set originalTask = ActiveCell.Task targetID = originalTask.ID ' 直接将任务移动到第2行的位置 originalTask.Move To:=2 ' 跳转回原位置的下一行 Application.Find Field:="ID", Test:="equals", Value:=targetID + 1 End Sub
内容的提问来源于stack exchange,提问作者Ali Khosravi
相关产品推荐
相关产品推荐

