[英]VBA pass argument to userform
我有一个用户表单,希望将其传递给它。 我尝试了几种不同的方法来执行此操作,但似乎没有用。
这是子代码:
Option Explicit Sub Additional_Comments_Normal() Dim MSG1 As Integer Dim msg As String Dim act As Range On Error GoTo ErrHandler 'Calls userform MSG1 = MsgBox("Would you like to add comments", vbYesNo, "Add comments") If MSG1 = vbYes Then With AddComments On Error Resume Next Set act = Application.InputBox(Prompt:="Please choose files you wish to add comments to", Type:=8) If act Is Nothing Then Exit Sub End If Application.ScreenUpdating = True .Show End With Else Exit Sub End If ErrHandler: If Err.Number <> 0 Then msg = "Error # " & Str(Err.Number) & " was generated by " _ & Err.Source & Chr(13) & Err.Description MsgBox msg, , "Error", Err.HelpFile, Err.HelpContext End If End Sub
用户表单代码在这里:
Public act As Range Private Sub CommandButton1_Click() Dim ctl As Control Dim rng As Range Dim MSG2 As Integer Dim sfile As String If act.Column > 1 Then MsgBox ("Please choose File name from Column 1") Exit Sub End If If act.Row < 4 Then MsgBox ("Please choose a valid file") Exit Sub End If If Me.TxtComment.Value = "" Then MsgBox "Please add comments", vbExclamation, "Additional Comments" Me.TxtComment.SetFocus Exit Sub End If If Me.TxtName.Value = "" Then MsgBox "Please add your name", vbExclamation, "Additional Comments" Me.TxtName.SetFocus Exit Sub End If MSG1 = MsgBox("Add Comments ?", vbYesNo, "Add comments") If MSG1 = vbNo Then End If If MSG1 = vbYes Then act.Offset(0, 16).Value = act.Offset(0, 16).Text & " " & Me.TxtComment.Value act.Offset(0, 17).Value = act.Offset(0, 17).Text & " " & Me.TxtName.Value For Each ctl In Me.Controls If TypeName(ctl) = "TextBox" Then ctl.Value = "" End If Next ctl AddComments.Hide Application.DisplayAlerts = False ActiveWorkbook.Save Application.DisplayAlerts = True End If End Sub Private Sub CommandButton2_Click() End Sub Private Sub CommandButton3_Click() Unload Me End Sub Private Sub UserForm_Click() End Sub
然后,我收到有关该行为未定义变量的错误。
谁能为此提供更好的流程?
您已在代码顶部设置了Option Explicit
。 这意味着需要定义所有变量(这被认为是良好的编程习惯)。 因此,您有两种方法可以解决此问题:
(1)从您的代码中删除Option Explicit
行,或者
(2)使用Dim
命令定义所有变量。 在这种情况下,您必须在表单上的Sub CommandButton1_Click
添加Dim act as Range
。
如果您想将变量传递给另一个子,则可以使用该变量调用该子,如下所示:
Call Additional_Comments_Normal(act)
子标头需要像这样更改:
Sub Additional_Comments_Normal(ByVal act as Range)
'(your code)'
End Sub
如果“将变量传递给另一个子项”太麻烦了,那么您也可以将范围保存在文件中的某处,如下所示:
SomeHiddenSheet.Range("A1").Value2 = act
在另一个子目录中,您可以再次启动操作:
act = SomeHiddenSheet.Range("A1").Value2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.