source

VBA 함수 - 인수 선택 사항 아님

manycodes 2023. 7. 15. 10:18
반응형

VBA 함수 - 인수 선택 사항 아님

Public Function RETURN_Equipment(Optional category As String) As Collection
    Dim config As classConfiguration
    Set config = New classConfiguration

    Dim item As classItem
    Set item = New classItem

    Dim myCollection As Collection
    Set myCollection = New Collection

    For Each config In Configurations
        For Each item In config.colItems
            If IsMissing(category) Then   
                myCollection.add item
            ElseIf InStr(category, "mainframe") <> 0 And item.category = "mainframe" Then
                myCollection.add item
                MsgBox "Fired!"                
            ElseIf category = "accessory" And item.category = "accessory" Then
            Else
            End If
        Next
    Next

    RETURN_Equipment = myCollection
End Function

나는 계속 이해합니다.

컴파일 오류:
인수는 선택 사항이 아닙니다.

마지막 줄에 오류가 있습니다.

RETURN_Equipment = myCollection

오류 메시지를 이해했습니다, 제가 파라미터를 작성하지 않았다는 메시지입니다.하지만 매개 변수는 하나뿐이고 선택 사항이라고 선언했습니다.코드는 제가 함수에서 함수를 호출하려고 한다고 생각하는 것처럼 보입니다.

왜 그러고 있어?

개체를 할당할 때마다 사용해야 합니다.set키워드

set RETURN_Equipment = myCollection

함수에서 결과를 반환할 때 잘못된 함수 이름을 사용하여 이 오류가 발생했습니다.저는 이렇게 하고 있었습니다.

Function MyFuncA(arg as String)
    MyFuncB = arg 'The problem is I'm using MyFuncB instead of MyFuncA
End Function

다른 곳에서 함수를 복사하여 이름을 변경했지만 반환문은 변경하지 않았기 때문에 이 문제가 발생했습니다.이것은 OP의 문제가 아니지만, 저는 같은 오류 메시지를 받고 있었습니다.

선택적 매개 변수를 문자열로 지정했기 때문에 값을 지정하지 않은 경우 기본적으로 빈 문자열로 지정됩니다.

이것은 그것이 빠질 수 없다는 것을 의미합니다.

로 지정했다면

Public Function RETURN_Equipment(Optional category) As Collection

변형일 수 있으며 누락될 수 있지만 범주 매개 변수로 문자열이 아닌 변형을 전달하여 상황을 엉망으로 만들 수도 있습니다.

가장 좋은 방법은 아마도 교체하는 것일 것입니다.

If IsMissing(category) Then 

와 함께

If category = "" Then 

브래드가 지적했듯이 세트를 사용해야 합니다.

Set RETURN_Equipment = myCollection

자세한 내용은 http://msdn.microsoft.com/en-us/library/office/gg251721%28v=office.15%29.aspx 을 참조하십시오.

언급URL : https://stackoverflow.com/questions/23574083/vba-function-argument-not-optional

반응형