0

複数枚のワークブックがあります。概要シートを除いて、他のすべてのシートには、日付形式の値を格納する連続セル(列内)のダイナミックレンジがあります。その範囲を動的に選択し、最大の日付値を選択する必要があります。関数はその値を返す必要があります。

これが私が試していたものです:

Function GetMSDate(Counter As Integer, DesignCtrs() As String, NumOfVendors() As Long, 
          MSDesc() As String, PlanOrActual As String) As Date
    GetMSDate = Application.Max(ThisWorkbook.Worksheets(Counter + 1).Range("A:A")
            .Find(PlanOrActual, SearchOrder:=xlByColumns, searchDirection:=xlNext)
            .EntireRow
            .Find(MSDesc(1), SearchOrder:=xlByColumns, searchDirection:=xlNext)
            .Offset(1, 0).Address & ":" & _
            ThisWorkbook.Worksheets(Counter + 1).Range("A:A")
            .Find(PlanOrActual, SearchOrder:=xlByColumns, searchDirection:=xlNext)
            .EntireRow
            .Find(MSDesc(1), SearchOrder:=xlByColumns, searchDirection:=xlNext)
            .Offset(NumOfVendors(Counter) + 1, 0).Address)
    MsgBox GetMSDate
End Function

私の意図は、Application.Max()引数に対して動的に構築された範囲を定義することでした。そうすることで、範囲アンカーを見つけて、正しいシートを選択します(Counter+1それを正しく許可します)。次に、最初の列で特定の「事前定義された」文字列を見つけます。見つかったセルの行全体を選択し、その範囲内で別の事前定義された文字列を見つけます。次に、そのアンカーセルの下のセルから、次のように定義されるオフセットまでの範囲が定義されます。NumOfVendors(Counter)+1

上記を実行すると、次のようになります。

「GetMSDate="」ステートメントで「不一致エラー」と入力します。

4

1 に答える 1

1

デバッグするには、値をバリアント変数に割り当て、割り当て後にその変数の typename() を出力します。日付を受け付けない理由を教えてくれるはずです。

Function GetMSDate(Counter As Integer, DesignCtrs() As String, NumOfVendors() As Long, MSDesc() As String, PlanOrActual As String) As Date
    Dim v as Variant

    v = Application.Max(ThisWorkbook.Worksheets(Counter +
        1).Range("A:A").Find(PlanOrActual, SearchOrder:=xlByColumns,
        searchDirection:=xlNext).EntireRow.Find(MSDesc(1), SearchOrder:=xlByColumns,
        searchDirection:=xlNext).Offset(1, 0).Address & ":" & _
    ThisWorkbook.Worksheets(Counter + 1).Range("A:A").Find(PlanOrActual,
        SearchOrder:=xlByColumns, searchDirection:=xlNext).EntireRow.Find(MSDesc(1),
        SearchOrder:=xlByColumns, searchDirection:=xlNext).Offset(NumOfVendors(Counter)
        + 1, 0).Address)
    debug.print v
    debug.print TypeName(v)
    stop
    MsgBox GetMSDate
End Function
于 2013-03-08T18:23:53.257 に答える