programing

VBA 기능에 대한 Excel의 #NAME

testmans 2023. 5. 5. 08:43
반응형

VBA 기능에 대한 Excel의 #NAME

저는 첫 번째 VBA 프로그램을 만들고 있으며 다음 기능을 실행하려고 합니다.함수는 선행 값보다 큰 값이 아니라 1보다 작은 첫 번째 행에 대해 지정된 특정 범위를 확인합니다.

Public Function findPurchase()

Dim CRT As Range
Set CRT = Range("CostRateTable")

Dim existsBetter As Boolean
existsBetter = True

Dim r As Integer
r = 2
Dim c As Integer
c = 4

While existsBetter

    Dim Found As Boolean
    FoundBetter = False

    While Not FoundBetter And c <= CRT.Columns.Count
        If CRT(r, c) > CRT(r, 2) And CRT(r, c) < 1 Then
            FoundBetter = True
        Else
            c = c + 1
        End If
    Wend


    existsBetter = FoundBetter
    If existsBetter Then
        r = r + 1
    End If
Wend

findPurchase = CRT(r, 3)
'MsgBox(findPurchase)
End Function

값 표를 수동으로 확인하고, MsgBox에서 주석 '을(를) 제거했으며, 디버그 도구를 사용하여 테이블을 통과할 때 각 함수 단계를 드나들었기 때문에 함수가 해야 할 일을 수행한다는 것을 알고 있습니다.을 만지엑기능참을때조는할하셀의▁the때는▁in▁i▁function로 참조하면=findPurchase()나에게 주어진 것은#NAME?오류. 이름을 입력하기 시작하면 자동 완성 기능 상자에 해당 기능이 표시됩니다.파라미터를 사용하거나 사용하지 않고 다른 함수를 작성할 때 다음과 같이 적절히 참조할 수 있습니다.

Function addtwo()
    addtwo = 1 + 2
End Function

내 기능이 작동하지 않게 만드는 내 기능이 무엇을 잘못하고 있습니까?

함수와 이름이 같은 모듈이 있기 때문에 오류가 발생하고 있습니다.

여기에 이미지 설명 입력

이름을 변경하여 다음과 같이 말합니다.find_Purchase그리고 모든 것이 잘 될 것입니다 :) 아래 이미지를 보세요...

여기에 이미지 설명 입력

저도 같은 문제가 있었습니다.다른 파일과 매크로가 해당 파일에 대해 활성화되지 않은 것으로 확인되었습니다.에 배너는 상에배나않았지지만타나가너단,▁on▁no,만않지.#NAME?오류가 발생했습니다.파일을 다시 열고 매크로를 활성화하면 문제가 해결됩니다.

기능을 표준 모듈에 배치했는지 확인합니다.오류 메시지는 Excel이 함수를 찾을 수 없음을 나타냅니다.

Excel은 VBA-Code가 포함된 알 수 없는 워크북을 열 때 일반적으로 응용 프로그램 설정에 따라 사용자가 매크로를 활성화하도록 요청합니다.

그런 다음 사용자가 매크로를 활성화하면 다음과 같은 모든 이벤트 기반 절차가 시작됩니다.auto_open또는 다른 사람들.

그러나 사용자 지정 VBA 기능을 사용하려면 워크북의 전체 재계산이 필요합니다. 않으면 그지않함수반환여은값다같전다습니음과히렇으면▁otherwise다입니다.#NAME계산은 워크북을 연 직후에만 수행되기 때문입니다.

할 때 을 첫번오프서에직작위기다는합추다니야가해라인을음에 .workbook_open

'
' Workbook open event
Private Sub Workbook_Open()
    Application.CalculateFullRebuild
End Sub

매크로 보안의 매크로 설정에서 "VBA 프로젝트 개체 모델에 대한 액세스 신뢰"를 선택합니다.

이 문제의 한 가지 이유는 보안 제한 때문입니다.이 문제가 발생하여 보안 센터에서 "모든 매크로 사용"을 활성화하면 문제가 해결됩니다.

저는 다른 모든 것이 정상인 것처럼 보일 때 제 기능 중 하나에 유사한 지속적인 문제가 있었습니다.워크시트를 열고 개발자 탭으로 이동합니다.VBA를 열고 개발자 리본에서 "View Code"를 선택합니다.워크시트와 관련된 유사한 코드(모듈과는 별도)가 열리는지 확인합니다(예:시트 2(코드).나는 모듈 외에 워크시트에 코드를 복제한 것을 발견했습니다.워크시트 코드를 삭제합니다.(워크북을 저장하고 이 단계에서 다시 열어야 할 수도 있습니다.)워크시트 코드를 삭제하자 모듈 기능이 작동했습니다.

위에서 언급한 항목 중 일부를 확인하는 것 외에도 실제로 사용자 지정 함수가 정의된 파일 이름을 지정해야 할 수 있습니다(예: 셀 내용 =DBAstart.xlsm!my).시작 파일 XLstart.xlsm에 myCustomFunc가 정의되어 있는 CustomFunc(Arg1,Arg2).

"#NAME? 오류 수정"에 대한 Excel 도움말 다음과 같이 입력합니다.

수식 표시줄에서 [suspect] 함수 이름을 선택합니다.수식 표시줄의 왼쪽에 있는 Name 박스에서 화살표를 클릭한 다음 Excel이 제안하는 [사용자 정의] 함수를 선택합니다.

이렇게 하면 위 형식에 따라 파일 이름이 추가됩니다.

MS 2010, Windows 10.

이것이 제가 그 오류를 얻은 이유입니다.이 답변은 아직 제공되지 않았습니다.

두 개 이상의 워크북(스프레드시트)이 열려 있는 경우, 계산을 수행할 유일한 워크북이 아닌 다른 워크북 아래에 모듈이 있을 수 있습니다.이것은 불가능해 보이지만... 개발자/VBA 코드 편집기를 여는 즉시 Excel은 열려 있는 모든 워크북의 구조(개체, 모듈 등)를 표시하려고 합니다.개발자로서 제가 기대하는 것은 아니지만, 거기에 있습니다.저처럼 '모듈 추가'를 누르고 다른 워크북과 워크시트에 코드를 넣었을 수 있습니다.

이것이 당신의 문제라면, 위에서 언급한 어떤 것도 작동하지 않을 것입니다.이 VBA 코드 편집기를 통해 볼 수 있는 올바른 스프레드시트로 VBA 모듈과 코드를 이동합니다.

맞아요, 저도 (Excel 2010에서) 동일했고 Excel 2016으로 마이그레이션할 때 기능 프로토타입이 표시되었지만 기능을 완료했을 때 #NAME 오류가 팝업과 함께 표시되었습니다...그래서 코드는 작동하지 않았습니다.

알고보니 서브나 UDF 기능과 같은 이름의 매크로가 있었습니다! 매크로의 이름을 바꾸었고, 작동했습니다.

건배.

#NAME? 오류의 또 다른 원인은 사용자 지정 기능이 있는 매크로 워크북의 범위 이름이 기능 이름과 동일하다는 것입니다.저는 함수 이름을 변경하여 문제를 해결했습니다.

이 솔루션은 "United States English"가 아닌 다른 언어로 Excel이 설치된 사용자에게 적용됩니다. 이 솔루션을 복제하기 위해 활성 워크북의 복사본을 만들 때도 유사한 문제가 발생했으며, 이후에 바로 복사본을 열었습니다.

작동하지 않는 코드:

   ThisWorkbook.SaveCopyAs NewFileName
   Set wb = Workbooks.Open(FileName:=NewFileName)

이것은 항상 오류 2029 / "#NAME?"이 있는 여러 개의 셀을 보여주었습니다.파일 메뉴를 통해 워크북을 "공식적인 방법"으로 열면 예상대로 작동합니다.

열린 문에 "local:=true" 매개 변수를 추가하여 문제를 해결했습니다.

작업 코드:

   ThisWorkbook.SaveCopyAs NewFileName
   Set wb = Workbooks.Open(FileName:=NewFileName, Local:=True)

VBA가 제 독일어 워크북에서 영어 함수 이름을 예상했기 때문입니다.이 매개 변수를 사용하면 VBA가 직접 로컬 이름을 사용하도록 지시됩니다.

제가 그랬던 것처럼, 누군가가 몇 시간을 낭비하지 않기를 바랍니다.

간단한 대답 - 이 기능이 이전에 작동했다면 컴퓨터를 다시 시작합니다.

긴 대답 - 저도 같은 일이 있었습니다.문제는 제가 만든 기능이 몇 달 동안 작동했다는 것입니다.그러던 어느 날 예전처럼 작동하지 않고 #NAME 오류가 나타나기 시작했습니다.저는 다른 엑셀 워크북을 모두 닫고 엑셀을 모두 닫고 시트를 다시 열어 보았습니다.아무 것도 작동하지 않는 것 같았습니다.그런 다음 재미로, 저는 VBA가 컴파일 오류가 있다고 불평할 것을 알고 있는 코드를 편집했습니다.놀랍게도, 그것은 불평하지 않았습니다.좋아요... 어쨌든 엑셀을 저장하고 닫은 다음 컴퓨터를 다시 시작했습니다.

재부팅한 후 엑셀 워크북을 다시 열었습니다.그 후 VBA는 마침내 저에게 컴파일 오류를 주었습니다.그래서 저는 제 기능을 예전에 가지고 있던 원래 코드로 다시 바꿨고 지금은 시트가 원래대로 기능을 실행하고 있습니다.더 이상 #NAME 오류가 없습니다.

이러한 모든 단계가 필요한지는 모르겠지만 컴퓨터를 다시 시작하는 것만으로도 문제가 해결된 것 같습니다.

언급URL : https://stackoverflow.com/questions/18830181/name-error-in-excel-for-vba-function

반응형