2009-10-23 162 views
0

這是我的代碼片段,用於比較2個excel文件。我從我的QTP腳本中調用這個函數。我經常得到這個錯誤,導致我的測試腳本失敗。任何指針將不勝感激。在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 

錯誤消息:
文檔未保存。
功能的文件:C:\ Program Files文件\的Mercury Interactive \ QuickTest Professional的\測試\ ReusableFunctions.qfl
行(33): 「objWorkbook2.Save」。

回答

1

目前正處在微軟知識庫,討論可能出現的錯誤,同時節省Excel文件幾篇文章:

例如,錯誤可能是由於驅動器空間不足或權限不足而造成的網絡連接(如果您要保存到網絡驅動器),防病毒衝突,嵌入式對象等。你的情況很可能是其中之一。

無論如何,創建一個具有明顯不匹配的新工作簿而不是更改現有工作簿會更好嗎?

+0

您提供的所有鏈接都是關於使用Excel手動操作的。通過COM自動化以編程方式完成時不同。 – 2009-10-26 14:00:49

0

既然你只放了你的代碼的一個片段,我不知道你是否把這兩個語句。應該有2個電話:

objWorkbook2.Save 
objWorkbook2.Close 

您還可以使用下面的代碼隔離在一個函數中。

來源: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 

謝謝
阿爾伯特Gareev
http://automation-beyond.com/

0

我一直在尋找到類似的問題「的文件沒有保存」的錯誤:我認爲有一個未公開問題是跨網絡驅動器的「保存」過程,我可能會再次提出您的問題,並提供一些額外的細節。