VBA Excel – 在上面的单元格input值后,自动运行macros以插入新的空白行

我试图让一个macros自动运行到:

  1. 在上面的数据validation行(在列A中)中input一个值时,在每个部分中插入一个空行,例如Architectural。 我在工作表中input代码作为一个子,当我单击Excel中的开发人员选项卡中的运行,它插入一行,但我希望它自动运行(工作簿打开后),每次input到列一个。

Excel的打印画面

Sub BlankLine() 'Updateby20150203 Dim Rng As Range Dim WorkRng As Range xTitleId = "KutoolsforExcel" Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) Set WorkRng = WorkRng.Columns(1) xLastRow = WorkRng.Rows.count Application.ScreenUpdating = False For xRowIndex = xLastRow To 1 Step -1 Set Rng = Range("B" & xRowIndex) If Rng.Value = "" = False Then Rng.Offset(1, 0).EntireRow.Insert Shift:=xlDown End If Next Application.ScreenUpdating = True End Sub 

我想我可以帮你解决第一个问题。

您可以使用Sub Worksheet_Change(ByVal Target As Range)Sub Worksheet_Change(ByVal Target As Range) Sub来更改单元格时自动启动macros。

以下是说明: https : //support.microsoft.com/en-us/help/213612/how-to-run-a-macro-when-certain-cells-change-in-excel

您可以使用以下代码插入新行:

 Application.Selection.EntireRow.Insert shift:=xlDown 

当你这样做的时候,你会遇到新行会再次触发事件来启动macros,因此再次插入一个新行。 这导致无限循环。 要阻止这种情况的发生,我们需要在变更时禁用事件。

 Application.EnableEvents = False Call new_line_below_selection_macro Application.EnableEvents = True 

这里有一个类似问题的问题: 如何在VBA中结束无限的“更改”循环

我希望这有帮助。

这里是应该进入工作表的代码:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range("A1:C10") 'Area this should apply If Not Application.Intersect(KeyCells, Range(Target.Address)) _ Is Nothing Then Application.EnableEvents = False 'either you put your code here 'Application.Selection.EntireRow.Insert shift:=xlDown 'or you call it from a module Call Module1.BlankLine Application.EnableEvents = True End If End Sub