Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 有没有一种方法可以将userform的输入值(textbox)用作另一个userform的变量?_Vba_Variables_Textbox - Fatal编程技术网

Vba 有没有一种方法可以将userform的输入值(textbox)用作另一个userform的变量?

Vba 有没有一种方法可以将userform的输入值(textbox)用作另一个userform的变量?,vba,variables,textbox,Vba,Variables,Textbox,好的,那么我想完成的是:我有一个userform,询问用户需要处理多少新订单。我在这段代码中将用户输入设置为一个变量(不确定它是否有任何作用) 然后,当UserForm2弹出时,我希望能够输入更多的数据和关于订单的更具体的信息。因此,如果我在3中输入了Userform1,我希望必须在不同的时间向UserForm2提交新数据。我尝试使用For-Next循环(如下),但它不起作用。我不确定如何(或是否)在用户表单之间存储这样的变量 Private Sub CommandButton1_Click()

好的,那么我想完成的是:我有一个userform,询问用户需要处理多少新订单。我在这段代码中将用户输入设置为一个变量(不确定它是否有任何作用)

然后,当UserForm2弹出时,我希望能够输入更多的数据和关于订单的更具体的信息。因此,如果我在3中输入了Userform1,我希望必须在不同的时间向UserForm2提交新数据。我尝试使用For-Next循环(如下),但它不起作用。我不确定如何(或是否)在用户表单之间存储这样的变量

Private Sub CommandButton1_Click()

Dim lRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Core Info")
OrderNum.Text = NewOrders
lRow = ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row

For i = 1 To NewOrders

ws.Cells(lRow, 1).Value = TextBox1.Text
ws.Cells(lRow, 3).Value = TextBox2.Text

Next i

UserForm2.Hide

End Sub
第二个用户表单会按其应该的方式弹出,但之后就什么都不起作用了。有人能告诉我我能做些什么来解决这个问题吗

注意:我意识到上面这些都是以CommandButton1(默认值)开始的,但它们在不同的用户窗体上。

给表单控件提供更容易识别的名称,而不是含糊不清的
CommandButton1
术语,这将是很有帮助的(也是一种很好的编码实践)。将
UserForm1
上的
CommandButton1
名称修改为
Form1\u SubmitButton
。然后,使用此代码处理表单提交

Sub Form1_SubmitButton_Click()
' a textbox control named OrderNum on UserForm1 has captured the value
'Assign the value from the OrderNum textbox to a named variable in the worksheet
ActiveWorkbook.Names.Add "OrderNum", Me.OrderNum.Text

UserForm2.Show


End Sub
然后,在UserForm2中,将命令按钮的名称更改为类似于
Form2\u SubmitButton
的名称,并使用以下代码:

Sub Form2_SubmitButton_Click()
Dim orderNum as Long
orderNum = Replace(ActiveWorkbook.Names("OrderNum").Value,"=",vbNullString)

'the rest of your code goes here.

End Sub
因此,我们上面所做的是在工作表中创建一个
名称
,其中包含要在多个表单上使用的值。您始终可以通过替换(ActiveWorkbook.Names(“OrderNum”).value,“=”,vbNullString)来获取此值。


或者,您可以在代码模块中使用公共变量。

要在3个不同的时间提交数据,您需要3个表单控件(例如,
文本框
,等等),或者需要在3个不同的时间显示表单。除此之外,还不完全清楚您在问什么——我理解您想做什么,但您提供的描述和代码不足以真正帮助您。您只发布了1事件的代码,并且没有给出关于如何/何时显示单独的窗体等的详细信息。请考虑添加更多代码或更详细的过程描述。@ DavidZemens,我猜我没有意识到我不清楚。至于流程:当第一个用户表单弹出并询问“您有多少新订单”时,我希望能够说出当天有多少订单,然后单击提交。然后单击submit,我希望下一个userform获取我的数据,将其导出到列中的下一个可用行中,然后返回并再次请求我的数据,直到它达到我在第一个userform中指定的次数。这能更好地解释这个过程吗?至于更多/更好的代码,这就是我在这里的原因,很遗憾……为什么您需要第二个用户表单来将数据提交到工作表?如果您已经在
UserForm1
中捕获了信息,为什么不让该表单将数据提交到工作表中呢?第一个userform只询问我需要输入多少新条目。Userform2是我将为每个条目输入多个特定数据点的地方。例如,如果我有2个新订单,我指定在Userform1上单击submit。在Userform2上,我指定第一个是衬衫,颜色是蓝色,然后单击submit,它将该信息放在指定的单元格中。然后它再次弹出,我指定订单是黑色的鞋子,单击submit,将信息放入下一个单元格,sub结束,因为我当时只指定了2个订单。OK。我仍然认为一个表单可能更容易使用,但是如果你想使用两个表单,有几种方法可以做到这一点。最简单的方法是使用公共变量。不过我会建议另一种方法。David,我已经完成了所有这些,但是没有出现Userform2,让我可以多次填写更多数据。Userform1会再次弹出,当我点击它们各自的提交按钮时,它们会来回移动。在userform1中指定的时间内,它不会重复userform2。您的问题是如何在用户窗体之间传递变量。我提供了如何做到这一点的信息。如果此答案解决了该特定问题,请将答案标记为“已接受”。如果您有其他问题(似乎您不了解如何使用循环),请将其作为新问题提问。
Sub Form2_SubmitButton_Click()
Dim orderNum as Long
orderNum = Replace(ActiveWorkbook.Names("OrderNum").Value,"=",vbNullString)

'the rest of your code goes here.

End Sub