查找列中的下一个空白单元格并写入其中

时间:2016-06-16 09:42:40

标签: excel vba excel-vba

我正在寻找工作日志的代码。共有3列:日期,公司和订购的产品。

我想创建一个带有每列输入框的表单,您可以在其中键入相应的信息。我无法找到下一个空单元格,然后使用输入框设置其值。它看起来就像附上的照片。

Example of what i want to achieve

3 个答案:

答案 0 :(得分:1)

你基本上想要这样的东西:

Public Function startRow() As Integer
   startRow = 2
End Function

startRow是我在每个数据表中都有一个函数来忽略标题,有时也是UI元素,并使用空表格。

Private Function LastRow() As Integer
    Dim rangeObj As Range
    Set rangeObj = Tabelle3.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
If rangeObj Is Nothing Then
    LastRow = startRow
ElseIf rangeObj.Row < startRow Then
    LastRow = startRow
Else
    LastRow = rangeObj.Row
End If
End Function

此函数返回上次使用的行的编号,在知道此行之后,可以在其下面插入数据。 If-Elseif-Else适用于仅包含columntitle的空床单和床单

答案 1 :(得分:0)

该代码有效,但每次重新运行代码时,它都会覆盖我在上一次输入的值,即每次将值写入第2行,而不是下降到下一行并在那里写入

答案 2 :(得分:0)

试试这个:

Enum columnNumbers
    colDate = 1
    colCompany
    colProduct
End Enum

Private Sub CommandButton1_Click()
    Dim nextRow As Integer
    Dim ws As Worksheet

    Set ws = ActiveSheet
    nextRow = ws.Cells(ws.Rows.Count, colDate).End(xlUp).Row + 1

    ws.Cells(nextRow, colDate) = InputBox("Enter date value", "Date", Date)
    ws.Cells(nextRow, colCompany) = InputBox("Enter company name", "Company")
    ws.Cells(nextRow, colProduct) = InputBox("Enter product details", "Product")
End Sub

假设您的三列是连续的,请将列号分配给第一个枚举值(例如,如果日期列为E,则设置colDate = 5),随后的枚举变量将自动递增1(因此colCompany = colDate + 1等。)

然后使用输入框捕获值。