2009-07-07 2 views
2

나는 Access 폼MS 액세스 VBA를 평가 기능 동작

Public Function PopupProcess() as long 
    MsgBox Me.ActiveControl 
    PopupProcess = 1 
End Function 

의 공용 기능을 가지고있다. 아무도 왜 그 일을하는지 알지 못합니까?

나는 Access 2003에서 SP3을 사용하고 있습니다.

편집 : 주요 아이디어는 사용자 지정 명령 모음 컨트롤 OnAction에 대한 해당 폼에서 함수를 호출하는 것입니다. 명령 줄 제어를 위해 양식에서 함수를 호출하는 것이 더 나은 방법 일 수 있습니다.

+1

함수를 호출 할 수있는 다른 함수가 있습니까? 예를 들어 양식에 빈 함수 (예 : "Public Function DoesNothing")를 추가하고 eval ("forms ('MyForm'). DoesNothing")을 호출하면 메시지 상자가 생깁니 까? – anschauung

답변

8

이 액세스 97 일부터 주변에있어 매우 긴 서 버그 : 그것은 한 번만 기능을 해고해야하고, 그것은 여전히 ​​폼 이름과 기능 또는 하위 이름을 매개 변수화 할 수 있습니다 (약 4-5 버전의 액세스).

여기에이 솔루션은 단순히 액션에 이벤트에 다음을 배치하고 당신이 = 함께 선행해야 잘

=PopUpProcess() 

주, 그리고 것, 양식 한정자를 사용하지 마십시오하는 것입니다 접미사에는 대괄호()가 있어야합니다.

사실상 원하는대로 동작을 사용할 수 있습니다. 실행되는 함수는 현재 화면에 포커스가있는 양식에서 나옵니다. 즉, 함수의 이름이 같은 다른 양식을 가질 수 있으며 포커스가있는 양식이 있으면 해당 이름의 함수가 해당 양식의 코드 모듈에서 실행됩니다.

양식 중 하나가 양식 코드 모듈에서 해당 기능을 공개하지 않으면 표준 코드 모듈의 기능이 사용됩니다. 따라서 모든 표준 코드 모듈에서 표준 함수를 사용하는 아홉 개의 형식이있을 수 있습니다. 그러나 10 번째 폼은 특별한 코드를 실행해야하기 때문에 폼의 코드 모듈에 함수 코드를 public으로두기 만하면 표준 코드 모듈에서 public 대신에 실행됩니다.

이 방법을 사용하면 다양한 양식에 적용 할 수있는 하나의 사용자 지정 메뉴 모음을 만들 수 있지만 그 많은 양식은 해당 사용자 지정 메뉴 모음에서 다른 코드를 실행하게됩니다. 또한 메뉴 코드를 속한 양식에 배치하는 것이 좋습니다.

문제를 해결하려면 양식의 한정자를 사용하지 말고 위의 형식을 사용하십시오.당신은 예를 들어, 또한 이러한 기능에서

=PopUpProcess(‘hello’) 

를 매개 변수를 전달하고 다음 함수를 선언 할 수

참고 :

Public Function PopUpProcess(strParm as string) 

있다는 사실을 숙지 기능과 구문과 무엇의 모든 위에서 언급 한 내용은 2007 년에 리본으로 on 액션을 사용하는 경우에도 적용됩니다.

+0

+1. 좋은 대답 –

+0

정말 좋은 아주 좋은! 그러나 Access 2007에 변경된 동작이 있고 양식의 공용 기능이 VBA 외부에서 더 이상 사용할 수 없다는 인상을 받았습니다 (예 : 계산 된 컨트롤의 원본). 누군가 확인할 수 있습니까? –

+0

2007과 관련하여이 동작의 변경 사항을 알지 못합니다. mytest라는 양식의 공용 함수의 경우 = mytest()가 해당 폼의 컨트롤 소스가 될 수 있습니다. 여전히 공개 키워드를 사용해야하며 현재 포커스가있는 양식에 대해 취하고 있습니다. 제가 말할 수있는 한, 2003 년이나 2007 년에이 작품이 어떻게 작동하는지 전혀 다른 행동을 보지 못합니다. –

1

의견이 없습니다. 이런 식으로 부른다면 어떻게 될까요?

Call Forms("MyForm").PopupProcess 

eval 대신 CallByName 함수를 사용하여 함수를 호출 해보십시오. ,

CallByName Forms("MyForm"), "PopupProcess", VbMethod 
+0

위와 같은 경우에는 작동하지 않습니다. 포스터는 양식의 단추가 아니라 사용자 지정 메뉴 모음에 대해 이야기합니다. 사용자 정의 메뉴 막대에는 onAction 설정 만 있으며 코드를 호출하려면 "Call subname"이 아닌 표현식을 사용해야합니다. –

+0

폼의 함수를 호출하는 공용 함수를 호출 할 수 있습니다. –