我有一张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
答案 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
另一种实现此目的的方法是:在ThisWorkbook
或Sheet("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