메뉴
해결 M365윈도우11

사용자 정의 함수를 다른 컴퓨터에서 사용

p
12월 12일 조회 1,699
요즘 사용자 함수 만드는 재미를 붙였어요.

물론 코딩은 전혀 못해서, 챗GPT한테 만들어달라하고 있지만요.

암튼 그렇게 해서 만든 사용자 함수를 엑셀 추가기능 파일 (xlam)에 하나 하나 쌓아가고 있어요.

이렇게 만든 xlam파일을 다른 컴퓨터의 AddIns폴더에 저장해서 쓰고 있어요.

그런데 한쪽 컴퓨터에서 test라는 이름의 사용자 정의 함수를 사용한 수식을 작업하다가, 다른 컴퓨터에서 열었는데,

같은 값이 나오지 않고, test함수명앞에 처음 작업한 xlam파일 경로가 적혀서 오류가 나네요...

=@'C:\Users\Tigers\AppData\Roaming\Microsoft\AddIns\new.xlam'!test(A1:D5)    이렇게요.

양쪽컴에서 다 test함수를 입력하면 잘 작동해요. 그런데 왜 한쪽에서 작업하던 파일을 다른 쪽에서 열면 이렇게 오류가 날까요?

앞에 붙은 절대경로가 안붙게 할 수는 없을까요?

댓글 3

더
더블유에이 12월 12일
vba 사용자 함수는 어쩔수 없습니다.

전사적으로 M365를 사용하고 계시다면 lambda 함수를 도입해보십시오.

엔터프라이즈 버전이실 경우, 쉐어포인트를 같이 활용하면 팀 프로세스가 획기적으로 효율화될겁니다.
원
원조백수 채택된 답변 12월 13일
이건 제가 만든 AddIn에서 사용하는 코드로 새로운 WB을 열 때 실행되도록 합니다.
Sub FixUDFPath()
    Dim WB As Workbook, sh As Worksheet, ad As AddIn
    Dim ExLinks As Variant, newName As String, openName As String, vEvents As Variant
    Dim i As Long

    For Each ad In Application.AddIns
        If InStr(1, ad.FullName, "MyAddIn", vbTextCompare) > 0 Then
            If ad.Installed Then
                newName = ad.FullName
                Exit For
            End If
        End If
    Next
    If newName = vbNullString Then newName = ThisWorkbook.FullName
    
    On Error Resume Next
    ExLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
    On Error GoTo 0
    If Not IsEmpty(ExLinks) Then
        For i = LBound(ExLinks) To UBound(ExLinks)
            If InStr(1, ExLinks(i), "MyAddIn", vbTextCompare) Then
                If ExLinks(i) <> newName Then
                    vEvents = Application.EnableEvents
                    Application.EnableEvents = False
                    Application.ScreenUpdating = False
                    openName = ActiveWorkbook.FullName
                    ActiveWorkbook.Close False
                    Workbooks.Open FileName:=openName, UpdateLinks:=False
                    For Each sh In ActiveWorkbook.Sheets
                         sh.Cells.Replace What:="'" & ExLinks(i) & "'!", Replacement:="", _
                                          LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
                    Next
                    Application.EnableEvents = vEvents
                    Application.ScreenUpdating = True
                End If
            End If
        Next
    End If
    
End Sub

 
p
puroome 작성자 12월 13일
@원조백수 님 너무 감사드려요!! 그런데.. 제가 이제 매크로 세계에 입문한지라... 위에 알려주신 코드를 어떻게 활용해야하는지 모르겠어요..

제가 만든 tigers.xlam파일의 "현재_통합_문서"에 위 코드를 넣으면 되는건가요??
찾다보니 매크로 이름을 Private Sub Workbook_Open()로 바꿔야 한다기에 바꿨어요.

그리고 코드에 두번 등장하는 "MyAddIn" 이름을 제 "tigers"로 변경했어요.

그리고 나서 주소경로가 생긴다는 파일을 열었는데... 아무런 반응이 없어요..

혹시나 하고 따로 모듈에 넣고 그냥 매크로 실행을 했는데도 아무런 반응이 없어요..

제가 뭘 놓치고 있는 걸까요?

질문답변 게시판의 최근 글

스크랩 완료