用户表单输入缓慢
Slow Input Writing on User Form
我有一个用户表单,它仅在第一次打开工作簿时出现,以从用户那里获取项目信息。
表单非常基本,我有 12 个标签,每个标签有 1 个文本框、1 个组合框或最多 1 个文本框和 1 个组合框。
问题是弹出这个用户表单时,输入速度特别慢。只要此表单中没有任何主要代码,就不会花费那么多时间。即使在我将输入反映为输出的页面中也没有任何自动计算。(这就是为什么这个问题对我没有帮助:)
(P.S: 组合框的行源是命名范围,但我有另一个具有相同样式的表单,我没有遇到这个问题)
这是我的输出代码:
'Project Name Input
Private Sub TextBox7_Change()
Sheet2.Range("E3").Value = TextBox7.Value
End Sub
'Customer Name input
Private Sub TextBox1_Change()
Sheet2.Range("E4").Value = TextBox1.Value
End Sub
'Region Input
Private Sub ComboBox1_Change()
Sheet2.Range("E5").Value = ComboBox1.Value
End Sub
'City Input
Private Sub TextBox6_Change()
Sheet2.Range("G5").Value = TextBox6.Value
End Sub
'Bid Currency Input
Private Sub ComboBox2_Change()
Sheet2.Range("E6").Value = ComboBox2.Value
End Sub
'Industry Type Input
Private Sub ComboBox3_Change()
Sheet2.Range("E7").Value = ComboBox3.Value
End Sub
'Application Type Input
Private Sub ComboBox4_Change()
Sheet2.Range("E8").Value = ComboBox4.Value
End Sub
'Opportunity/Job Number Input
Private Sub TextBox5_Change()
Sheet2.Range("E9").Value = TextBox5.Value
End Sub
'Plant Capacity First Input
Private Sub TextBox4_Change()
Sheet2.Range("E10").Value = TextBox4.Value
End Sub
'Plant Capacity Second (Unit) Input
Private Sub ComboBox5_Change()
Sheet2.Range("F10").Value = ComboBox5.Value
End Sub
'Number of Trains First Input (each)
Private Sub TextBox2_Change()
Sheet2.Range("E11").Value = TextBox2.Value
End Sub
'Number of Trains Second Input (percentage)
Private Sub TextBox3_Change()
Sheet2.Range("g11").Value = TextBox3.Value
End Sub
'Process Type 1st Input
Private Sub ComboBox6_Change()
Sheet2.Range("E12").Value = ComboBox6.Value
End Sub
'Process Type 2nd Input
Private Sub ComboBox10_Change()
Sheet2.Range("f12").Value = ComboBox10.Value
End Sub
'Process Type 3rd Input
Private Sub ComboBox9_Change()
Sheet2.Range("g12").Value = ComboBox9.Value
End Sub
'Process Type 4th Input
Private Sub ComboBox8_Change()
Sheet2.Range("H12").Value = ComboBox8.Value
End Sub
'Engineering Specifications Input
Private Sub ComboBox7_Change()
Sheet2.Range("e13").Value = ComboBox7.Value
End Sub
Private Sub UserForm_Click()
Unload Me
End Sub
所以,为了更清楚,举个例子:因为第一个输入是项目名称,当我开始输入项目名称时,在我按下每个单词之后,几乎有第二个延迟继续写和这绝对不正常。
您的代码当前设置为每次更改 TextBox(即用户键入一个字符)时,代码都会将值写入工作簿(并且工作簿将重新计算依赖于该单元格的任何内容) .那会很慢。
除非您需要在输入每个字段时存储所有信息(在这种情况下,我至少会更改为 TextBox1_Exit
事件而不是 TextBox1_Change
),那么我建议您编写当用户单击某种 "OK" 按钮时,将所有文本框和组合框的内容添加到工作表中。
(我不会使用表单的 Click 事件 - 用户很容易不小心单击表单上的某处,因此在准备好之前关闭表单。)
我建议你:
创建一个按钮 - 默认情况下它将被称为 CommandButton1,但您可以根据需要将其 Name
更改为 "OKButton" 之类的名称。
将按钮的 Caption
更改为 "OK" 或类似的内容,以便用户知道在输入所有信息后单击它。
将您的代码放入名为 CommandButton1_Click
的子程序中(如果您将按钮重命名为 OKButton
,则为 OKButton_Click
)。
然后,当用户点击按钮时,您的代码将 运行。
可能的代码:
Private Sub CommandButton1_Click()
'Project Name Input
Sheet2.Range("E3").Value = TextBox7.Value
'Customer Name input
Sheet2.Range("E4").Value = TextBox1.Value
'Region Input
Sheet2.Range("E5").Value = ComboBox1.Value
'City Input
Sheet2.Range("G5").Value = TextBox6.Value
'Bid Currency Input
Sheet2.Range("E6").Value = ComboBox2.Value
'Industry Type Input
Sheet2.Range("E7").Value = ComboBox3.Value
'Application Type Input
Sheet2.Range("E8").Value = ComboBox4.Value
'Opportunity/Job Number Input
Sheet2.Range("E9").Value = TextBox5.Value
'Plant Capacity First Input
Sheet2.Range("E10").Value = TextBox4.Value
'Plant Capacity Second (Unit) Input
Sheet2.Range("F10").Value = ComboBox5.Value
'Number of Trains First Input (each)
Sheet2.Range("E11").Value = TextBox2.Value
'Number of Trains Second Input (percentage)
Sheet2.Range("g11").Value = TextBox3.Value
'Process Type 1st Input
Sheet2.Range("E12").Value = ComboBox6.Value
'Process Type 2nd Input
Sheet2.Range("f12").Value = ComboBox10.Value
'Process Type 3rd Input
Sheet2.Range("g12").Value = ComboBox9.Value
'Process Type 4th Input
Sheet2.Range("H12").Value = ComboBox8.Value
'Engineering Specifications Input
Sheet2.Range("e13").Value = ComboBox7.Value
Unload Me
End Sub
我有一个用户表单,它仅在第一次打开工作簿时出现,以从用户那里获取项目信息。
表单非常基本,我有 12 个标签,每个标签有 1 个文本框、1 个组合框或最多 1 个文本框和 1 个组合框。
问题是弹出这个用户表单时,输入速度特别慢。只要此表单中没有任何主要代码,就不会花费那么多时间。即使在我将输入反映为输出的页面中也没有任何自动计算。(这就是为什么这个问题对我没有帮助:
(P.S: 组合框的行源是命名范围,但我有另一个具有相同样式的表单,我没有遇到这个问题)
这是我的输出代码:
'Project Name Input
Private Sub TextBox7_Change()
Sheet2.Range("E3").Value = TextBox7.Value
End Sub
'Customer Name input
Private Sub TextBox1_Change()
Sheet2.Range("E4").Value = TextBox1.Value
End Sub
'Region Input
Private Sub ComboBox1_Change()
Sheet2.Range("E5").Value = ComboBox1.Value
End Sub
'City Input
Private Sub TextBox6_Change()
Sheet2.Range("G5").Value = TextBox6.Value
End Sub
'Bid Currency Input
Private Sub ComboBox2_Change()
Sheet2.Range("E6").Value = ComboBox2.Value
End Sub
'Industry Type Input
Private Sub ComboBox3_Change()
Sheet2.Range("E7").Value = ComboBox3.Value
End Sub
'Application Type Input
Private Sub ComboBox4_Change()
Sheet2.Range("E8").Value = ComboBox4.Value
End Sub
'Opportunity/Job Number Input
Private Sub TextBox5_Change()
Sheet2.Range("E9").Value = TextBox5.Value
End Sub
'Plant Capacity First Input
Private Sub TextBox4_Change()
Sheet2.Range("E10").Value = TextBox4.Value
End Sub
'Plant Capacity Second (Unit) Input
Private Sub ComboBox5_Change()
Sheet2.Range("F10").Value = ComboBox5.Value
End Sub
'Number of Trains First Input (each)
Private Sub TextBox2_Change()
Sheet2.Range("E11").Value = TextBox2.Value
End Sub
'Number of Trains Second Input (percentage)
Private Sub TextBox3_Change()
Sheet2.Range("g11").Value = TextBox3.Value
End Sub
'Process Type 1st Input
Private Sub ComboBox6_Change()
Sheet2.Range("E12").Value = ComboBox6.Value
End Sub
'Process Type 2nd Input
Private Sub ComboBox10_Change()
Sheet2.Range("f12").Value = ComboBox10.Value
End Sub
'Process Type 3rd Input
Private Sub ComboBox9_Change()
Sheet2.Range("g12").Value = ComboBox9.Value
End Sub
'Process Type 4th Input
Private Sub ComboBox8_Change()
Sheet2.Range("H12").Value = ComboBox8.Value
End Sub
'Engineering Specifications Input
Private Sub ComboBox7_Change()
Sheet2.Range("e13").Value = ComboBox7.Value
End Sub
Private Sub UserForm_Click()
Unload Me
End Sub
所以,为了更清楚,举个例子:因为第一个输入是项目名称,当我开始输入项目名称时,在我按下每个单词之后,几乎有第二个延迟继续写和这绝对不正常。
您的代码当前设置为每次更改 TextBox(即用户键入一个字符)时,代码都会将值写入工作簿(并且工作簿将重新计算依赖于该单元格的任何内容) .那会很慢。
除非您需要在输入每个字段时存储所有信息(在这种情况下,我至少会更改为 TextBox1_Exit
事件而不是 TextBox1_Change
),那么我建议您编写当用户单击某种 "OK" 按钮时,将所有文本框和组合框的内容添加到工作表中。
(我不会使用表单的 Click 事件 - 用户很容易不小心单击表单上的某处,因此在准备好之前关闭表单。)
我建议你:
创建一个按钮 - 默认情况下它将被称为 CommandButton1,但您可以根据需要将其
Name
更改为 "OKButton" 之类的名称。将按钮的
Caption
更改为 "OK" 或类似的内容,以便用户知道在输入所有信息后单击它。将您的代码放入名为
CommandButton1_Click
的子程序中(如果您将按钮重命名为OKButton
,则为OKButton_Click
)。
然后,当用户点击按钮时,您的代码将 运行。
可能的代码:
Private Sub CommandButton1_Click()
'Project Name Input
Sheet2.Range("E3").Value = TextBox7.Value
'Customer Name input
Sheet2.Range("E4").Value = TextBox1.Value
'Region Input
Sheet2.Range("E5").Value = ComboBox1.Value
'City Input
Sheet2.Range("G5").Value = TextBox6.Value
'Bid Currency Input
Sheet2.Range("E6").Value = ComboBox2.Value
'Industry Type Input
Sheet2.Range("E7").Value = ComboBox3.Value
'Application Type Input
Sheet2.Range("E8").Value = ComboBox4.Value
'Opportunity/Job Number Input
Sheet2.Range("E9").Value = TextBox5.Value
'Plant Capacity First Input
Sheet2.Range("E10").Value = TextBox4.Value
'Plant Capacity Second (Unit) Input
Sheet2.Range("F10").Value = ComboBox5.Value
'Number of Trains First Input (each)
Sheet2.Range("E11").Value = TextBox2.Value
'Number of Trains Second Input (percentage)
Sheet2.Range("g11").Value = TextBox3.Value
'Process Type 1st Input
Sheet2.Range("E12").Value = ComboBox6.Value
'Process Type 2nd Input
Sheet2.Range("f12").Value = ComboBox10.Value
'Process Type 3rd Input
Sheet2.Range("g12").Value = ComboBox9.Value
'Process Type 4th Input
Sheet2.Range("H12").Value = ComboBox8.Value
'Engineering Specifications Input
Sheet2.Range("e13").Value = ComboBox7.Value
Unload Me
End Sub