Excel 我需要将公式和格式从上一行或下一行复制到新插入的行中
我有一份工作手册,里面有一个单独的工作表,供我的理发店章节的每个成员使用,记录每个成员的广告销售情况。工作表1汇总了每个成员工作表中的数据。当我们获得一个新成员时,我手动复制一个主成员工作表,按字母顺序将其插入到成员工作表列表中,并使用该成员的名称重命名它。我有一个宏,可以将这个新成员/工作表名称插入工作表1中的列范围,该列范围包含一个成员/工作表列表,然后按字母顺序对该列表进行排序。这很有效。现在,这就是我遇到问题的地方,如果这是正确的方法,我想在这个宏中插入代码,从上行复制公式和格式,如果新行在列表中,或者从下行复制,如果新工作表恰好插入到成员列表的顶部,第2列通过行的末尾,向下进入新行。我可以手动完成所有这些,但我正在努力学习编写宏。我可以在手动执行任务的基础上录制宏,但这不会给我允许在包含公式的范围内插入新列的代码,是吗?下面是我不完整的代码,我不满意它是如何复制的;IF语句是我要检查的地方,看看新行是否在成员列表的顶部或中间,并完成复制。请不要嘲笑我的新手努力;-谢谢你的帮助Excel 我需要将公式和格式从上一行或下一行复制到新插入的行中,excel,vba,Excel,Vba,我有一份工作手册,里面有一个单独的工作表,供我的理发店章节的每个成员使用,记录每个成员的广告销售情况。工作表1汇总了每个成员工作表中的数据。当我们获得一个新成员时,我手动复制一个主成员工作表,按字母顺序将其插入到成员工作表列表中,并使用该成员的名称重命名它。我有一个宏,可以将这个新成员/工作表名称插入工作表1中的列范围,该列范围包含一个成员/工作表列表,然后按字母顺序对该列表进行排序。这很有效。现在,这就是我遇到问题的地方,如果这是正确的方法,我想在这个宏中插入代码,从上行复制公式和格式,如果新
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-只是看看你是否能够下载电子表格。一点也不知道。在哪里可以找到指向该文件的链接?