Excel中的文档未保存错误

时间:2009-10-23 06:51:40

标签: excel vbscript qtp

这是我用于比较2个excel文件的代码段。我从我的QTP脚本中调用此函数。我经常遇到这个错误导致我的测试脚本失败。任何指针都将受到赞赏。

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 \ Tests \ ReusableFunctions.qfl
  第(33)行:“objWorkbook2.Save”。

3 个答案:

答案 0 :(得分:1)

Microsoft知识库中有几篇文章讨论了保存Excel文件时可能出现的错误:

例如,错误可能是由于驱动器空间或权限不足,网络连接丢失(如果要保存到网络驱动器),防病毒冲突,嵌入式对象等引起的。你的情况很可能是其中之一。

无论如何,创建一个具有明显不匹配的新工作簿而不是更改现有工作簿是不是更好?

答案 1 :(得分: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

谢谢你,
Albert Gareev
http://automation-beyond.com/

答案 2 :(得分:0)

我一直在研究“未保存文档”错误的类似问题:我认为网络驱动器中的“保存”过程存在未记录的问题,我可能会再次提出您的问题。的信息。