我有一个宏,它接收输入到文本框中的文本并将其发布到下一个空行。这模拟了一个正在运行的列表。问题是,如果文本框留空,下次用户单击发布按钮时,文本将输入到最后一个空单元格中,该单元格与其他列的行号不一致。
我如何更改代码,以便如果文本框留空,我们可以插入文本以使行号与输入的其他文本保持一致。
Private Sub Post_Click()
bFree = Range("B8:B" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row
Range("B" & bFree).Value2 = cell.value
dFree = Range("D8:D" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row
Range("D" & dFree).Value2 = Amount.value
eFree = Range("E8:E" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row
Range("E" & eFree).Value2 = Vendor.value
End Sub
在下面的图片中,您可以看到,如果在 1 月之后的帖子中没有输入日期,则下一个日期会落后一行。当前代码仅在输入文本时才会获取下一个空行,因此我认为我需要在文本框为空时插入文本以保留行号。
答案1
您正在寻找每列的下一个空白。不要这样做。只使用一列来决定下一行是什么。我建议使用 ID 列,就像您调用的那个列,No.
因为这是数据库表的工作方式。事实上,如果您使用的是 MS Access 而不是 Excel,您所做的事情就会自动发生。
由于您的No.
列目前为空白,我们被迫使用我们知道不会为空的列。我将D
在我的示例中使用它。
Private Sub Post_Click()
Dim lastRow As Long
With ActiveSheet
lastRow = .Range("D" & .Rows.CountLarge).End(xlUp).Row
.Range("B" & lastRow).Value2 = cell.value
.Range("D" & lastRow).Value2 = Amount.value
.Range("E" & lastRow).Value2 = Vendor.value
End With
End Sub