Excel 我需要将公式和格式从上一行或下一行复制到新插入的行中

Excel 我需要将公式和格式从上一行或下一行复制到新插入的行中,excel,vba,Excel,Vba,我有一份工作手册,里面有一个单独的工作表,供我的理发店章节的每个成员使用,记录每个成员的广告销售情况。工作表1汇总了每个成员工作表中的数据。当我们获得一个新成员时,我手动复制一个主成员工作表,按字母顺序将其插入到成员工作表列表中,并使用该成员的名称重命名它。我有一个宏,可以将这个新成员/工作表名称插入工作表1中的列范围,该列范围包含一个成员/工作表列表,然后按字母顺序对该列表进行排序。这很有效。现在,这就是我遇到问题的地方,如果这是正确的方法,我想在这个宏中插入代码,从上行复制公式和格式,如果新

我有一份工作手册,里面有一个单独的工作表,供我的理发店章节的每个成员使用,记录每个成员的广告销售情况。工作表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

在排序之前,复制格式和公式可能更容易:

编辑-查看工作簿后

Public Sub AddWkshtNametoSheet1()

    Dim LastRow As Long
    Dim WsName As String
    Dim WsGT As Worksheet
    Dim MemberList As Range

    Set WsGT = ThisWorkbook.Sheets("Grand Totals")

    WsName = ActiveSheet.Name 'Keep track of current worksheet

    'Find first empty cell at bottom of Column 1, Sheet1

    With WsGT
        LastRow = .Cells(Rows.Count, 1).End(xlUp).Offset(1).Row
        WsGT.Range("A8:A" & LastRow).Name = "MemberList"
        .Rows(LastRow - 1).Copy
        .Cells(LastRow, 1).PasteSpecial Paste:=xlPasteFormats
        .Cells(LastRow, 1).PasteSpecial Paste:=xlPasteFormulas
        .Cells(LastRow, 1) = WsName
    End With

    Range("MemberList").Sort Key1:=Range("MemberList")

End Sub

如果在Excel>2003中使用表格功能区/Insert/table,则如果在表格中最后一行的正下方的行中添加内容,则会自动在表格中创建新的表格行。这些公式也将自动应用

Sub M_snb()
  With ListObjects(1).Range
    .Cells(.Rows.Count, 1).Offset(1).Value = "new"
    .Columns(1).Sort .Cells(1), , , , , , , xlYes
  End With
End Sub

始终有助于显示现有代码或至少显示相关部分Hanks,Tim,但当我将此代码作为单独的模块插入工作簿时,行集Ws_GT=SheetsSheet1会给我一个运行时错误9,下标超出范围错误。我是否将其插入错误的位置?该错误表示没有具有该名称的工作表-请检查您的工作簿。有一个工作表,Sheet1。这是一张工作表,其中汇总了成员工作表中的所有数据。然后尝试使用工作簿引用对其进行限定:例如ThisWorkbook.SheetsSheet1在任何情况下,这都是一件好事。我添加了ThisWorkbook限定符,但仍然出现相同的错误。当我点击Debug时,Set WsGT=ThisWorkbook.SheetsSheet1以黄色突出显示;这是错误的根源,对吗?我删除了变量中的下划线,认为这可能是错误的根源。我不知道如何解决这个问题>Tim-只是看看你是否能够下载电子表格。一点也不知道。在哪里可以找到指向该文件的链接?