2015-03-09 5 views
0

Я занимаюсь созданием книги для хранения всех моих рецептов, и я пытаюсь добавить входные данные в пользовательской форме в следующую строку в таблице из объекта recipeInfo, который содержит все данные.Excel VBA добавляет новую строку в таблицу (excel crashing)

Операторы Debug.print предоставляют правильные выходы, насколько я могу судить, но строки, расположенные ниже, которые должны добавить информацию в строку после последнего в таблице, приводят к сбою excel при каждом запуске.

Я делаю что-то не так с рецептами команд команд?

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

Вы пробовали пройти через (F8), чтобы увидеть, является ли это одной конкретной линией? Всегда ли значение в 'newRecipe.servings'? – Porcupine911

+0

Он завершает работу в первой строке (элемент), я также попытался прокомментировать эту строку и другие строки, чтобы заставить Excel выйти. Кроме того, все свойства имеют значения. –

+0

Если я правильно понимаю, 'recipeInfo' является модулем класса? Если ваш код работает на строках 'Debug.Print' и печатает правильный вывод, я не вижу причин для отказа следующих строк. Если в первой строке «Debug.Print» она терпит неудачу, вам нужно пересмотреть свой «Модуль класса» (опять же, если мое предположение верно, что оно такое). – L42

ответ

0

Предполагая, что ваши Worksheets не защищен, вы можете попробовать обратиться к Cells(). Значение свойства ваших клеток вместо объектов Range, как вы делаете с .Cells().
Кроме того, Excel дает вам сообщение об ошибке?

0

Как правило, вы хотите использовать .CurrentRegion на столбце, который не будет иметь пробелы вместо .UsedRange, чтобы найти последнюю строку набора данных. .UsedRange имеет тенденцию возвращать все ячейки, которые вы прокрутили или присвоили формат, а не всем ячейкам, которые имеют фактические данные.

Это, вероятно, приводит к тому, что lastrow равно количеству строк максимального количества строк. Затем Excel сбой, когда он неправильно обрабатывает ошибку, когда вы пытаетесь настроить таргетинг на строку за пределами строки max.

Смежные вопросы