2009-10-23 9 views
0

Ceci est mon extrait de code pour comparer 2 fichiers Excel. J'appelle cette fonction de mes scripts QTP. Je reçois cette erreur assez souvent, ce qui fait échouer mon script de test. Tout pointeur sera apprécié.Document non enregistré Erreur dans Excel

Set objExcel = CreateObject("Excel.Application") 
objExcel.Application.Visible = False 
objExcel.DisplayAlerts = False 
Set objWorkbook1= objExcel.Workbooks.Open(excelFile1) 
Set objWorkbook2= objExcel.Workbooks.Open(excelFile2) 

Set objWorksheet1= objWorkbook1.Worksheets(1) 
Set objWorksheet2= objWorkbook2.Worksheets(1) 

<Code that compares the 2 files & marks the cell in red where there is a mismatch) 
objWorkbook2.Save 

MESSAGE D'ERREUR:
Document non enregistré.
Fichier de fonction: C: \ Program Files \ Mercury Interactif \ QuickTest Professional \ Tests \ ReusableFunctions.qfl
Ligne (33): "objWorkbook2.Save".

Répondre

1

Il sont plusieurs articles dans la base de connaissances Microsoft qui traitent des erreurs possibles lors de l'enregistrement des fichiers Excel:

Par exemple, les erreurs peuvent être causé par un espace disque insuffisant ou des autorisations, perdu connexion réseau (si vous enregistrez sur un lecteur réseau), conflit antivirus, objets incorporés, etc. Votre cas est probablement l'un de ceux-ci.

Quoi qu'il en soit, ne vaudrait-il pas mieux créer un nouveau classeur avec des discordances marquées plutôt que de changer un existant?

+0

Tous les liens que vous avez fournis concernent le fonctionnement manuel avec Excel. C'est différent lorsqu'il est fait par programmation via COM Automation. –

0

Puisque vous mettez seulement un fragment de votre code je ne suis pas sûr si vous mettez les deux déclarations. Il devrait y avoir 2 appels:

objWorkbook2.Save 
objWorkbook2.Close 

Vous pouvez également utiliser le code suivant isolé dans une fonction.

Origine: http://automation-beyond.com/2009/05/25/excel-vbscript/

Public Function ExcelWorksheetCompare(ByVal sWorkbook1, ByVal sWorksheet1, ByVal sWorkbook2, ByVal sWorksheet2, ByVal objParameter) 
Dim boolRC, boolSheetExists 
Dim FSO, XLHandle 
Dim XLBook1, XLBook2, XLSheet1, XLSheet2 
Dim Iter, objCell 

‘Verify both files exist 
Set FSO = CreateObject(”Scripting.FileSystemObject”) 
boolRC = FSO.FileExists(sWorkbook1) 
If Not boolRC Then 
ExcelWorksheetCompare = FALSE 
Exit Function 
End If 
boolRC = FSO.FileExists(sWorkbook2) 
If Not boolRC Then 
ExcelWorksheetCompare = FALSE 
Exit Function 
End If 
Set FSO = Nothing 

Set XLHandle = CreateObject(”Excel.Application”) 
XLHandle.DisplayAlerts = False 

‘Open workbook1 
Set XLBook1 = XLHandle.WorkBooks.Open(sWorkbook1) 

‘Verify sheet exists (1) 
If isNumeric(sWorksheet1) Then 
sWorksheet1 = CInt(sWorksheet1) 
If (sWorksheet1 > 0) AND (sWorksheet1 <= XLBook1.Worksheets.Count) Then 
Set XLSheet1 = XLBook1.Worksheets(sWorksheet1) 
boolSheetExists = TRUE 
Else 
boolSheetExists = FALSE 
End If 
Else 
boolSheetExists = FALSE 
For Iter = 1To XLBook1.Worksheets.Count 
If XLBook1.Worksheets(Iter).Name = sWorksheet1 Then 
Set XLSheet1 = XLBook1.Worksheets(Iter) 
boolSheetExists = TRUE 
End If 
Next 
End If 

If Not boolSheetExists Then 
XLBook1.Close 
XLHandle.Quit 
Set XLBook1 = Nothing 
Set XLHandle = Nothing 

ExcelWorksheetCompare = FALSE 
Exit Function 
End If 

‘Open workbook2 
Set XLBook2 = XLHandle.WorkBooks.Open(sWorkbook2) 

‘Verify sheet exists (2) 
If isNumeric(sWorksheet2) Then 
sWorksheet2 = CInt(sWorksheet2) 
If (sWorksheet2 > 0) AND (sWorksheet2 <= XLBook2.Worksheets.Count) Then 
Set XLSheet2 = XLBook2.Worksheets(sWorksheet2) 
boolSheetExists = TRUE 
Else 
boolSheetExists = FALSE 
End If 
Else 
boolSheetExists = FALSE 
For Iter = 1To XLBook2.Worksheets.Count 
If XLBook2.Worksheets(Iter).Name = sWorksheet2 Then 
Set XLSheet2 = XLBook2.Worksheets(Iter) 
boolSheetExists = TRUE 
End If 
Next 
End If 

If Not boolSheetExists Then 
XLBook1.Close 
XLBook2.Close 
XLHandle.Quit 
Set XLSheet1 = Nothing 
Set XLBook1 = Nothing 
Set XLBook2 = Nothing 
Set XLHandle = Nothing 

ExcelWorksheetCompare = FALSE 
Exit Function 
End If 

‘Mark range 

‘Compare and mark mismatches red 
For Each objCell In XLSheet2.UsedRange 
If objCell.Value <> XLSheet1.Range(objCell.Address).Value Then 
objCell.Interior.ColorIndex = 3 
Else 
objCell.Interior.ColorIndex = 0 
End If 
Next 

‘Save and close 

XLBook1.Close 

XLBook2.Save 
XLBook2.Close 

XLHandle.Quit 

Set XLSheet1 = Nothing 
Set XLSheet2 = Nothing 
Set XLBook1 = Nothing 
Set XLBook2 = Nothing 
Set XLHandle = Nothing 

ExcelWorksheetCompare = TRUE 

End Function 

Merci,
Albert Gareev
http://automation-beyond.com/

0

Je cherchais un problème similaire avec 'Document non enregistré' erreurs: Je pense qu'il ya un sans papier problème avec le processus «enregistrer» à travers les lecteurs réseau, et je vais probablement poser votre question à nouveau, avec quelques détails supplémentaires.

Questions connexes