不在电子表格中从头开始写入。 Excel VBA。

Posted

技术标签:

【中文标题】不在电子表格中从头开始写入。 Excel VBA。【英文标题】:Not writing from the beginning in the spreadsheet. Excel VBA. 【发布时间】:2011-11-23 20:52:01 【问题描述】:

我正在尝试制作库存系统。我有可用数量和重新订购数量。用户时不时地单击警报按钮。如果再订购数量少于可用数量,则会进入此警报页面。每次用户单击“警报”按钮时,我都会创建一个新的警报页面。为此,我每次都清除此页面的内容。

我面临的问题是 MS excel 正在清除内容,但没有从第二行写入新记录(第一行有列标签)。如果在当前数量

谢谢

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

【问题讨论】:

【参考方案1】:

如果您知道每次都将从第二行开始,为什么不在循环中使用 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

【讨论】:

好吧,我使用了两个变量,因为工作表 InventoryID 将有很多行,并且并非所有行都符合“警报”条件(条件是再订购数量应少于可用数量)。因此,如果 InventoryID 中的第 2 8 和第 10 项需要重新排序,我的警报表将在第 2、第 8 和第 10 行记录,其余为空.. @Ankur,是的,两个变量是处理这个问题的正确方法,我在我的解决方案中保留了这种方法。我刚刚删除了有关已使用范围的部分并清除了整个工作表。我认为这对你有用。【参考方案2】:

您的警报表的单元格中是否保存了任何格式? Excel 在计算和使用 UsedRange 的方式上有许多奇怪之处,而 ClearContents 只清除数据,而不是格式化等。

您是否有任何理由不能只删除警报工作表,然后每次都创建一个新工作表?这应该可以解决问题。

【讨论】:

你的意思是这样的...... Application.DisplayAlerts = False Sheets("Alerts").Delete Application.DisplayAlerts = True Worksheets。 Add.Name = "警报" 谢谢维姬!!它在这种情况下有效,但我面临的另一种类似情况是我无法删除工作表。如果我不想删除工作表该怎么办!

以上是关于不在电子表格中从头开始写入。 Excel VBA。的主要内容,如果未能解决你的问题,请参考以下文章

在EXCEL中用VBA怎样操作WORD文档中嵌入的EXCEL表格?

将图像嵌入到 Excel 电子表格 - VBA

在 VBA 中打开与 Excel 电子表格的 ADO 连接

Excel中的VBA创建带有表格和签名的电子邮件

Excel,VBA求教表格和TXT文本互转。

使用VBA破解Excel电子表格密码