3

我是 QTP 的新手,刚开始使用它。我在一些函数库中编写了一个类定义,并且还创建了一个测试,如下所示:

Class ExcelFileReader
Public default Function Init(pathToExcel)
   Dim objFSO
   Dim result
   Set objFSO = CreateObject("Scripting.FileSystemObject")

   If objFSO.FileExists(pathToExcel) Then
            Rem File Found
            Dim objExcel
            Set objExcel = CreateObject("Excel.Application")
            objExcel.Workbooks.open(pathToExcel)

       Else
            REM File not found
            result = vbOk
            While result <> vbCancel
                result = Msgbox ("Unable to Locate the file", 5, "Error")
            Wend
            ExitAction(1)
       End If
End Function

结束类

测试:

 Dim objExcelReader : Set objExcelReader = New ExcelFileReader
objExcelReader.Init("D:\mytest.xlsx")

我已将功能库与测试相关联,但在测试中的第 2 行仍然出现错误,说明未找到类定义。此外,如果我在同一个文件“test”中复制完整的代码,那么事情就会按预期工作。

提前致谢 :)

4

1 回答 1

6

类在您的库中具有本地范围。您必须使用公共功能构建它们以使它们公开可用:

Public Function new_ExcelFileReader()
    Set new_ExcelFileReader = new ExcelFileReader
End Function

Class ExcelFileReader
    Sub Class_Initialize
        MsgBox "Present!"
    End Sub
End Class

在您的另一个库中:

Dim objExcelReader : Set objExcelReader = New_ExcelFileReader
objExcelReader.Init("D:\mytest.xlsx")

Protip:您可以将初始化参数传递给您的构造函数。

编辑

根据要求:如何传递构造函数参数。只需将它们添加到您的构造函数中:

Public Function new_ExcelFileReader2(filepath, sheetname)
    Set new_ExcelFileReader2 = new ExcelFileReader
    new_ExcelFileReader2.Init(filepath, sheetname)
End Function

' And the call:
Set myExcelFileReader = new_ExcelFileReader2("C:\temp\tempExcel.xlsx", "sheet1")

在我的实现中,有时我有相同的对象,但是由多个构造函数“配置”。在您的情况下,您可能有 a new_ExcelFileReader、 anew_CSVFileReader和 anew_TabDelimitedReader都指向同一个对象,但配置不同。

me另一种修饰代码的方法是通过 init 函数返回对象(使用关键字)。这将导致如下代码:

Class ExcelFileReader

    private filepath_
    public function Init(filepath)
        filepath_ = filepath
        Set Init = me
    end function

End Class

Set myExcelFileReader = new ExcelFileReader.Init("C:\temp\tmpExcel.xlsx")

使用构造函数,您可以通过返回对象然后调用Init函数来使用它。

Public Function new_ExcelFileReader()   ' this is the same as the first function
    Set new_ExcelFileReader = new ExcelFileReader
End Function

Set myExcelFileReader = new_ExcelFileReader.Init("C:\temp\tmpExcel.xlsx")
于 2012-11-02T12:04:15.603 回答