在用户表单上input慢速input

我有一个用户表单只在工作簿的第一次打开才能从用户获取项目信息。

表单是非常基本的,我有12个标签,每个标签有1个文本框,1个combobox或最多1个文本框和1个combobox在一起。

问题是这个用户表单popup时, input速度太慢了 。 只要这种forms没有任何主要的代码,就不应该花那么多时间。 即使在页面中没有任何自动计算,我将input反映为输出(这就是为什么这个问题不能帮助我: 如何提高excel VBA中的用户表单的存储速度 )

(PS:ComboBoxes的行源是命名的范围,但我有另一种forms相同的风格,我不面对这个问题)

这是我的输出代码:

'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 

因此,作为一个例子,作为第一个input项目名称,当我开始input项目名称,每按一个单词后,几乎有一个滞后的继续写,这是绝对不正常的。

您的代码当前已设置,以便每次更改文本框(即用户键入一个字符)时,代码将值写入工作簿(并且工作簿将重新计算依赖于该单元格的任何内容)。 这将是缓慢的。

除非你需要存储所有的信息,因为每个字段被input(在这种情况下,我至less会改变一个TextBox1_Exit事件,而不是TextBox1_Change ),那么我build议你把所有的TextBoxes和ComboBoxes的内容写入工作表,当用户点击某种“确定”button。

(我不会使用表单的Click事件 – 用户不小心点击表单上的某个地方,因此在表单准备好之前closures表单太容易了。)

我build议你:

  • 创build一个button – 默认情况下它将被称为CommandButton1,但是如果你喜欢,你可以改变它的Name为“OKButton”。

  • 改变button的Caption说“OK”,或类似的东西,以便用户知道点击它,当他们input所有的信息。

  • 把你的代码放入子CommandButton1_Click (或OKButton_Click如果你把button重命名为OKButton )。

然后,当用户点击button,你的代码将运行。

可能的代码:

 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