【发布时间】:2016-01-28 00:33:48
【问题描述】:
我有一个宏,旨在通过单击按钮将一行的内容复制到单独的工作表中,该值包含在几列之一中,该按钮包含在原始工作表中:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim longLastRow As Long
Dim Cancelled As Worksheet, Discontinued As Worksheet, NotConf24 As Worksheet, ESDout As Worksheet, NotConfShip As Worksheet, NotConfShip24 As Worksheet
Set Cancelled = Sheets("Cancelled")
Set Discontinued = Sheets("Discontinued")
Set NotConf24 = Sheets("NotConfAvail24hr")
Set ESDout = Sheets("ESDoutsideLeadtime")
Set NotConfShipLead = Sheets("NotConfButShipInLead")
Set NotConfShip24 = Sheets("NotConfShip24hrs")
longLastRow = Cells(Rows.Count, "A").End(xlUp).Row
With Range("A2", "T" & longLastRow)
.AutoFilter
.AutoFilter Field:=13, Criteria1:="Yes"
.Copy Cancelled.Range("A1")
.AutoFilter Field:=14, Criteria1:="Yes"
.Copy Discontinued.Range("A1")
.AutoFilter Field:=15, Criteria1:="No"
.Copy NotConf24.Range("A1")
.AutoFilter Field:=16, Criteria1:="Yes"
.Copy NotConfShipLead.Range("A1")
.AutoFilter Field:=18, Criteria1:="No"
.Copy NotConfShip24.Range("A1")
.AutoFilter
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
我遇到的问题是将范围内的第一行 A2 复制到每张纸上,即使它不符合条件。我几乎没有使用 VBA 的经验。我从here 获得了这个宏,并仔细阅读了大量与此类函数相关的其他文章,尝试了许多提供的解决方案,但每次都失败了。
在我上面链接的帖子中,一个用户遇到了类似的问题(它只复制了该范围内的第一行),并且有人建议这可能是由于A 列可能不包含值在内容的实际最后一行;但是,就我而言,确实如此。 A 和 T 之间的所有列都有一个值。
除此之外,这个宏非常好用!能够在不到一秒的时间内对约 10,000 行进行排序。
【问题讨论】:
-
不确定它是否与您的问题有关,但仅供参考
longLastRow = Cells(Rows.Count, "A").End(xlUp).Row正在获取您活动工作表的任何工作表的最后一行。如果您想获得一个 LastRow,我将使用工作表名称对其进行限定,或者如果您需要每张工作表具有不同的最后一行,则将其添加到循环中。 (即Cancelled.Cells(Cancelled.Rows.Count,"A").End(xlUp).Row。您的复制信息从A2开始,因为那是您告诉它的地方(With Range("A2", ...))。 -
在这种情况下,这不是问题。通过单击所有数据来自的工作表上的按钮来运行宏。但是,我绝对会在未来的努力中牢记这一点。至于复制问题,不应该直接复制
A2,除非它符合标准吗?我以A2开头的原因是因为列有标题。 -
如果我没看错,我认为问题在于您没有更改正在复制的范围。让我们说你的
longLastRow = 10。在您更改.copy之前,您的Range("A2","T10")不会改变。因此,它总是会在该范围内进行复制。我不太了解过滤器,但我会看看。你真的只需要调整复制范围...
标签: vba excel excel-2013