3

QTP を使い始めたばかりの初心者です。私はいくつかの機能ライブラリに1つのクラス定義を書き、以下のようなテストも作成しました:

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 関数を使用してそれらを構築する必要があります。

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")

ヒント: 初期化パラメーターをコンストラクター関数に渡すことができます。

編集

リクエストに応じて: コンストラクターのパラメーターを渡す方法。それらをコンストラクター関数に追加するだけです:

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、 a 、new_CSVFileReaderおよび a new_TabDelimitedReaderall が同じオブジェクトを指しているが、構成が異なる可能性があります。

コードを改良するもう 1 つの方法は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 に答える