2011-11-23 94 views
0

我正在嘗試製作庫存系統。我有可用數量和重新訂購數量。用戶每隔一段時間點擊一次提醒按鈕。如果再訂貨數量少於可用數量,則進入此報警頁面。每當用戶點擊「警報」按鈕時,我都會創建一個新的警報頁面。我爲此每次都清除此頁面的內容。不從電子表格的開頭寫入。 Excel VBA。

我面臨的問題是,MS Excel正在清除內容,但沒有從第二行寫入新記錄(第一行有列標籤)。如果我在倉庫中有5個內容之前有當前數量<重新排序數量,並且警報在警報頁面中生成,然後如果我處理這些5(添加數量使其不小於重新訂購數量),現在我有第6個內容的數量小於重新訂購數量,其他5個不顯示,但第6個顯示在第7行而不是第1行。我在哪裏弄錯了。 即使關閉文件並重新打開,也會發生這種情況。

感謝

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 

回答

3

爲什麼不在row_present_alerts中使用row而不是row_present_alerts?如果你知道每次都要在第二行開始?對於我來說,清除表單並且擔心所用範圍內的行數並沒有多大意義。更何況,UsedRange是非常不可預知的,尤其是如果你在表格上格式化等等。

我想這是你所追求的:

row = 2 
loopCounter = 2 

Worksheets("Alerts").Cells.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" 

While (Worksheets("InventoryID").Cells(loopCounter, 1) <> "") 
    If (CLng(Worksheets("InventoryID").Cells(row, 3)) <  
     CLng(Worksheets("InventoryID").Cells(row, 4))) Then 
     Worksheets("Alerts").Cells(row, 1) = (Worksheets("InventoryID").Cells(loopCounter, 1)) 
     Worksheets("Alerts").Cells(row, 2) = (Worksheets("InventoryID").Cells(loopCounter, 2)) 
     Worksheets("Alerts").Cells(row, 3) = (Worksheets("InventoryID").Cells(loopCounter, 3)) 
     Worksheets("Alerts").Cells(row, 4) = (Worksheets("InventoryID").Cells(loopCounter, 4)) 
     row = row + 1 
    End If 
    loopCounter = loopCounter + 1 
Wend 
+0

以及我使用了兩個變量因爲工作表InventoryID將有很多行,並不是所有的都有資格獲得「警報」(條件是重新訂購數量應該少於可用數量)。因此,如果InventoryID中的第8個和第10個項目需要重新排序,則我的警報表將在第2行,第8個和第10個行中有記錄,其餘部分將爲空。 – Ank

+0

@Ankur,是兩個變量是處理此問題的正確方法,並且我保留該方法在我的解決方案中。我剛剛刪除了關於使用範圍的位並清除了整個表格。我認爲這會對你有用。 –

+0

這很有道理..傻我!謝謝 – Ank

2

你有你的警報表保存在細胞中的任何格式? Excel在計算和使用UsedRange方面存在一些怪異現象,而ClearContents僅清除數據,而不是格式化等。

是否有任何理由不能刪除警報工作表,然後創建一個新的時間?這應該可以解決問題。

+0

你的意思是這樣................. Application.DisplayAlerts =假 表(」警告「)。刪除 Application.DisplayAlerts = True Worksheets.Add.Name =」Alerts「 – Ank

+0

讓我試試........... – Ank

+0

謝謝Vicky!它在這種情況下起作用,但還有另外一種類似的情況,我無法刪除工作表。如果我不想刪除工作表,我該怎麼辦? – Ank

相關問題