如何在另一个宏中使用User Form的结果?

时间:2016-08-24 11:00:09

标签: excel-vba userform vba excel

我有一个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

2 个答案:

答案 0 :(得分:2)

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

Public Name As String

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

Sub Foo()
    MsgBox Name
End Sub

对于第二个问题,如果您点击按钮,那么对于下面的代码,如果您点击了与您在InputBox中输入的名称相对应的按钮,您将收到提醒

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

答案 1 :(得分:1)

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

DatabaseHelper myDB;
public class ReadRssBackground extends AsyncTask<Context, Void, Void> {      

  @Override
  protected void onPreExecute() {
    myDB = new DatabaseHelper(context); 
  }

  @Override
  protected void doInBackground(Context... contexts) {                                 
     checkXML(GetData());
     return null;
  }
}

public void checkXML(Document data) {       
    myDB.insertData("2", "Tittel", "www.link.de","Stuff");
}  

public Document GetData() {
    //here i get the document from a url
}

我还创建了一个名为UserForm1的用户窗体。以下是所有代码及其截图:

Option Explicit
Public name As String

Sub Test()
    name = "David"
    UserForm1.Show
    MsgBox "The userform has closed"
End Sub

enter image description here

工作原理:

如果我启动Module1,Option Explicit Private Sub CommandButton1_Click() MsgBox Module1.name End Sub 变量public将设置为&#34; David&#34;。在您的情况下,您可以使用输入框将其设置为您想要的任何内容。之后,用name启动用户窗体,并且Module1停止阅读代码,直到您完成UserForm1。

当Userform1处于活动状态时,单击该按钮将打开一个MsgBox,说“#34; David&#34;”,因为我访问了公共变量.Show。我总是指定公共变量来自哪个模块。当我关闭用户窗体时,Module1再次被激活,我得到一个msgbox说&#34;用户窗体已关闭&#34;。

这会回答您的所有问题吗?

点击按钮:

enter image description here

结束表格:

enter image description here