Erreur de boucle lors de l'import de Excel vers MS Project

J'ai un outil qui lit un file Excel et le convertit en un plan de projet MS Project. Il imprime également une list de tâches (uniqueIDs) dans la feuille de calcul, utilisée pour correspondre aux tâches Excel / projet. Cette partie fonctionne bien, j'essaie de la mettre à jour afin que le file Excel puisse être utilisé pour mettre à jour un plan existant.

Le code ci-dessous fonctionne bien pour toutes les tâches de projet sauf deux, puis la boucle se casse. Il écrase également les deux premières tâches au lieu de mettre à jour uniquement la tâche associée en utilisant l'uniqueID.

dim statements Set prApp = New MSProject.Application 'If fileToOpen <> False Then prApp.FileOpen "c:\users\faizal\desktop\Project1.mpp" Set CurrProject = prApp.ActiveProject With CurrProject Set lshtProjStage2 = ActiveWorkbook.Worksheets("Project Stage - Gate 2") lshtProjStage2.Activate ' Default place to start. llngRowCounter = 10 llngTaskCounter = 0 lintBoldCellCount = 0 lsCellContent = lshtProjStage2.Range("B10").Value lblnSkipAddTask = False lblnIndentNextCell = False lsPreviousCellContent = "" llngPerviousCellColour = -4142 llngPerviousTaskIndentLvl = 0 lblnPerviousCellBold = False lshtProjStage2.Range("G" & Trim(CStr(llngRowCounter))).Select lsTaskName = ActiveCell.Value lshtProjStage2.Range("C" & Trim(CStr(llngRowCounter))).Select start1 = ActiveCell.Value llngTaskCounter = llngTaskCounter + 1 ' Going to loop through cells A10 until we reach "Service Readiness" in column B which is currently on row 28. Do While lsCellContent <> "" lsCellContent = lshtProjStage2.Range("B" & Trim(CStr(llngRowCounter))).Value lshtProjStage2.Range("B" & Trim(CStr(llngRowCounter))).Select If llngRowCounter >= 10 Then lsPreviousCellContent = lshtProjStage2.Range("B" & Trim(CStr(llngRowCounter - 1))).Value llngPerviousCellColour = lshtProjStage2.Range("B" & Trim(CStr(llngRowCounter - 1))).Interior.ColorIndex lblnPerviousCellBold = lshtProjStage2.Range("B" & Trim(CStr(llngRowCounter - 1))).Font.Bold End If lshtProjStage2.Range("C" & Trim(CStr(llngRowCounter))).Select start1 = ActiveCell.Value lshtProjStage2.Range("L" & Trim(CStr(llngRowCounter))).Select guid = ActiveCell.Value If start1 = "" Then lblnSkipAddTask = True Else lblnSkipAddTask = False End If c1 = 11 For Each t In CurrProject.Tasks If lblnSkipAddTask = False Then ' find the excel file unique id in the Project file based on uniqueid and update ' actual start, actual finish, perecent complete and duration If t.UniqueID = guid Then t.Name = start1 't.Finish = fin 'need to exit the code once found to the next line in the excel sheet Exit For End If End If Next t c1 = c1 + 1 llngRowCounter = llngRowCounter + 1 lsCellContent = lshtProjStage2.Range("B" & Trim(CStr(llngRowCounter))).Value ' Check if cell content is <> "" if so carry on else goto Column B. If Trim(lsCellContent) = "" Then lsCellContent = lshtProjStage2.Range("C" & Trim(CStr(llngRowCounter))).Value & " " End If ' Check if in column B of this row we have "Service Readiness" If lshtProjStage2.Range("C" & Trim(CStr(llngRowCounter))).Value = "Service Readiness" Then lsCellContent = "" End If Loop CurrProject.SaveAs MsgBox ("Test Text" & CStr(datecount)) CleanExit: Exit Sub End With End Sub 

  1. Regardez attentivement les identifiants types de la tâche (ou les appelés GUID) que vous avez enregistrés dans la colonne L. Les identifiants uniques de la tâche pour les deux premières tâches sont-ils deux fois?
  2. Seul le nom de la tâche est mis à jour dans ce code et il est mis à jour avec la valeur de la colonne C (début); cela semble être incorrect.
  3. Votre indentation de code est désactivée, ce qui peut conduire à ce que le code apparaisse pour faire quelque chose, ce n'est pas le cas, réparez votre empreinte.
  4. Le placement de l'instruction End With est incorrect: déplacez-le juste après la ligne Loop .
  5. Si vous souhaitez mettre à jour les valeurs réelles , assurez-vous d'utiliser les propriétés de la tâche t.ActualStart et t.ActualFinish .