ExcelVBA 사용자 양식에 표준 모듈에서 값을 전달하고 결과를 받습니다 (전역 변수 없음).
개요
「북의 오픈 이벤트나 버튼의 클릭 이벤트로 유저 폼을 열어 처리를 개시해, 표준 모듈을 부른다」
그것이 기본적인 처리인 것은 틀림없습니다. 그러나 아무래도 처리의 도중에 유저에게 선택해 주지 않으면 후처리의 형편상 잘 안 되는 경우가 있습니다.
표준 모듈에서 사용자 폼의 부품 값을 설정하는 것은 간단합니다만, 사용자의 선택 결과를 표준 모듈로 받는 곳에서 집계했기 때문에 정리합니다.
사용자 양식의 값 설정
이것은 간단하고 표준 모듈 내에서
· 사용자 양식 이름, 제어 이름, 속성
· 사용자 양식 이름, 제어 이름, 메소드
그러면 일반적으로 사용자 양식의 각 부품에 액세스할 수 있습니다.
사용자 양식에 값 설정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합니다.
결과를 표준 모듈의 메시지 상자에서 받을 수 있었습니다.
표준 모듈의 처리중에 사용자 폼을 호출할 수 있게 되면, 사용자 폼의 활용의 폭이 더욱 넓어지는군요.
Reference
이 문제에 관하여(ExcelVBA 사용자 양식에 표준 모듈에서 값을 전달하고 결과를 받습니다 (전역 변수 없음).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/harryyuni/items/5ddeb72e5634aadf4872
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이것은 간단하고 표준 모듈 내에서
· 사용자 양식 이름, 제어 이름, 속성
· 사용자 양식 이름, 제어 이름, 메소드
그러면 일반적으로 사용자 양식의 각 부품에 액세스할 수 있습니다.
사용자 양식에 값 설정
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합니다.
결과를 표준 모듈의 메시지 상자에서 받을 수 있었습니다.
표준 모듈의 처리중에 사용자 폼을 호출할 수 있게 되면, 사용자 폼의 활용의 폭이 더욱 넓어지는군요.
Reference
이 문제에 관하여(ExcelVBA 사용자 양식에 표준 모듈에서 값을 전달하고 결과를 받습니다 (전역 변수 없음).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/harryyuni/items/5ddeb72e5634aadf4872
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Private Sub CommandButton1_Click()
Unload UserForm1
End Sub
UserForm1.Show
Dim result As String
result = UserForm1.ComboBox1.Text
MsgBox result
Private Sub CommandButton1_Click()
UserForm1.Hide
End Sub
UserForm1.Show
Dim result As String
result = UserForm1.ComboBox1.Text
Unload UserForm1
MsgBox result
Reference
이 문제에 관하여(ExcelVBA 사용자 양식에 표준 모듈에서 값을 전달하고 결과를 받습니다 (전역 변수 없음).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/harryyuni/items/5ddeb72e5634aadf4872텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)