如何在保存为xlsm的锁定Excel工作表中自动插入格式化样式行或列?

如何在保存为xlsm的锁定Excel工作表中自动插入格式化样式行或列?,excel,vba,Excel,Vba,使用vba插入行或列通常很容易。但是,根据用户输入在锁定的单元格中自动执行此操作并不容易。我的问题是 如何在保存为xlsm的锁定Excel工作表中自动插入格式化样式行或列? 解释: 我有一张纸叫“Sheet1”,是用密码“ABCD”锁定的,用户只能在彩色区域输入数据。然而,有时清单很短,而另一些清单很长。自动插入行和列是一个好主意,就像VisualStudio中的数据网格一样 请参见图片,如果用户在彩色区域的第9行中输入任何内容,则会自动创建格式化样式第10行(用于组件列表1)。若用户输入任何内

使用vba插入行或列通常很容易。但是,根据用户输入在锁定的单元格中自动执行此操作并不容易。我的问题是 如何在保存为xlsm的锁定Excel工作表中自动插入格式化样式行或列?

解释:

我有一张纸叫“Sheet1”,是用密码“ABCD”锁定的,用户只能在彩色区域输入数据。然而,有时清单很短,而另一些清单很长。自动插入行和列是一个好主意,就像VisualStudio中的数据网格一样

请参见图片,如果用户在彩色区域的第9行中输入任何内容,则会自动创建格式化样式第10行(用于组件列表1)。若用户输入任何内容以清空第14行,则会在组件列表2中插入第15行

同样,若用户在H列中输入任何内容,那个么我将创建I列

我不知道如何编写语法,但以下是我对设计的想法:

我必须为组件列表1(Com1)、组件列表2(Com2)和蓝色区域(Part_quality)中的区域定义一个名称,以便程序知道应该检查用户输入的区域

检查用户输入的数据是否在定义的名称范围内。如果是,请检查用户是否在最后一行和最后一列中输入了任何数据。如果是,使用存储在内存中的预定密码解锁文件,插入行/列,然后锁定它

这就是你想要的吗

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim MRange As Range, rng As Range

    On Error GoTo Whoa

    Set MRange = Range("InputRange")

    '~~> Get the last Row of the range
    Set rng = MRange.Range(MRange.Cells(MRange.Rows.Count, 1), _
    MRange.Cells(MRange.Rows.Count, MRange.Columns.Count))

    '~~> Trap changes in the last row of the range
    If Not Intersect(Target, rng) Is Nothing Then
        'If Application.WorksheetFunction.CountA(rng) > 0 Then
            'Application.EnableEvents = False

            'rng.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        'End If
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
代码由Siddharth Rout创建

这就是你想要的吗

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim MRange As Range, rng As Range

    On Error GoTo Whoa

    Set MRange = Range("InputRange")

    '~~> Get the last Row of the range
    Set rng = MRange.Range(MRange.Cells(MRange.Rows.Count, 1), _
    MRange.Cells(MRange.Rows.Count, MRange.Columns.Count))

    '~~> Trap changes in the last row of the range
    If Not Intersect(Target, rng) Is Nothing Then
        'If Application.WorksheetFunction.CountA(rng) > 0 Then
            'Application.EnableEvents = False

            'rng.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        'End If
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

代码是由Siddharth Rout创建的

我不知道如何编写语法
那么这是你的幸运日,因为你会尝试学习语法,然后发回测试的代码,以便我们可以帮助你;)您需要处理的事件称为
工作表\u Change
事件。在这种情况下,您将看到哪个单元格正在被编辑,然后采取相应的行动:)您可以使用names方法,甚至更好,您可以检查
单元格颜色,然后采取适当的行动:)我建议您进行搜索,因此,您将找到大量有关如何使用
工作表\u Change
事件的示例。谢谢。我将在一开始就被卡住的这一周里试一试。请提供一个提示,说明如何检查定义名称中的单元格是否正在编辑,以及如何跟踪此单元格是否位于定义名称的最后一行?更新:我了解了如何确定定义范围中的数据是否已更改,以及范围中的最后一行是什么。我需要关于如何确定编辑是否发生在定义的名称范围的最后一行的帮助?
我不知道如何编写语法
那么这是你的幸运日,因为你将尝试学习语法,然后发回你测试的代码,以便我们可以帮助你;)您需要处理的事件称为
工作表\u Change
事件。在这种情况下,您将看到哪个单元格正在被编辑,然后采取相应的行动:)您可以使用names方法,甚至更好,您可以检查
单元格颜色,然后采取适当的行动:)我建议您进行搜索,因此,您将找到大量有关如何使用
工作表\u Change
事件的示例。谢谢。我将在一开始就被卡住的这一周里试一试。请提供一个提示,说明如何检查定义名称中的单元格是否正在编辑,以及如何跟踪此单元格是否位于定义名称的最后一行?更新:我了解了如何确定定义范围中的数据是否已更改,以及范围中的最后一行是什么。我需要关于如何确定编辑是否发生在定义的名称范围的最后一行的帮助?