2014-08-29 178 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行)。

相關問題