如何在多张纸的同一位置插入行?

时间:2019-06-18 17:06:12

标签: excel vba

我有一张excel表,在一个主选项卡上,有公司名称列表,然后由34张表引用,这些表涵盖了有关公司的各种详细信息。在34个特定的工作表数据中输入数据,然后将其拉回到主选项卡。

参考流程图:

主控(名称)-> 34个子表 子表(信息)->母版

通过我的布局方式,我很难找到一种将公司现在添加到主列表的方法,因为子表上引用的单元格不会自动向下移动。这会导致事物被错误引用。

我感兴趣但不知道该怎么做的解决方案是在VBA中创建一个始终运行的宏,该宏将在所有子工作表中添加/删除新行,其位置与添加到该子表的位置完全相同主表。

例如,如果在主表上的第50行和第51行之间添加了新行,那么在所有子表上也将添加新行。

我完全不知道该怎么做,因此我们将不胜感激。谢谢,祝你有美好的一天!

我什至不知道从哪里开始,我对此表示歉意。

编辑:此后,我想出了一个解决此问题的方法。如果稍后有人遇到同样的问题,该信息将发布在下面。

Option Explicit

Public Sub Worksheet_Change(ByVal Target As Range)

    Dim ws
    Dim trgtRow
    Dim NewRowCount As Long
    Dim OldRowCount As Long

    trgtRow = Target.Row

    OldRowCount = Sheet3.UsedRange.Rows.Count
    NewRowCount = Sheet2.UsedRange.Rows.Count

    If Not Application.Intersect(Range("A2:A100"), Target) Is Nothing Then
        For Each ws In ThisWorkbook.Worksheets
            ElseIf ws.Name <> Sheet2.Name Then
                If OldRowCount < NewRowCount Then
                    ws.Rows(trgtRow).Insert Shift:=xlDown
                ElseIf OldRowCount > NewRowCount Then
                    ws.Rows(trgtRow).Delete Shift:=xlUp
                End If
            End If
        Next ws
    End If

End Sub

1 个答案:

答案 0 :(得分:0)

此代码只是一个起点:在Master工作表中插入一行时,它将在每个工作表中的同一位置插入一行。将代码放在工作表对象中。

反面,您可以对目标范围内的某个单元格进行任何更改,它将插入新行。

Public Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet, trgtRow As Long
trgtRow = Target.Row

    If Not Application.Intersect(Range("A2:A100"), Target) Is Nothing Then
        For Each ws In ThisWorkbook.Worksheets
            If ws.Name <> "Master" Then ws.Rows(trgtRow).Insert Shift:=xlDown
        Next ws
    End If

End Sub 

另一种实现此目的的方法是:在ThisWorkbookSheet("Master")的vba窗口中插入下面的宏,然后在Master工作表上添加一个按钮,右键单击该按钮,并将宏分配给该按钮。当您将光标放置在单元格上并选择按钮时,宏将在每个工作表中插入一个新行。

Sub InsertRowsInAllWS()
Dim ws As Worksheet, trgtRow As Long
trgtRow = ActiveCell.Row

    For Each ws In ThisWorkbook.Worksheets
        ws.Rows(trgtRow).Insert Shift:=xlDown
    Next ws

End Sub