2014-11-19 2 views
0

VBA 및 관련 dylib 프로그램을 Windows Excel 2010/2014에서 Mac Excel 2010으로 이식합니다. 작업을 수행하기 전에 VBA가 현재 작업 디렉토리를 설치 폴더를 사용하여 입력 파일을 DLL에서 사용할 수있게 만듭니다.Mac Excel VBA dylib (gfortran 기반) 파일 작업이 실패합니다.

dylib는 gfortran 4.9.0을 기준으로합니다. dylib 파일을 ~/lib 폴더에 넣고 VBA에서 찾을 수 있습니다. 계산을 수행하고 결과를 반환하는 데 사용할 수 있습니다.

그러나 디스크 작업 (getcwd, 열기)을 수행하려고하면 오류가 발생합니다. "/usr/include/sys/errno.h"에 따라 "permission denied"오류 (13)를 반환 할 수 있습니다.

~/lib에 gfortran dll을 넣을 수 있고 다른 fortran 프로그램을 Excel에서가 아니라 명령 프롬프트에서 성공적으로 호출하여 현재 작업 디렉토리에 파일을 쓸 수 있으므로 해야한다.

스폰 된 dylib 프로세스를 "소유"하고 VBA 통화에서 gfortran dylib에 의해 디스크 작업을 수행하는 방법에 대한 생각은 인정 될 것입니다.

+0

오류 코드는 어떻게 얻을 수 있습니까? 'open'에 대한 문서는 단지 errno를 설정한다는 것입니다. Max Excel VBA에서 어떻게 얻습니까? – david

답변

0

Excel 2011에서 dylib (적어도 gfortran dylib 이상)를 호출하면 Mac에서 dylib의 cwd가 Mac의 루트/폴더라는 것을 알 수 있습니다. 이것은 dll의 cwd가 사용자의 cwd 인 Windows와는 다릅니다. 따라서 Windows vba에서는 Excel에서 cwd를 변경하고 dll에 기본적으로 dlib도 있다고 가정 할 수 있지만 Mac에서는 dylib 자체가 VBA에서 호출 될 때마다 CHDIR 자체를 수행해야합니다 (재설정 및 실행되지 않음). 이전에 어디로 갔는지 기억하지 못합니다.)

StrConv는 Mac 2011에서 작동하며 적어도 싱글 바이트 문자로 변경해야합니다. 그러나 이전에 유니 코드를 지원하는 데 사용 된 문자열의 후반 부분은 올바르게 변환되지 않았을 수 있습니다. 고정 길이 문자열. 여분의 긴 고정 길이 문자열을 사용하면 다음을 확인할 수 있습니다.

Function StrConv2(s as string, coding as integer) as String 
' used to convert fixed length strings between unicode and ascii for Mac 
' (not needed for Windows) 
    Dim s2 as string*2048 ' at least twice as long as your original string 
    If coding = vbUnicode Then 
    StrConv2 = StrConv(s, coding) 
    Else 
    s2 = s 
    StrConv2 = StrConv(s2, coding) 
    s = s2 
    End If 
End Function 
+0

?/lib 답변으로도, 나는 내 dylib를보고 엑셀의 VBA를 만드는 데 성공하지 못합니다. 조금 더 자세하게 대답 해 주시겠습니까? –

+0

Mac : dylib를/usr/lib 또는 ~/lib에 넣습니다. – Jon

+0

그래서 /에서 lib 폴더를 만들고 거기에 넣고 Excel/lib 폴더를 집에두고 거기에 넣으시겠습니까? –