使用宏将新行添加到从其他工作表中提取值的表中



我试图得到一个宏的工作,其中添加一个新的行到一个表,从另一个工作表插入值。

到目前为止,我已经设法让宏插入第一行,但是随后的行然后覆盖前一行。目前,我已经把'Line'变量,其中产生一些不同的行为,其中第一行插入3次,然后随后的行被插入几行。

提取如下:

Sub UpdateItemIndex(ItemName As String)
Dim ItemIndexSheet As Worksheet
Dim ItemIndexTable As ListObject
Dim NewEntryRow As ListRow
Dim NewEntryRowIndex As Integer
Dim RangeName As String

Set ItemIndexSheet = Sheets("Item Index")
ItemIndexSheet.Select


Set ItemIndexTable = ItemIndexSheet.ListObjects(1)
'Remove any filters
ItemIndexTable.AutoFilter.ShowAllData

Set NewEntryRow = ItemIndexTable.ListRows.Add

NewEntryRowIndex = NewEntryRow.Index

'Line = Range("NextItemIndex").Value
Line = Worksheets("Resources").Cells(2, 5)

NewEntryRow.Range(Line, "A").Value = ItemName

RangeName = ItemName & "!" & "ItemTitle"
NewEntryRow.Range(Line, "B").Formula = "=" & ItemName & "!" & Range(RangeName).Address

RangeName = ItemName & "!" & "ItemStatus"
NewEntryRow.Range(Line, "C").Formula = "=" & ItemName & "!" & Range(RangeName).Address

End Sub

在'Line'变量之前,新的行输入命令是:

NewEntryRow.Range(1, "B").Formula = "=" & ItemName & "!" & Range(RangeName).Address

这是一个更大的宏的一部分,其中单击按钮会生成一个新的工作表,并使用新的值更新一个表。

我是新的VBA,所以会感谢任何指示,什么问题是!

既然已经有了代表新行的NewEntryRow,那么肯定不需要它的索引。NewEntryRow只有一行!

这个应该可以工作:

With NewEntryRow
.Range(1, "A") = ItemName
.Range(1, "B") = "=" & ItemName & "!ItemTitle"
.Range(1, "C") = "=" & ItemName & "!ItemStatus"
End With

正如你的名字"您可以通过名称引用Title和Status单元格。你不需要地址。

——update——您需要添加以下行来关闭自动公式更新:

Application.AutoCorrect.AutoFillFormulasInLists = False
With NewEntryRow
.Range(1, "A") = ItemName 
.Range(1, "B") = "=" & ItemName & "!ItemTitle"
.Range(1, "C") = "=" & ItemName & "!ItemStatus"
End With
Application.AutoCorrect.AutoFillFormulasInLists = True

这将导致大量红色符号-因为Excel期望公式在表

中保持一致如果你能接受INDIRECT公式,你会避免这个:

With NewEntryRow
.Range(1, "A") = ItemName 
.Range(1, "B") = "=INDIRECT([@" & ItemIndexTable.ListColumns(1).Name & "] & ""!ItemTitle"")"
.Range(1, "C") = "=INDIRECT([@" & ItemIndexTable.ListColumns(1).Name & "] & ""!ItemStatus"")"
End With

最新更新