Excel 如何在另一个宏中使用用户窗体的结果?

Excel 如何在另一个宏中使用用户窗体的结果?,excel,userform,vba,Excel,Userform,Vba,我有一个userform,比如说当我在userform中单击按钮名时,它会要求我输入一个名称,并且它总是存储在 private sub button_click() name = inputbox("Please enter your name:") end sub 我想要的是,当我启动宏时,第一个用户窗体将出现,然后在用户输入必要的信息后,变量值将持续到主宏结束 我在搜索过去两天的问题,但没找到解决方案,但谁知道我可能找不到。因此,我在这里写作。提前谢谢 ` 另一个问题涉及: 假设我有

我有一个userform,比如说当我在userform中单击按钮名时,它会要求我输入一个名称,并且它总是存储在

private sub button_click()
  name = inputbox("Please enter your name:")
end sub
我想要的是,当我启动宏时,第一个用户窗体将出现,然后在用户输入必要的信息后,变量值将持续到主宏结束

我在搜索过去两天的问题,但没找到解决方案,但谁知道我可能找不到。因此,我在这里写作。提前谢谢

` 另一个问题涉及:

假设我有

    Public plant As Variant
Public checking As Variant
Public MeanCov1 As Variant
Public MeanCov2 As Variant
Public MeanCov3 As Variant
Public WeekCov1 As Variant
Public WeekCov2 As Variant
Public WeekCov3 As Variant
Public RolLow As Variant
Public RolHigh As Variant
Public ServiceLevel As Variant
Public TrendMultiplier As Variant
Public WeekCov11 As Variant
Public WeekCov22 As Variant
Public WeekCov33 As Variant

Sub initialize()
MeanCov1 = 0.3
MeanCov2 = 0.5
MeanCov3 = 0.7
WeekCov1 = 18
WeekCov2 = 13
WeekCov3 = 8
WeekCov11 = -14 + WeekCov1
WeekCov22 = -14 + WeekCov2
WeekCov33 = -14 + WeekCov3

RolLow = 0.3
RolHigh = 0.7

TrendMultiplier = 4

ROL_Analysis.Show
Application.Run ("ROL_Analysis_Macro")

End Sub
我不能初始化公共变量,例如在用户窗体中,它会显示变量值,但当我单击它时,它是完全空的

Private Sub ROLparameter_Click()
Line1: RolLow = InputBox("Please enter the lower bound percentage for ROL calculation between 0 and 100 (initially " & RolLow & "%):")

If Not 0 <= RolLow <= 100 Then GoTo Line1

Line2: RolHigh = InputBox("Please enter the upper bound percentage for ROL calculation between 0 and 100 (initially " & RolHigh & "%):")


End Sub

Private子参数_Click()
第1行:RolLow=InputBox(“请输入0到100之间ROL计算的下限百分比(最初为“&RolLow&“%):”)

如果不是0访问不同子系统中的变量,则全局定义它

Public Name As String

Private Sub button_click()
    Name = InputBox("Please enter your name:")
End Sub

Sub Foo()
    MsgBox Name
End Sub
对于第二个问题,如果您正在单击按钮,那么对于下面的代码,如果您单击了与您在输入框中键入的名称对应的按钮,您将收到一个警报

Public name As String

Sub button_click()
    name = InputBox("Please enter your name:")
End Sub

Private Sub button1_click()
    If name = "john" Then
        MsgBox name
    End If
End Sub

Private Sub button2_click()
    If name = "james" Then
        MsgBox name
    End If
End Sub

Private Sub button3_click()
    If name = "david" Then
        MsgBox name
    End If
End Sub

要访问不同子系统中的变量,请全局定义它

Public Name As String

Private Sub button_click()
    Name = InputBox("Please enter your name:")
End Sub

Sub Foo()
    MsgBox Name
End Sub
对于第二个问题,如果您正在单击按钮,那么对于下面的代码,如果您单击了与您在输入框中键入的名称对应的按钮,您将收到一个警报

Public name As String

Sub button_click()
    name = InputBox("Please enter your name:")
End Sub

Private Sub button1_click()
    If name = "john" Then
        MsgBox name
    End If
End Sub

Private Sub button2_click()
    If name = "james" Then
        MsgBox name
    End If
End Sub

Private Sub button3_click()
    If name = "david" Then
        MsgBox name
    End If
End Sub

如上所述,全局定义一个变量,以便在不同的子系统和不同的模块中访问它。我这里有一个非常简单的例子。我创建了一个名为Module1的模块。以下是它的全部代码:

Option Explicit
Public name As String

Sub Test()
    name = "David"
    UserForm1.Show
    MsgBox "The userform has closed"
End Sub
我还创建了一个名为UserForm1的userform。以下是所有代码和屏幕截图:

Option Explicit

Private Sub CommandButton1_Click()
    MsgBox Module1.name
End Sub

工作原理:

如果我启动Module1,
public
变量
name
将设置为“David”。在您的情况下,您可以使用inputbox将其设置为您想要的任何值。在这之后,userform将使用
.Show
启动,模块1将停止读取代码,直到您使用完UserForm1

当Userform1处于活动状态时,单击按钮将打开一个MsgBox,显示“David”,因为我访问公共变量
Module1.name
。我总是指定公共变量来自哪个模块。当我关闭userform时,Module1再次被激活,我得到一个msgbox,上面写着“userform已经关闭”

这回答了你所有的问题吗

单击按钮:

关闭表格:


如前所述,全局定义一个变量,以便在不同的子系统和不同的模块中访问它。我这里有一个非常简单的例子。我创建了一个名为Module1的模块。以下是它的全部代码:

Option Explicit
Public name As String

Sub Test()
    name = "David"
    UserForm1.Show
    MsgBox "The userform has closed"
End Sub
我还创建了一个名为UserForm1的userform。以下是所有代码和屏幕截图:

Option Explicit

Private Sub CommandButton1_Click()
    MsgBox Module1.name
End Sub

工作原理:

如果我启动Module1,
public
变量
name
将设置为“David”。在您的情况下,您可以使用inputbox将其设置为您想要的任何值。在这之后,userform将使用
.Show
启动,模块1将停止读取代码,直到您使用完UserForm1

当Userform1处于活动状态时,单击按钮将打开一个MsgBox,显示“David”,因为我访问公共变量
Module1.name
。我总是指定公共变量来自哪个模块。当我关闭userform时,Module1再次被激活,我得到一个msgbox,上面写着“userform已经关闭”

这回答了你所有的问题吗

单击按钮:

关闭表格:


不起作用,它应该如何起作用?潜艇之间没有联系。我不能把另一个潜艇放在一个潜艇里,它会把它分开。我可以使用call subname传递变量,但有3次不同的单击指向同一变量,因此call不会给我任何解决方案。变量“Name”定义为全局变量。运行按钮时,请输入名称并将其存储到变量中。当您运行Foo()时,前面输入的名称将被警告,因为“name”定义为每个sub都可以访问的全局名称。这对memake来说非常有效,请确保您将变量
name
定义为所有sub
Public name之外的全局变量,并将其定义为String
,您将能够在我尝试的所有subi中访问它,但当我尝试定义它时,它会出错,因为它不在任何sub之间。如果它对你完全有效,我会尝试更多,也许我错过了什么。我能再问一个问题吗?假设我有私有子按钮1_click()name=john end sub private sub button2_click()name=james end sub private sub button3_click()name=david end sub,因此用户有3个标记选项,当用户单击其中一个时,将转到其中一个按钮单击。我可以只读取方法选择的名称吗?变量将保存上次单击按钮的名称。当您手动分配名称(如
name=“john”
时,请确保您没有丢失
不工作,它应该如何工作?潜艇之间没有联系。我不能把另一个潜艇放在一个潜艇里,它会把它分开。我可以使用call subname传递变量,但有3次不同的单击指向同一变量,因此call不会给我任何解决方案。变量“Name”定义为全局变量。运行按钮时,请输入名称并将其存储到变量中。当您运行Foo()时,前面输入的名称将被警告,因为“name”定义为每个sub都可以访问的全局名称。这对memake来说非常有效,请确保您将变量
name
定义为所有sub
Public name之外的全局变量,并将其定义为String
,您将能够在我尝试的所有subi中访问它,但当我尝试定义它时,它会出错,因为它不在任何sub之间。如果它对你完全有效,我会尝试更多,也许我错过了什么。我能再问一个问题吗?