web-dev-qa-db-ja.com

Excel VBA:実行時エラー「438」オブジェクトはこのプロパティまたはメソッドをサポートしていません

デバッグにご協力ください:実行時エラー「438」オブジェクトはこのプロパティまたはメソッドをサポートしていません

関数ConvertToStdDateFormat(InputRange As Range)が範囲 'ThisRange'を受け入れない理由がわかりません

これが私の入力がどのように見えるかです

201301  201401      201301  201401
201302  201402      201302  201402
201303  201403      201303  201403
201304  201404      201304  201404
201305  201405      201305  201405

以下はコードです

Sub trythis()
Dim ThisRange As Range
Dim MonthYear_array As Variant
start_date_row = 1
end_date_row = 12

With ActiveSheet
    Set ThisRange = .Range(Cells(start_date_row, 1), Cells(end_date_row, 2))
    MonthYear_array = .Range(Cells(start_date_row, 4), Cells(end_date_row, 5)).Value
End With

Call ConvertToStdDateFormat(ActiveSheet.Range(Cells(start_date_row,1), Cells(end_date_row, 2)))
Call ConvertToStdDateFormat(ActiveSheet.ThisRange)
End Sub


Public Function GetMonthYearFormatted(InputDate)
'InputDate should be in the format "201401" i.e. year(2014)month(01)
    IPString = CStr(InputDate)
    monthval = CInt(Right(IPString, 2))
    yearval = CInt(Left(IPString, 4))
    opDate = DateSerial(yearval, monthval, 1)
    OPFormatDate = Month(opDate) & "-" & Year(opDate)
    GetMonthYearFormatted = OPFormatDate
End Function

Function ConvertToStdDateFormat(InputRange As Range)
    Dim temp_array As Variant
    temp_array = InputRange
    For colsC = 1 To UBound(temp_array, 2)
        For rowsC = 1 To UBound(temp_array, 1)
            temp_array(rowsC, colsC) = GetMonthYearFormatted(temp_array(rowsC, colsC))
        Next rowsC
    Next colsC
    InputRange.Resize(UBound(temp_array, 1), UBound(temp_array, 2)) = temp_array
    ConvertToStdDateFormat = Null
End Function
2
WonderWoman

ラインを交換するだけです

Call ConvertToStdDateFormat(ActiveSheet.ThisRange)

沿って

Call ConvertToStdDateFormat(ThisRange)

コードは機能します(範囲が配置されているワークシートは範囲オブジェクト自体に格納され、ThisRange.Worksheetで参照できます)。

デバッグを容易にするために、すべてのモジュールをOption Explicitの行で開始すると便利な場合があります。これにより、使用されるすべての変数(つまり、Dim x as Integer行)のexplicit宣言が強制されます。

5
DerVeganer