我一直在构建一个工作簿来存储我的所有食谱,我试图将userform中的输入添加到包含所有数据的recipeInfo对象的表中的下一行。
就我所知,Debug.print语句给出了正确的输出,但下面的行应该将信息添加到表中最后一行之后的行中,导致excel在运行时崩溃。 / p>
我是否在使用recipeSheet.cells命令做错了什么?
Sub addData(newRecipe As recipeInfo)
Dim col As Integer
Dim recipeSheet As Worksheet
Dim lastRow As Integer
Set recipeSheet = ActiveWorkbook.Sheets("Recipes")
lastRow = recipeSheet.UsedRange.Rows.Count
'MsgBox (recipeSheet.Name & ", " & lastRow)
'add data into range
Debug.Print (newRecipe.item)
Debug.Print (newRecipe.cost)
Debug.Print (newRecipe.servings)
Debug.Print (newRecipe.cost / newRecipe.servings)
Debug.Print (newRecipe.ingredients)
Debug.Print (newRecipe.instructions)
recipeSheet.Cells(lastRow + 1, 1) = newRecipe.item
recipeSheet.Cells(lastRow + 1, 2) = newRecipe.cost
recipeSheet.Cells(lastRow + 1, 3) = newRecipe.servings
recipeSheet.Cells(lastRow + 1, 4) = newRecipe.cost / newRecipe.servings
recipeSheet.Cells(lastRow + 1, 5) = newRecipe.ingredients
recipeSheet.Cells(lastRow + 1, 6) = newRecipe.instructions
End Sub
答案 0 :(得分:0)
假设您的工作表没有受到保护,您可以尝试使用.Cells()来处理单元格的Cells()。Value属性而不是Range对象。
另外,Excel会给你一个错误信息吗?
答案 1 :(得分:0)
通常,您希望在没有空格而不是.CurrentRegion
的列上使用.UsedRange
来查找数据集的最后一行。 .UsedRange
倾向于返回您滚动到的所有单元格或指定格式而不是所有具有实际数据的单元格。
这可能导致lastrow
等于excels最大行数的行。当您尝试将行超出最大行时,如果Excel无法正确处理错误,则Excel会崩溃。
答案 2 :(得分:0)
我注意到,当您将对象列表或表设置为列表框的行源时,会出现这种错误,特别是在保存工作簿并再次开始添加后,请检查项目中是否有附加到该表的列表框而不是在列表框的专有属性上进行编码,而是在用户窗体为我初始化时对其进行编码,以使其希望对他人有所帮助