首先是一个循环(1),循环以后应该是跳入第2个循环(2),但是总是直接跳入ERROR(3),看看有什么问题么,帮助解决一下,急死了!下面是一部分的代码,完整的代码在http://user.qzone.qq.com/279983622/blog/1303208988  太多了发不上来。(1)
Dim oNameList As List
Set oNameList = Application.ActiveSelection.FieldNameListDim i As Integer
 s = "60"
 s1 = "61"
 For i = 1 To oNameList.Count
   sName = oNameList.Item(i)
   If sName = "Task Name" Then
      sName = "Name"
   ElseIf sName = "Type" Then
      sName = "Fixed"
   ElseIf sName = "Leveling Delay" Then
      sName = "Delay"
   End If
   s = s & sp & sName
   s1 = s1 & sp & oMPXTaskNames(sName)
 Next
(2)
Print #1, s
  Print #1, s1
  
 ' Print #1, "60,ID,Unique ID,Name,Duration,Outline Level,Unique ID Predecessors,Start,Finish,Early Start,Early Finish,Late Start,Late Finish,Summary,Marked"
 ' Print #1, "61,90,98,1,40,3,74,50,51,52,53,54,55,120,83"
  For Each oTask In oProject.Tasks
    If Not oTask Is Nothing Then
    s = "70"
    For i = 1 To oIDList.Count
      Select Case oIDList.Item(i)
      'some values may need to be quote wrapped
      Case pjTaskName, pjTaskText1, pjTaskText2, pjTaskText3, _
           pjTaskText4, pjTaskText5, pjTaskText6, pjTaskText7, pjTaskText8, pjTaskText9, pjTaskText10, _
           pjTaskText11, pjTaskText12, pjTaskText13, _
           pjTaskText14, pjTaskText15, pjTaskText16, pjTaskText17, pjTaskText18, pjTaskText19, pjTaskText20, _
           pjTaskText21, pjTaskText22, pjTaskText23, _
           pjTaskText24, pjTaskText25, pjTaskText26, pjTaskText27, pjTaskText28, pjTaskText29, pjTaskText30
         s = s & sp & WrapQuotes(oTask.GetField(oIDList.Item(i)))
      Case pjTaskUniquePredecessors, pjTaskUniqueSuccessors, pjTaskPredecessors, pjTaskSuccessors
         sVal = oTask.GetField(oIDList.Item(i))
         s = s & sp & WrapQuotes(sVal)
      Case pjTaskType
         s = s & sp & YesNo(oTask.GetField(oIDList.Item(i)) = "Fixed Duration")
      Case pjTaskDuration, pjTaskFreeSlack, pjTaskTotalSlack, pjTaskDelay, pjTaskWork, pjTaskBaselineWork, pjTaskActualWork 'use first letter only
             sVal = oTask.GetField(oIDList.Item(i))
             iposn = InStr(sVal, Application.ThousandSeparator)
             If iposn > 0 Then
                While iposn > 0
                   sVal = Mid$(sVal, 1, iposn - 1) & Mid$(sVal, iposn + 1)
                   iposn = InStr(sVal, Application.ThousandSeparator)
                Wend
             End If
        
         s = s & sp & sVal
      
      Case Else
         s = s & sp & oTask.GetField(oIDList.Item(i))
      End Select
    Next(3)
Error:
  If bOpen Then Close #1
  'Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
  MsgBox Err.Description
End Function

解决方案 »

  1.   


    exit sub  '要加这个
    Error:
      

  2.   

    exit Function'要加这个
    Error:
      

  3.   

    我又对比了原来的代码,我已经有了Exit function了,但是没用哦
      

  4.   

    代码逻辑看明白了就指定exitsub,exitfunction放什么地方了泰山+1
      

  5.   

    我本来就是新手,我要干的事情就是因为别人写的代码在Microsoft project2003上可以运行,在2010版本上不能运行,要来优化这个代码,我也不是计算机专业的,什么叫买的或者抄的,我就没这样的概念,不帮忙就算了,不要进行人身攻击!
      

  6.   

    注释掉它们,看看错在那里
    on error goto Error:exit functionError:
      If bOpen Then Close #1
      'Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
      MsgBox Err.Description
      

  7.   

    xyctc你好,我在If bOpen Then Close #1这句设了一个断点,程序是直接跑到这里停止的,程序不经过on error goto Error ,exit function也没跑。程序是从我的第一个循环直接跳入Error的。 
      

  8.   

    跳入Error你要看一下提示,出的是啥错啊……
      

  9.   

    alifriend你好,跳出的错误信息是invalid procedure call or argument,无效的参数调用,不是很清楚调用的哪一条函数,看循环里面貌似没什么错误。
      

  10.   

    zhao4zhong1你好,我是先进行的单步调试,我在2003版本和2010版本上分别做了单步调试,这才发现的2者在不同版本上运行进入点不一样,在2003版本上面可以直接进入Print #1,但是在2010版本上进入的是Error,一样的代码。或者您能告诉我怎么找出调用的函数的方法,我再去找一下。谢谢。
      

  11.   


     你把断点设在那没用的,我的意思是说把函数WriteMPXForProject中的on error goto ... 那你几句注释掉(在语句前加'),然后运行,就可知道是在调用那个子函数时,出现异常.
      

  12.   

    谢谢xyctc,用你的办法我找到出错的函数了,非常感谢