【问题标题】:How to add a blank row in excel VBA?如何在excel VBA中添加一个空白行?
【发布时间】:2020-01-07 22:06:24
【问题描述】:

我是 VBA 新手,正在尝试编写 VBA 代码,如果最后一行为空,则可以添加新行。但是,当我使用此代码时,发生的情况是它在没有意义的位置添加了行。我的最后一行是第 15 行。当我尝试运行第 15 行的代码时,它会在第 15 行之后添加一行,无论它是否为空,当我运行第 14 行的代码时,它会在第 4 行之后添加一行,无论它是是否为空。当我运行第 13 行的代码时,无论它是否为空,它都不会做任何事情。

'
' Add_A_Row Macro
' Adding a row to a row that is not blank
'
' Keyboard Shortcut: Ctrl+Shift+A
'
  Dim sh As Worksheet
  Dim rw As Range
  Dim RowCount As Integer

  RowCount = 0

  Set sh = ActiveSheet
  For Each rw In sh.Rows

    If sh.Cells(rw.Row, 15).Value <> "" Then
        rw.Insert Shift:=xlShiftDown, CopyOrigin:=xlInsertFormatOriginConstant
    Debug.Print ("Hit")
    Exit For
    End If

Next rw

End Sub

【问题讨论】:

  • 数字 15 指的是列。你必须在哪一列检查单元格是否为空?
  • 我对这个推理有点困惑,最后一行下面还有更多数据吗?为什么要在已有空白行的地方添加空白行?
  • 哦,我以为15指的是行号,我想检查第15行是否有数据,然后添加一个空白行。在我的 Excel 表中,每一列代表一个不同的部门,从第 3-15 行开始,每个部门都可以写下他们的停机时间。从第 15 行开始,有多个公式可以计算他们输入的数据。第 15 行是供人们输入信息的可编辑区域的最后一行。当最后一行中至少有一个条目时,我希望创建一个新行,以便他们可以继续记录停机时间,而不是手动添加一行。

标签: excel vba row insertion


【解决方案1】:

您可能在您的情况下交换了行和列。我还建议使用 for 循环而不是 foreach 循环 - 使用 for 循环,您可以更好地控制正在执行的操作和顺序。

解决您的问题的一般方法是:

Sub AddRowsIfNotEmptyCell(wks As Worksheet, columnToCheck As Long)

    Dim i As Long

    'loop backwards in order not to analyze rows we just added
    For i = wks.UsedRange.Rows.Count To 1 Step -1
        If wks.Cells(i, columnToCheck).Value <> vbNullString Then
            'insert a row below
            wks.Rows(i + 1).Insert Shift:=xlShiftDown
        End If
    Next i

End Sub

【讨论】:

  • 由于某种原因,当我尝试运行此代码时,没有任何反应。我正在将其复制并粘贴到终端中。我应该做些额外的事情吗?
  • @SamuelDillper 是的。此代码需要参数(因此对于任何工作表和任何列都很灵活)。您只能运行不带参数的 subs。所以创建一个新的 Sub() 并在其中运行 AddRowsIfNotEmptyCell(ActiveSheet,1) - 这将检查活动表中的第 1 列。
猜你喜欢
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 2022-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多