我有一个工作簿,其中包含我的理发店章节的每个成员的单独工作表,用于跟踪每个成员的广告销售情况 . 工作表1总结了每个成员工作表的数据 . 当我们获得一个新成员时,我手动复制一个主成员工作表,按字母顺序将其插入成员工作表列表中,并使用成员的名称重命名它 . 我有一个宏,将此新成员/工作表名称插入工作表1中包含成员/工作表列表的列范围,然后按字母顺序对此列表进行排序 . 这很好用 . 现在,这就是我遇到问题的地方,我想在同一个宏中插入代码(如果这是正确的方法)来复制公式和格式(如果新行在中间,则从上面的行开始)如果新工作表恰好插入到成员列表的顶部,第2列到行的末尾,则向下到新行 . 我可以手动完成所有这些,但我正在努力学习编写宏 . 我可以根据手动执行任务来记录宏,但这不会给我代码,允许在包含公式的范围内插入新列,是吗?下面是我不完整的代码(我对它的复制方式不满意); If语句是我要检查的位置,以查看新行是在成员列表的顶部还是在中间并完成复制 . 请不要嘲笑我的新手努力;-)感谢您的帮助 .
Public Sub AddWkshtNametoGrandTotals()
Dim LastRow As Long
Dim WsName As String
Dim Ws_GT As Worksheet
Dim MemberList As Range
Dim NewNameRef As Range
Set Ws_GT = Sheets("Sheet1")
Ws_GT.Range("A:A").Name = "MemberList"
'Find first empty cell at bottom of worksheet Grand Totals
LastRow = Ws_GT.Cells(Rows.Count, 1).End(xlUp).Offset(1).Row
WsName = ActiveSheet.Name 'Keep track of current worksheet
Ws_GT.Cells(LastRow, 1) = WsName 'Put current worksheet name
'into first empty cell at bottom of worksheet Grand Totals
Range("MemberList").Sort Key1:=Range("MemberList") 'Sort member name list with new name added
Set NewNameRef = Ws_GT.Range("MemberList").Find(WsName).Cells
'Check for position of new row
If NewNameRef.Row = 1 Then
Range("NewNameRef.Offset(1, 1),Cells(Columns.Count,1).End.xlRight.Column").Copy _
Destination:=Range("NewNameRef.Offset(0, 1)")
'NewNameRef.Offset(-1, 1).Copy.EntireRow
'NewNameRef.Offset(0, 1).EntireRow.PasteSpecial Paste:=xlPasteFormats
'NewNameRef.Offset(0, 1).EntireRow.PasteSpecial Paste:=xlPasteFormulas
Else
Rows(Selection.Row - 1).Copy
Rows(Selection.Row).Insert Shift:=xlDown
End If
结束子
2 回答
在排序之前可能更容易复制格式和公式:
EDIT - 看到你的工作簿后
如果在Excel> 2003中使用表(功能区/插入/表),则如果在表中最后一行的正下方添加某些内容,则会自动创建表中的新表行 . 公式也将自动应用 .