Excel VBA用户表单类型不匹配

时间:2017-12-14 15:29:48

标签: excel vba excel-vba

第一次在这里问一个问题,如果我的问题已经得到解答,我很抱歉(如果是的话,我不理解,因为我是一个完全的新手)。我用来更新特定作业上使用的库存供应数量的Excel用户表单正在生成

  

类型不匹配错误

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

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

1 个答案:

答案 0 :(得分:1)

AddToform.Controls("TextBox" & i).Value正在做出许多假设:

  • AddToFormAddToForm.Show一起显示。如果你这样做:

    With New AddToForm
        .Show
        '...
    End With
    

    ...然后代码不是指正在显示的实例,而文本框的.Value很可能不是您所期望的,因为文本框您正在阅读的不是用户输入值的文本框。

  • 表单上有一个名为"TextBox" & i的控件。这意味着如果您将文本框重命名为更有意义的名称,例如FirstNameBoxLastNameBox(或任何有意义的东西),然后代码中断。使用控件名称来保存元数据(例如某些工作表行号偏移)可以工作,但是最好迭代表单上的控件(无论其名称是什么),测试当前控件是否为TextBox(例如{ {1}}),然后从控件的If TypeOf ctrl Is MSForms.TextBox Then属性中提取元数据。这样你的控件可以有意义的名称​​和重命名它们不会破坏任何逻辑。

  • 用户输入有效。无论使用何种语言或技术,这都是一个不好的假设:始终保护您的代码免受无效输入的影响。如果用户输入“ABC”,则该循环中断。一种方法是引入一个局部变量,将消费用户输入中获取用户输入 - 并在途中验证它:

    Tag

    这应该可以修复你的错误。