Excelmacros代码正在跳过每一个第二行

下面的代码是取一个员工姓名(A列),并将该行的范围(“A:J”)input到该员工的新工作表中,如果他们没有工作表,则制作一个广告标题。 但是,它正在跳过每一行,导致正在扫描名称的行,以及正在复制的行不同(即:员工正在进入错误的工作表,只有1/2移动)任何帮助将是伟大的

Set rngEmpSales = wsSales.Range("A2", wsSales.Range("A" & Rows.Count).End(xlUp).Address) Dim wsSales As Worksheet, wsDesSales As Worksheet Set wsSales = ThisWorkbook.Sheets("Sales") Dim SalesCount as Range For Each SalesCount In rngEmpSales On Error Resume Next Set wsDesSales = ThisWorkbook.Sheets(Trim(SalesCount.Value)) On Error GoTo 0 If wsDesSales Is Nothing Then Set wsDesSales = ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) wsDesSales.Name = SalesCount.Value End If SalesCount(1 - (SalesCount.Row - 1)).Range("A1:J1").Copy wsDesSales.Range("K2") SalesCount.Range("A" & SalesCount.Row & ":J" & SalesCount.Row).Copy wsDesSales.Range("K" & Rows.Count).End(xlUp).Offset(1, 0) Set wsDesSales = Nothing End If Next SalesCount 

这是你正在尝试? (另)

 Sub Sample() Dim wsSales As Worksheet, wsDesSales As Worksheet Dim rngEmpSales As Range, SalesCount As Range Dim shName As String Dim lRow As Long, i As Long Set wsSales = ThisWorkbook.Sheets("Sales") With wsSales lRow = .Range("A" & .Rows.Count).End(xlUp).Row Set rngEmpSales = .Range("A2:A" & lRow) For i = 2 To lRow shName = Trim(.Range("A" & i).Value) On Error Resume Next Set wsDesSales = ThisWorkbook.Sheets(shName) On Error GoTo 0 If wsDesSales Is Nothing Then Set wsDesSales = ThisWorkbook.Sheets.Add(after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) wsDesSales.Name = shName End If .Range("A1:J1").Copy wsDesSales.Range("K2") .Range("A" & i & ":J" & i).Copy wsDesSales.Range("K" & _ wsDesSales.Rows.Count).End(xlUp).Offset(1, 0) Set wsDesSales = Nothing Next i End With End Sub 

你应该使用

wssales.Range("A" & SalesCount.Row & ":J" & SalesCount.Row)而不是SalesCount.Range("A" & SalesCount.Row & ":J" & SalesCount.Row)

wssales.Range("A1:J1").Copy代替SalesCount(1 - (SalesCount.Row - 1)).Range("A1:J1").Copy

原因是SalesCount本身就是一个范围,当你在其后应用另一个.Range时,它会占据相对的位置。

Range("A2").Range("A1:J1")变为Range("A2:J2")Range("B2").Range("B2:K2")变为Range("B2:K2")