VBA中主程序无法收到用户窗体回传的值,请问这是哪里写错了啊
原来用的Msgbox,可以在名单右侧记录点名结果,换成用户窗体就不行了
```vb.net
Public Sub 点名模拟()
Dim result As String
Sheets("点名").Select
'清空点名结果
Range("C13:C26").ClearContents
'按顺序点名
For i = 13 To 26
UserForm1.Label1.Caption = Range("B" & i).Value
UserForm1.Show
Select Case resultValue
Case "Yes" '出勤
Range("C" & i).Value = "出勤"
Case "Cancel" '请假
Range("C" & i).Value = "请假"
Case "No" '迟到
Range("C" & i).Value = "迟到"
End Select
Next i
End Sub
Public resultValue As String
Private Sub CommandButton1_Click()
resultValue = "Yes"
Unload Me
End Sub
Private Sub CommandButton2_Click()
resultValue = "Yes"
Unload Me
End Sub
Private Sub CommandButton3_Click()
resultValue = "Yes"
Unload Me
End Sub
```
Select Case resultValue
->
Select Case UserForm1.resultValue
另外,不要 Unload Me,换成 Me.Hide 看看
有两处问题,变量跨模块没有加对象,销毁的对象不能访问其属性。参考下面代码修改:
Public Sub 点名模拟()
Dim result As String
Sheets("点名").Select
'清空点名结果
Range("C13:C26").ClearContents
'按顺序点名
For i = 13 To 26
UserForm1.Label1.Caption = Range("B" & i).Value
UserForm1.Show
Select Case UserForm1.resultValue
Case "Yes" '出勤
Range("C" & i).Value = "出勤"
Case "Cancel" '请假
Range("C" & i).Value = "请假"
Case "No" '迟到
Range("C" & i).Value = "迟到"
End Select
Next i
End Sub
Public resultValue As String
Private Sub CommandButton1_Click()
resultValue = "Yes"
Me.Hide
End Sub
Private Sub CommandButton2_Click()
resultValue = "Yes"
Me.Hide
End Sub
Private Sub CommandButton3_Click()
resultValue = "Yes"
Me.Hide
End Sub
Private Sub UserForm_Click()
End Sub
是不是要先 关闭前执行事件:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
不知道你这个问题是否已经解决, 如果还没有解决的话:在VBA中,收到用户窗体回传的值需要使用函数来获取,常用的函数是InputBox和UserForm。如果使用MsgBox来展示用户窗体,就只是单向的展示一个信息,无法获取用户的输入值。
如果使用InputBox函数,可以使用以下代码:
Sub GetInputValue()
Dim inputValue As String
inputValue = InputBox("请输入您的值:")
MsgBox "您输入的值是:" & inputValue
End Sub
如果使用UserForm,可以先新建一个UserForm,添加一个TextBox来接受用户输入的值,再添加一个Button来确认输入值并关闭窗体。代码如下:
在模块中添加以下代码:
Sub ShowUserForm()
UserForm1.Show
End Sub
Function GetInputValue() As String
GetInputValue = UserForm1.TextBox1.Value
End Function
在UserForm1的代码中,添加以下代码:
Private Sub CommandButton1_Click()
Unload Me
End Sub
这样,在主程序中调用ShowUserForm函数即可展示用户窗体,同时通过GetInputValue函数获取用户输入的值。
如果仍然无法收到值,可能需要检查用户窗体的代码是否正确,特别是确认按钮的代码是否正确保存输入值并关闭窗体。
用户窗体被卸载了,resultValue变量就失去了对用户窗体的引用,所以无法真正接收到返回值。