第一次在这里问一个问题,如果我的问题已经得到解答,我很抱歉(如果是的话,我不理解,因为我是一个完全的新手)。我用来更新特定作业上使用的库存供应数量的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
答案 0 :(得分:1)
AddToform.Controls("TextBox" & i).Value
正在做出许多假设:
AddToForm
与AddToForm.Show
一起显示。如果你这样做:
With New AddToForm
.Show
'...
End With
...然后代码不是指正在显示的实例,而文本框的.Value
很可能不是您所期望的,因为文本框您正在阅读的不是用户输入值的文本框。
表单上有一个名为"TextBox" & i
的控件。这意味着如果您将文本框重命名为更有意义的名称,例如FirstNameBox
,LastNameBox
(或任何有意义的东西),然后代码中断。使用控件名称来保存元数据(例如某些工作表行号偏移)可以工作,但是最好迭代表单上的控件(无论其名称是什么),测试当前控件是否为TextBox
(例如{ {1}}),然后从控件的If TypeOf ctrl Is MSForms.TextBox Then
属性中提取元数据。这样你的控件可以有意义的名称和重命名它们不会破坏任何逻辑。
用户输入有效。无论使用何种语言或技术,这都是一个不好的假设:始终保护您的代码免受无效输入的影响。如果用户输入“ABC”,则该循环中断。一种方法是引入一个局部变量,将从消费用户输入中获取用户输入 - 并在途中验证它:
Tag
这应该可以修复你的错误。