ExcelVBA 사용자 양식에 표준 모듈에서 값을 전달하고 결과를 받습니다 (전역 변수 없음).

5029 단어 VBAExcelExcelVBA

개요



「북의 오픈 이벤트나 버튼의 클릭 이벤트로 유저 폼을 열어 처리를 개시해, 표준 모듈을 부른다」
그것이 기본적인 처리인 것은 틀림없습니다. 그러나 아무래도 처리의 도중에 유저에게 선택해 주지 않으면 후처리의 형편상 잘 안 되는 경우가 있습니다.
표준 모듈에서 사용자 폼의 부품 값을 설정하는 것은 간단합니다만, 사용자의 선택 결과를 표준 모듈로 받는 곳에서 집계했기 때문에 정리합니다.

사용자 양식의 값 설정



이것은 간단하고 표준 모듈 내에서
· 사용자 양식 이름, 제어 이름, 속성
· 사용자 양식 이름, 제어 이름, 메소드
그러면 일반적으로 사용자 양식의 각 부품에 액세스할 수 있습니다.

사용자 양식에 값 설정
Sub input_userform1()
    UserForm1.Label1.Caption = "標準モジュールから値を設定しました"
    UserForm1.ComboBox1.Text = "任意の作家名"
        Dim i As Integer
        i = 1
        Do While Cells(i, 1) <> ""
            UserForm1.ComboBox1.AddItem Cells(i, 1)
            i = i + 1
        Loop
    UserForm1.Show
    Unload UserForm1
End Sub


값이 설정되었습니다.

사용자 양식 결과 받기



  우선, 사용자 폼을 어떻게 닫는가 하는 문제가 있습니다.
이번의 경우, 「OK」버튼으로 닫는 것으로 합니다.
우선은 하기 쉽지 않은 예로부터.

작동하지 않는 예: 사용자 양식
Private Sub CommandButton1_Click()
    Unload UserForm1
End Sub

작동하지 않는 예: 표준 모듈
    UserForm1.Show
    Dim result As String
    result = UserForm1.ComboBox1.Text
    MsgBox result


사용자 양식에서 선택해도 결과를 얻을 수 없습니다.

잘 움직이지 않습니다. 그것도 그럴 것이고, 값을 취득하기 전에, 유저 폼을 닫은 단계에서 Unload하고 있기 때문에, 부품의 값도 취득할 수 없게 되어 버립니다.
그렇다고 해서 사용자 폼이 열려 있는 동안에는 다음과 같은 과정을 거치지 않으므로 사용자 폼을 열고 있는 동안에는 값을 변수에 넣을 수 없습니다.

그렇다면 어떻게 하는가 하면, 유저 폼을 일단 숨겨 버리면 됩니다.

사용자 양식
Private Sub CommandButton1_Click()
    UserForm1.Hide
End Sub

사용자 양식 측에서는 Unload가 아닌 hide를 사용하여 사용자 양식을 숨기고 다음 처리로 진행합니다.

표준 모듈
    UserForm1.Show
    Dim result As String
    result = UserForm1.ComboBox1.Text
    Unload UserForm1
    MsgBox result

표준 모듈 측에서 필요한 값을 변수에 넣은 다음 사용자 양식을 Unload합니다.

결과를 표준 모듈의 메시지 상자에서 받을 수 있었습니다.

표준 모듈의 처리중에 사용자 폼을 호출할 수 있게 되면, 사용자 폼의 활용의 폭이 더욱 넓어지는군요.

좋은 웹페이지 즐겨찾기