我有一个用于衡量成本的电子表格。所有数据都存储在一个表中。我想从表中添加或删除行。
A,B和C列的数据验证列表存储在另一个选项卡上。 D和E列是单位数和工人数。 F,G和H是总行。 F是不含税的单位成本。都在表中,但是单元格M中有一个公式供单元格F中的公式引用。
表中的第一行是第7行,单元格M公式是
=IF(OR(ISBLANK(A7),ISBLANK(B7),ISBLANK(C7)),0,VLOOKUP(CONCATENATE(A7," ",B7," ",C7),Service_Price_List,2,FALSE))
我无法编码,但是找到了一些添加和删除行的代码。
表格中的公式已填满,因此它将公式更新为F,G和H列中的正确动态公式。当我添加一行但执行后第一次添加一行时,表格中的单元格会正确更新另一个操作是,添加了M列中的单元格,但引用错误。
您可能位于第8、12或13行等(任意行),但是它将把此公式放在单元格中
=IF(OR(ISBLANK(A7),ISBLANK(B7),ISBLANK(C7)),0,VLOOKUP(CONCATENATE(A7," ",B7," ",C7),Service_Price_List,2,FALSE))
是列表中第一个单元格的公式。如果随后我尝试添加另一行(单击添加行按钮两次),则该单元格将为空白。
随着插入和删除按钮的工作,我想我需要一种从M7复制公式的方法,该方法将是列表的顶部。还是最好通过VBA动态插入公式?
这是我的按钮添加一行的代码:
Private Sub CommandButton3_Click()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim tbl As ListObject
Set tbl = ws.ListObjects("table3")
'add a row at the end of the table
tbl.ListRows.Add
End Sub
这是我的按钮删除行的代码:
Private Sub CommandButton4_Click()
Dim oLst As ListObject
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:=""
If ActiveSheet.ListObjects.Count > 1 Then
For Each oLst In ActiveSheet.ListObjects
With oLst
If .Name = "Table3" Then
If oLst.ListRows.Count > 1 Then
number_of_columns = .ListColumns.Count
oLst.ListRows(oLst.ListRows.Count).Delete
End If
End If
End With
Next
'ActiveSheet.Protect Password:=""
End If
End Sub