2013-11-24 2 views
0

VBA를 사용하여 Excel에서 사용자 지정 함수를 만들었습니다. Workbooks.Open(path) 명령을 사용하여 다른 통합 문서에서 데이터를 가져 오려고합니다.Excel VBA 외부 통합 문서의 시트에 액세스 할 수 없습니다.

것은 내가 계획 한 작품으로 엑셀 모두에서 VBA 환경 내에서 Sub Test()를 실행하면 :

Option Explicit 

Function TestFunction() As String 
    mySub 
    TestFunction = "Success." 
End Function 


Sub mySub() 

    Dim path As String 
    Dim wk As Workbook 

    path = "C:\Users\jg\Desktop\machine_data.xlsm" 
    Set wk = Workbooks.Open(path) 

    Dim ws As Worksheet 
    Set ws = wk.Sheets(1) 
    Debug.Print ws.Range("A2") 
End Sub 


Sub Test() 
    Debug.Print (TestFunction()) 
End Sub 

지금 내 문제는 다음과 같다 : 여기에 내 코드입니다. machine_data.xlsm이 열리고 필드 A2이 디버그로 표시됩니다.

이 모듈을 정의한 셀에 =TestFunction()을 입력하면 통합 문서로 이동하면 #VALUE!이됩니다. 파일도 열리지 않습니다.

나는이 두 줄 언급하는 경우 : 셀 Success! 표시됩니다

Set ws = wk.Sheets(1) 
    Debug.Print ws.Range("A2") 

을하지만, 파일이 아직 열리지 않습니다.

내가 뭘 잘못하고 있니? 두 통합 문서는 .xlsm 파일입니다. Microsoft Office Excel 2007을 사용하고 있습니다.

+1

UDF는 값만 반환 할 수 있습니다. [This] (http://stackoverflow.com/questions/6045826/excel-vba-function-to-turn-activecell-to-bold)를보십시오. – DaveU

+0

@DaveU이 예에 대해 읽었지만 외부 통합 문서를 열지 않고 읽기 전용이고 다른 값을 반환하는 읽기 값에 따라 허용됩니까? 그게 가능하지 않은 것 같아서요. 나는 machine_data.xlsm 파일의 어떤 값도 바꾸지 않을 것이다. – Octoshape

+0

@DaveU Nevermind 나는 다른 해결 방법을 선택했다. (내 대답은 아래 참조) – Octoshape

답변

0

DaveU가 이미 언급했듯이 UDF는 값만 반환 할 수 있습니다. VBA 환경에서 함수를 호출하여 다른 곳에서 셀 내용을 수정할 수있는 다른 해결 방법을 발견했습니다.

0

mySub의 모든 것을 테스트 함수에 전달하고 모든 것이 성공적이면 테스트 함수가 셀 값을 반환합니다. 그래서 testFunc = ws.Range ("A2").

+0

'mySub'을'TestFunction()'에 복사 할 때 여전히'#VALUE! '를 얻는다. – Octoshape

관련 문제