插入了在新行中运行宏的 Excel VBA

Ban*_*erM 5 excel vba

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

chr*_*sen 5

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

  1. 您正在导致事件级联。即您的 Change 事件正在触发进一步的 change 事件
  2. .Insert不会做你认为它会做的事情。它不检测插入的行,它插入行。

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

这个演示避免了级联.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
Run Code Online (Sandbox Code Playgroud)


lau*_*dly 0

您似乎附加了错误的事件。您已将代码附加到“Worksheet_Change”事件,但您的代码也导致工作表发生更改

Cells(1, 2).Value = 10
Run Code Online (Sandbox Code Playgroud)

它右转并调用“Worksheet_Change”事件。

至于要附加的正确事件,似乎没有“插入新行”的本机事件。

本页对此进行了讨论,这可能是您问题的答案......