Excel VBA userformtypes不匹配

第一次在这里问一个问题,我的道歉,如果我的问题已经被回答(如果是这样,我不明白,因为我是一个完全新手 )。 我使用Excel用户窗体更新特定作业上使用的库存量的数量正在生成一个

types不匹配错误

它应该将用量表中的数量添加到工作表上相应单元格的条目中。 我认为这与variables未被正确声明有关。

Private Sub SubmitFormButton_Click() Dim Data_Start As Range Dim i As Integer Set Data_Start = ActiveSheet.Cells(6, 6) For i = 1 To 31 Data_Start.Offset(i, 0) = Data_Start.Offset(i, 0) + AddToform.Controls("TextBox" & i).Value Next i Unload AddToform End Sub 

AddToform.Controls("TextBox" & i).Value正在做一些假设:

  • AddToForm显示与AddToForm.Show 。 如果你这样做:

     With New AddToForm .Show '... End With 

    …那么代码不是指正在显示的实例 ,并且文本框的.Value很可能不是您所期望的,因为您正在阅读的文本框不是用户的文本框在中input一个值。

  • 在窗体上有一个名为"TextBox" & i 。 这意味着,如果你曾经将你的文本框重命名为更有意义的名字,比如FirstNameBoxLastNameBox (或者其他有意义的名称),那么代码就会中断。 使用控制名称来保存元数据(例如一些工作表行号偏移量)可以工作,但它可能会更好地迭代窗体上的控件(不pipe他们的名字是什么),testing当前控件是否是一个TextBox (例如, If TypeOf ctrl Is MSForms.TextBox Then ),然后从控件的Tag属性中提取元数据。 这样,你的控件可以有有意义的名字重命名它们不会破坏任何逻辑。

  • 用户input有效。 无论使用何种语言或技术, 总是做出一个糟糕的假设: 始终保护您的代码免受无效input的干扰。 如果用户input“ABC”,则该循环中断。 一种方法是引入一个局部variables来分隔获取用户input 消费用户input ,并在途中对其进行validation:

     If IsNumeric(Controls("TextBox" & i).Value) Then Dim validInput As Double validInput = CDbl(Controls("TextBox" & i).Value) Data_Start.Offset(i, 0) = Data_Start.Offset(i, 0) + validInput End If 

    这应该修复你的错误。