我试图得到一个宏的工作,其中添加一个新的行到一个表,从另一个工作表插入值。
到目前为止,我已经设法让宏插入第一行,但是随后的行然后覆盖前一行。目前,我已经把'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