我在excel文件上有一个工作表(COLLABT),显示来自其他3个工作表(COLLAB1,COLLAB2和COLLAB3)的一些信息。我的问题是我有重复的结果。 有谁知道如何解决这个问题?
这是我宏的代码
Sub COLLABT()
With Sheets("COLLABT")
.Range("A2:O65536").Delete
For Each sh In Sheets
Select Case sh.Name
Case "COLLAB1", "COLLAB2", "COLLAB3"
For lg = 2 To sh.Range("A65536").End(xlUp).Row
LgS = .UsedRange.Rows.Count + 1
.Cells(LgS, 1) = sh.Cells(lg, 1)
.Cells(LgS, 2) = sh.Cells(lg, 2)
.Cells(LgS, 3) = sh.Cells(lg, 3)
.Cells(LgS, 4) = sh.Cells(lg, 4)
.Cells(LgS, 5) = sh.Cells(lg, 5)
.Cells(LgS, 6) = sh.Cells(lg, 6)
.Cells(LgS, 7) = sh.Cells(lg, 7)
.Cells(LgS, 8) = sh.Cells(lg, 8)
.Cells(LgS, 9) = sh.Cells(lg, 9)
.Cells(LgS, 10) = sh.Cells(lg, 10)
.Cells(LgS, 11) = sh.Cells(lg, 11)
.Cells(LgS, 12) = sh.Cells(lg, 12)
.Cells(LgS, 13) = sh.Cells(lg, 13)
.Cells(LgS, 14) = sh.Cells(lg, 14)
.Cells(LgS, 15) = sh.Cells(lg, 15)
Next
End Select
Next
End With
End Sub
这是当前结果
这应该是什么
[ 2
答案 0 :(得分:0)
这段代码中有一些我本能地不喜欢的东西。如,
.End(xlUp).Row
作为For ... Next
声明中的最后一个数字。如果在我对工作表进行更改的每个循环中重新计算,我会不相信这个数字。.UsedRange.Rows.Count + 1
来引入不稳定性。我喜欢在循环开始之前控制我的数字,然后在循环时控制它们。以下代码可以做到这一点。
Sub COLLABT()
Dim ShNames() As String
Dim i As Integer
Dim Rng As Range
Dim Sh As Worksheet
Dim Rsl As Long ' Last row: Source
Dim Rs As Long, Rt ' Row: Source / Target
ShNames = Split("COLLAB1,COLLAB2,COLLAB3", ",")
With Worksheets("COLLABT")
Set Rng = .Range(.Rows(2), .Rows(.UsedRange.Row + .UsedRange.Rows.Count))
Rng.ClearContents
For i = 0 To UBound(ShNames)
Set Sh = Worksheets(ShNames(i))
Rt = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Rsl = Sh.Cells(Sh.Rows.Count, 1).End(xlUp).Row
For Rs = 2 To Rsl
Set Rng = Sh.Range(Sh.Cells(Rs, 1), Sh.Cells(Rs, 15))
Rng.Copy Destination:=.Cells(Rt, 1)
Rt = Rt + 1
Next Rs
Next i
End With
End Sub
我并不是说上述任何因素都必须受到责备,但他们可能会这样做,而且如果我的代码产生的结果与我的观点相同,那么就不会产生相同的结果。
坦率地说,当被问及问题的真正根源是什么时,我会首先看一下程序的调用。在后台的某个地方是否有一个事件过程可以对代码所做的任何事情作出反应并有效地调用它两次?或者,更简单的是,这是一个只能在测试期间发生的错误,例如数据实际上是在其中一个源表中复制的?这就是我先检查的内容,但由于我无法访问事实,我编写了代码。请试一试。