2015-01-02 10 views
0

에서 사용할 때이 워크 시트를 활성화 할 때 내 통합 문서에서 하위를 통해 활성화 될 때 작동되지만, 기능 (사용 = FUNCTION_NAME (인수))엑셀 UDF 시트

Function calclkg(Optional table_name As String = "lkg_calc_params", Optional ByVal temp As Double = 110) As Double 
    SetTableValue table_name:=table_name, row_name:="Temp", col_name:="value", value:=temp 
    calclkg = GetValueFromTable(table_name:=table_name, row_name:="LKG calc", col_name:="value") 
End Function 
를 만들어 작동하지 않습니다

Sub Calc() 
    Dim temp As Double 
    temp = InputBox("temp:") 
    calclkg temp:=temp 
End Sub 
:

이 기능은이 일을 통해 함수를 호출하는 동안이

Sub SetTableValue(table_name As String, row_name As String, col_name As String, value As Variant, Optional ByVal sheet_name As Variant) 
    On Error GoTo errline 
    Dim WS As Worksheet 
    Dim wb As Workbook 
    Dim tbl As ListObject 
    Set WS = Application.Caller.Worksheet.Parent.Worksheets(sheet_name) 
    Set tbl = WS.ListObjects(table_name) 
    Dim Rhead As Range 
    Set Rhead = tbl.HeaderRowRange 
    col_index = Application.WorksheetFunction.Match(col_name, Rhead, 0) 
    Dim Rcol As Range 
    Set Rcol = tbl.ListColumns(1).DataBodyRange 
    row_index = Application.WorksheetFunction.Match(row_name, Rcol, 0) 
    ' here is the line where I get the error: 
    tbl.ListColumns(col_index).DataBodyRange.Rows(row_index) = value 
Exit Sub 
errline: 
    MsgBox "Error # " & Err & " : " & Error(Err) 
    Resume Next 
End Sub 

을지고있어 오류를 생성이 하위를 호출, 내가 원하는 결과를 얻고있다

내가 직접 내 시트에서 함수를 호출 할 때이 줄을 사용하여 테이블 셀의 값을 업데이트 할 수 아니에요

tbl.ListColumns(col_index).DataBodyRange.Rows(row_index) = value 

나는 여러 가지 방법을 시도했지만 그들 중 누구도 일했다 (1004 오류가 발생). like :

tbl.Range.Item(row_index + 1, col_index) = value 

무엇이 잘못 되었나요?

+1

당신은 다른 세포에 값을 할당 셀에 UDF를 사용할 수 없습니다. – Rory

+0

나는 당신이 UDF가 필요하다고 당신이하려는 것을 묻고 싶습니다. VLOOKUP의 혜택을 누릴 수있는 것 같습니다. – peege

답변

0

UDF는 워크 시트의 구조를 어떤 식 으로든 변경할 수 없습니다. 셀 복사 또는 글꼴 변경; UDF는 다른 함수와 서브 루틴을 호출 할 수 있지만 UDF와 동일한 제한 조건하에 있습니다.

는 본질적으로 UDF는 매개 변수를 사용하고 수식에 셀에 값을 반환합니다.