插入新行中运行宏的 Excel VBA

2023-12-04

我试图让我的电子表格在插入新行时自动采用以前的行格式和公式。

我读到您可以在哪里设置工作表以在发生更改时自动运行代码,但我很难让代码正常工作。

我已尝试以下操作,每次插入新行时,它都会不断添加行,直到出现错误并且我必须强制退出:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Range("A1:D25") = ActiveCell.EntireRow.Insert Then
        Cells(1, 2).Value = 10
    End If 
End Sub

我添加了Cell Value = 10看看它是否有效。这只是一个测试,但仍然失败。

有谁知道可能的解决方案?


您的代码中有两个主要问题

  1. 您正在引发事件级联。即您的更改事件正在触发进一步的更改事件
  2. .Insert并没有像你想象的那样做。事实并非如此detect插入的行,它Inserts rows.

我假设“...插入新行...”你的意思是插入整行

该演示避免了级联.EnableEvents = False和用途Copy, pasteSpecial复制格式和公式。

Option Explicit

Dim RowsCount As Long ' Variable to track number of rows used in sheet

Private Sub Worksheet_Activate()
    RowsCount = Me.UsedRange.Rows.Count
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo EH
    ' Detect whole row changed
    If Target.Columns.Count = Me.Columns.Count Then
        ' Detect Extra Row
        If RowsCount = Me.UsedRange.Rows.Count - 1 Then
            ' Copy Formulas and Format new row
            Application.EnableEvents = False
            If Target.Row > 1 Then
                Target.Offset(-1, 0).Copy
                Target.PasteSpecial xlPasteFormulas, xlPasteSpecialOperationNone, False, False
                Target.PasteSpecial xlPasteFormats, xlPasteSpecialOperationNone, False, False
                Application.CutCopyMode = False
            End If
        End If
        RowsCount = Me.UsedRange.Rows.Count
    End If

EH:
    Application.EnableEvents = True
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

插入新行中运行宏的 Excel VBA 的相关文章

随机推荐