2014-08-29 608 views
2

请帮助调试: 运行时错误“438”对象不支持此属性或方法Excel的VBA:运行时错误“438”对象不支持此属性或方法

我不知道为什么我的功能ConvertToStdDateFormat(InputRange由于范围)不接受的范围内“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

通过

Call ConvertToStdDateFormat(ThisRange) 

只需更换线

Call ConvertToStdDateFormat(ActiveSheet.ThisRange) 

和代码将工作(其中该范围位于被存储在范围对象本身,并且可以通过ThisRange.Worksheet引用的工作表) 。

为了使调试更容易,使用行Option Explicit启动所有模块可能很有用。这强制执行显式的声明所有使用的变量(即Dim x as Integer行)。

相关问题