2015-02-06 5 views
2

편집 : 내가 원하는 기능에 대한 실제 해결책은 here입니다. 필자는 컴파일 된 일부 기능을 폭로하기를 원했습니다. 이것은 Excel DNA Nuget 패키지를 사용하여 매우 쉽다는 것이 입증되었습니다. 클래스 라이브러리를 추가하고 nuget 패키지를 추가 한 다음 readme에있는 코드를 복사하여 붙여 넣기 만하면됩니다. F5를 클릭하면 이미로드 된 추가 기능으로 Excel이 실행됩니다. 기능을 유지하려면 "개발자"리본 섹션을 통해 엑셀 파일에 추가 기능을 수동으로 추가하기 만하면됩니다.Excel 자동화 기능 추가 기능이 작동하지 않습니다.

Original Post : 자동화 추가 기능을 만드는 방법은 this microsoft post의 지침을 따르고 있습니다. 코드가 잘 컴파일되고 Excel 내에서 함수에 액세스 할 수 있습니다. 그러나 기능이 작동하지 않습니다. 함수 호출 결과를 셀에 할당하려고하면 거의 항상 #value 또는 #ref 오류가 발생합니다. 더 구체적으로 :

Microsoft에서 제공하는 다음 기능은 작동하지 않습니다. 그것은 내가 그것을 사용하려고 세포에서 # 가치 오류를 보여줍니다. 마우스를 사용하여 임의의 셀 범위를 함수의 매개 변수로 선택합니다.

Public Function NumberOfCells(ByVal range As Object) As Double 
    Dim r As Excel.Range = TryCast(range, Excel.Range) 
    Return CDbl(r.get_Cells.get_Count) 
End Function 

내가 만든 다음 기능은 작동하지 않습니다. #ref 오류가 발생했습니다. 직접 정수 (Add1 (1,2)) 또는 숫자가 들어있는 셀을 전달하여 호출했습니다.

Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer 
    return i1+i2 
End Function 

나는이 작품을 만든 다음 기능 (?!?) :

Public Function Add1(ByVal i1 As Integer, ByVal i2 As Integer) As Integer 
    return 222 
End Function 

내가 꽤 C#을 경험하지만 vb.net에서, 그러나에 전혀하고이 부가 기능에 내가 필요 vb.net을 사용합니다. 나는 여기서 누락 된 단순한 것이 있다고 생각하지만 그것이 무엇인지 전혀 모른다. 또한 Microsoft에서 제공하는 코드가 작동하지 않는 것이 이상합니다.

편집 : 붙여 넣기 기능을 붙여 넣기 here으로 복사하고 Excel에서 같은 #Value 오류가 발생합니다. 나는 처음부터이지면에서 튜토리얼을 따르지 않았지만 나는 그날에 할 것이다.

편집 2 : 함수 이름에 숫자를 추가 할 때마다 Microsoft의 코드가 작동하지 않는다고 생각했습니다. Addqweqew 위의 예제 코드에서 Add1 이름을 바꾸면 작동 할 것입니다!

+0

"하지 않습니다 "각 사건에 대해 구체적으로 어떤 오류가 있습니까? 이러한 기능을 테스트하기 위해 사용하는 데이터는 무엇입니까? – chancea

+0

그에 따라 게시물을 편집했습니다! – gerodim

답변

1

MSDN 참조 : http://blogs.msdn.com/b/andreww/archive/2008/01/23/managed-automation-add-ins.aspx

그것은 로케일 ID (LCID) 문제와 관련이있다. 복합 문화 환경에서 Excel 솔루션을 개발할 때 알려진 문제입니다. 에 대한 자세한 내용은 여기 http://support.microsoft.com/kb/246501/을 참조하십시오.

VSTO는 LCID 프록시를 통해이 문제를 해결합니다. 을 VSTO 솔루션에만 사용할 수 있지만 이므로 문서를 읽을 가치가 있습니다. http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033proxy.aspxhttp://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.excellocale1033attribute.aspx.

나는 # VALUE 결과, 나는 조금 주위 청소 만 같은 문제를 가지고 분명히이 정리 될 수있는이 작업을 (가지고 -하지만 내 PC 내 호주 로케일로 설정 유지하면서이 코드는 확실히 나를 위해 작동 신분증.난 당신이 살고있는 세계의 일부가 확실하지 않다하지만 그것은 기본적으로 작동 로케일)

Public Function AddNumbers1(ByVal num1 As Double, _ 
          ByVal num2 As Double) As Double 

    Dim oldCI As CultureInfo = Thread.CurrentThread.CurrentCulture 
    Dim english As System.Globalization.CultureInfo = System.Globalization.CultureInfo.GetCultureInfo("en-US") 
    System.Threading.Thread.CurrentThread.CurrentCulture = english 
    System.Threading.Thread.CurrentThread.CurrentUICulture = english 

    Dim valresult As Double = num1 + num2 

    Thread.CurrentThread.CurrentCulture = oldCI 
    Return valresult 
End Function 

관련 질문으로 내가하지 미국을 추측하고있다 : 당신이 말할 때 https://social.msdn.microsoft.com/Forums/en-US/dafe71c5-d390-44bc-b4d3-b133444a02fe/excel-automation-addin-udf-returns-error-on-different-regional-settings?forum=vsto