내 질문 : Excel 2013에서 VBA 사용 사용자가 사용자 정의 폼을 채우고 싶지 않다고 결정할 때 Excel의 전체 인스턴스를 정상적으로 닫는 방법 클릭을 종료하거나 취소 하시겠습니까?응용 프로그램. 종료 전에 나머지 매크로를 실행하는 UserForm 시도에서 종료
현재 사용자가 종료 또는 취소를 클릭하면 내 인스턴스 만 열려 있는지 확인합니다. 그렇지 않으면 ThisWorkbook.Close를 사용할 수 있으며 괜찮을 것이라고 생각합니다. 그러나 그렇다면 응용 프로그램이 여전히 존재하기를 원하지 않으므로 Application.Quit을 사용했습니다. 그러나 이것은 매크로 실행을 끝내고, 폼을 언로드하기 때문에 원래 "타입 불일치"를 던지고, "디버그"또는 "종료"를 클릭 한 후에 닫힙니다. 디버그). 지금은 첫 번째 사례를 무시하고 전체 애플리케이션을 종료하려고합니다. 그것은 많은 서브 루틴과 함수가있는 매우 긴 매크로입니다. 그래서 여기서 디버깅과 게시를 위해 단축했습니다. 형식 불일치 오류는 더 이상 발생하지 않지만 실제 오류의 결과라고 생각합니다. 응용 프로그램을 종료하기 위해 명령을 실행 한 후 코드가 호출되었습니다.
Private Sub CommandButton1_Click()
Call form_variables
frm_REQUEST.Show
Call a_REQUEST_main
End Sub
서브 루틴
form_variables
내가 정의 폼에서 데이터를 저장할 수 있도록 공용 변수를 생성하는 서브 루틴이다 :
먼저, 여기에 모든 것이 시작되는 코드입니다.
frm_REQUEST.Show
및 형태를 나타낸다 (다른 통합 발견 목록을 추출하고, 어떤 형식을 않고 통합 문서를 닫고 정의 폼 드롭 다운 상자로 목록을 입력하는 기능 호출을 포함하여) 초기화하고, 마지막
a_REQUEST_main
은 공용 변수 (UserForm 데이터가 저장되는 곳)를 사용하고 그 일을합니다 (그러나 사용자 정의 폼이 닫히면 아무것도하지 않아야합니다). .Show가 호출 될 때 실행되는
코드는 다음과 같습니다
Private Sub UserForm_Initialize()
' Get job numbers from other workbook
Dim job_selection_list As Variant
job_selection_list = get_job_list()
With frm_REQUEST.Job_Number_ComboBox
.List = job_selection_list
End With
' set focus on Job Numbers
JN_combobox.SetFocus
End Sub
Private Sub cancel_button_Click()
Set job_selection_list = Nothing
Unload Me
Application.Quit
End Sub
Private Sub submit_button_Click()
' Values from userform saved as global (?) variables so other subroutines can access.
End Sub
내가 프로그램을 통해 밟은 Application.Quit 사용자 정의 폼에서 호출되면, 것을보고, 매크로, 주요 서브 루틴, steps to
Call a_REQUEST_main
그러나 실제로 모든 것을 종료해야합니다. 나는 "명령"을 저장하고 일의 순서를 변경하고 아무 것도 설정하지 않아도되는 객체를 읽으려고 했으므로 (따라서 드롭 다운 목록이 초기화 될 때 생성되는 job_selection_list의 설정) 나는 얻을 수없는 것 같습니다. 이 일을하거나 온라인에서 무엇이든 찾으십시오. 누구나 가이드를 제공하거나 Excel 인스턴스를 종료하는 더 좋은 방법을 알려 줄 수 있습니까? Stackoverflow 도움말 Kenobi, 당신은 나의 유일한 희망입니다!
감사합니다.
또 다른 질문을 닫을 때 설명하기 위해 변수를 추가 : 사용자 - 신경 이유 사용자 정의 폼에 이미 'QueryClose' 및/또는'Terminate' 프로 시저를 트리거 할 취소 버튼이있을 때 "취소"버튼을 정의했습니다. 내장 된 이벤트 핸들러를 버튼으로 복제하려고하면 불필요하게 복잡해질 수 있습니다. –
이것은 아마도 우스꽝 스러움으로 들릴지 모르겠지만 UI 관점에서 보았을 때, 사용자베이스는 "취소"라고 쓰여있는 멋진 버튼을 가지고 있다고 생각합니다. 그런 다음 Close 기능을 사용하지 않도록하는 것이 불필요하게 복잡해 보였으므로'Query_ Close_button_Click'을'QueryClose' 코드 블록에 넣었습니다. 그러나 아래에있는 귀하의 의견에 대해 설명하겠습니다. 중요한 것 ... – TenaciousSisyphus
'QueryClose' 핸들러는 실제로'Terminate'가 ** 일어나지 않게하는 몇 가지 조건을 잡을 필요가있을 때만 필요합니다. 그 사건에서 중요한 것이 없다면, 단지 스스로 'Terminate' 핸들러를 사용하십시오 : –