2009-10-23 158 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

我一直在寻找到类似的问题“的文件没有保存”的错误:我认为有一个未公开问题是跨网络驱动器的“保存”过程,我可能会再次提出您的问题,并提供一些额外的细节。