2014-01-16 1 views
0

VBA-sub의 타사 Excel- 함수에서 함수를 호출하려고합니다.Excel에서 함수를 호출 할 때 워크 북을 찾을 수 없습니다.

Public Function loadFromDatabase(ByVal XLname As String, ByVal sMark As String) 
Dim xlWB As Workbook 

: 여기 전화가 거대하고 unfortunaly 나는 전체를 게시 할 수는 없지만 해요 엑셀 workbook.The 기능에서 지정된 셀에 데이터베이스에서 함수 데이터를로드는 처음 두 줄입니다

여기
' 
    ' Get the excel book and check if it is run in compatibility mode 
    ' 
    Set xlWB = getXLBook(XLname) 
    If xlWB Is Nothing Then 
    loadFromDatabase = "Workbook '" + XLname + "' not found!" 
    Exit Function 
    End If 

    bExcel8Limits = True 
    If isExcel2007orLater Then 
    bExcel8Limits = bCheckCompMode(xlWB) 
    End If 

나는이 메시지를 얻을 : 그럼 다음 테스트를 실행하기 전에 변수의 무리를 선언합니다!. "통합 문서"을 (를) 찾을 수 없습니다 "를 http://imgur.com/HQFAzoC getXLBook 기능은 다음과 같습니다 :

' 
    ' Routine to get a specified Workbook 
    ' 
    Function getXLBook(sName As String) As Workbook 
    Dim xlWB As Workbook 

    On Error Resume Next 
    Set xlWB = Nothing 
    Set xlWB = Application.Workbooks(sName) 
    On Error GoTo 0 

    Set getXLBook = xlWB 
    End Function 

여기에 힌트가이 같은 워크 시트에 Private Sub 곳에서 함수를 호출 할 수있어 것을 할 수있다 ...

Private Sub loadFromDB() 
     Dim res As Variant 
     res = Application.Run("loadFromDatabase", Me.Parent.Name, "") 
     If res <> "OK" Then 
      MsgBox res 
     End If 
End Sub 

...하지만이 같은 같은 통합 문서의 모듈

Sub loadFromDB_test() 
    Dim res As Variant 
    res = Application.Run("loadFromDatabase", XLname, sMark) 
    If res <> "OK" Then 
     MsgBox res 
    End If 
End Sub 

의견이 있으십니까?

편집 : 명확히하기 위해 loadFromDB_test를 실행하면 "통합 문서를 찾을 수 없습니다"라는 메시지가 나타납니다.

편집 2 : 명백한 핫픽스 (내가 생각할 didnt는 것을) 바로 모듈의 Sub에서 워크 시트의 Private Sub를 호출하는 것입니다.

Sub load_test_new() 

    Application.Run "Sheet1.loadFromDB" 

End Sub 

학습의 관점에서 이것은 비효율적 인 코딩이므로 분명히 좋은 해결책이 아닙니다.

+0

'Set xlWB = Application.Workbooks.Open (sName)'을 시도해보십시오. 통합 문서가 이미 열려 있기 때문에이 오류가 발생합니다. 그래도 오류가 발생하면'sName'의 값이 올바른지 확인하십시오. –

+0

불행히도 그건 효과가 없습니다. 'sName'의 값이 유효한지 어떻게 확인 하시겠습니까? – tfunk

+0

마지막 코드 블록에서'XLname' (또는'sMark')의 값은 무엇입니까? - 게시 한 오류 메시지를 기반으로 어떤 값도 전달하지 않습니다. 당신은 어딘가에 그 변수들을 글로벌 변수로 데칼 해 놓았습니까? –

답변

0

표시된 msgbox에 따라 getXLBook 함수에 빈 문자열을 전달합니다. (getXLBook의 범위 내에서이 값은 sName으로 저장되지만 오류의 원인은 이전에 입니다.

그래서 어딘가 코드, 에서 이전이 :

: 당신은 명령문의 오른쪽 전체, 유효한 파일 경로를 나타내는 문자열을 할당 곳, 같은 라인을 가져야한다

Set xlWB = getXLBook(XLname) 

XLName = "C:\filename.xlsx" 

코드에이 할당 문이 포함되어 있지 않은 것으로 의심되어 오류를 설명해야합니다.

+0

여러분들은 XLname 변수가 여기에있는 것이 틀림 없다고 확신합니다. 이제 XLname에 유효하고 완전한 파일 경로를 나타내는 문자열을 할당하려고 시도했지만 이제는 "Workbook 'J : \ loadtest가됩니다.xlsm 'not found'. – tfunk

+0

'getXLBook' 함수를'Set xlWB = Application.Workbooks.Open (sName)'으로 변경 했습니까? –

+0

예. 동일한 msgbox가 있습니다. – tfunk

관련 문제