Не пишу с самого начала в таблице. Excel VBA. - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь сделать систему инвентаризации.У меня есть в наличии количество и количество заказа.Пользователь нажимает кнопку предупреждения время от времени.Если количество повторного заказа меньше Доступного количества, делается запись на этой странице предупреждения.Я создаю новую страницу предупреждений каждый раз, когда пользователь нажимает кнопку «Предупреждение».Я очищаю содержимое этой страницы каждый раз для этого.

Проблема, с которой я сталкиваюсь, заключается в том, что MS Excel очищает содержимое, но не записывает новые записи из второй строки (первая строка имеет метки столбцов).Если у меня есть 5 содержимого на складе до того, как у меня будет текущее количество <количество для повторного заказа, и на странице оповещения будет сгенерировано предупреждение, а затем, если я позабочусь об этих 5 (добавьте количества, чтобы оно больше не было больше, чем количество для повторного заказа), и теперь яимеют 6-е содержимое, количество которого меньше количества повторного заказа, остальные 5 не отображаются, но 6-е отображается в 7-й строке, а не в первой.Где я понимаю это неправильно.Это происходит, даже если я закрою файл и снова открою его.</p>

Спасибо

row = 2
Worksheets("Alerts").UsedRange.ClearContents
Worksheets("Alerts").Range("B1") = Str(row)
Worksheets("Alerts").Cells(1, 1) = "Warehouse Name"
Worksheets("Alerts").Cells(1, 2) = "Name"
Worksheets("Alerts").Cells(1, 3) = "Quantity available"
Worksheets("Alerts").Cells(1, 4) = "Reorder Quantity"
rows_present_alerts = Worksheets("Alerts").UsedRange.Rows.Count + 1
While (Worksheets("InventoryID").Cells(row, 1) <> "")
    If (CLng(Worksheets("InventoryID").Cells(row, 3)) <    
       CLng(Worksheets("InventoryID").Cells(row, 4))) Then
       Worksheets("Alerts").Cells(rows_present_alerts, 1) = (Worksheets("InventoryID").Cells(row, 1))
       Worksheets("Alerts").Cells(rows_present_alerts, 2) = (Worksheets("InventoryID").Cells(row, 2))
       Worksheets("Alerts").Cells(rows_present_alerts, 3) = (Worksheets("InventoryID").Cells(row, 3))
       Worksheets("Alerts").Cells(rows_present_alerts, 4) = (Worksheets("InventoryID").Cells(row, 4))
       rows_present_alerts = rows_present_alerts + 1
    End If
   row = row + 1
Wend

Ответы [ 2 ]

3 голосов
/ 24 ноября 2011

Почему бы просто не использовать строку в цикле, а не row_present_alerts, если вы знаете, что каждый раз будете начинать со второго ряда?Для меня не имеет большого смысла, что вы очищаете лист, а затем беспокоитесь о количестве строк в используемом диапазоне.Не говоря уже о том, что UsedRange общеизвестно непредсказуем, особенно если у вас есть форматирование и т. П. На листе.

Я думаю, это то, что вам нужно:

2 голосов
/ 24 ноября 2011

Есть ли у вас какое-либо форматирование, сохраненное в ячейках на вашем листе оповещений? В Excel есть ряд странностей в том, как он вычисляет и работает с UsedRange, а ClearContents очищает только данные, но не форматирует и т. Д.

Есть ли причина, по которой вы не можете просто удалить лист оповещений, а затем каждый раз создавать новый? Это должно решить проблему.

...