【发布时间】:2018-04-25 04:29:30
【问题描述】:
我编写了一个代码来循环遍历单元格范围并复制列中的某些数据。但每次我运行代码时,它只会复制最后一条记录,而不是全部。问题出在目标代码行中的某个地方,它找不到最后一个未使用的单元格。任何帮助将不胜感激。非常感谢。
Sub ImmoScout()
Dim MyRange As Range, Mycell As Range, Mycell2 As String
Set MyRange = Application.Selection
'Application.ScreenUpdating = False
For Each Mycell In MyRange
Mycell2 = Mycell.Value
Worksheets("Sheet1").Activate
Worksheets("Sheet1").AutoFilterMode = False
Range("A1:BB34470").AutoFilter Field:=54, Criteria1:=Mycell2
Range("AM1").Select
Range(Selection, Selection.End(xlDown)).Select
If Selection.Cells.Count < 1048576 Then
Selection.Copy Destination:=Range("BP1048576").End(xlUp).Offset(1, 0)
Range("AU1").Activate
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy Destination:=Range("BQ1048576").End(xlUp).Offset(1, 0)
End If
Next Mycell
' Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
尝试通过代码Step来定位问题。见this link
-
嗨 Ashleedawg,代码运行没有任何错误。我尝试使用本地窗口,但它没有帮助为什么它找不到 col BP 和 BQ 中的最后一个单元格。
-
逐步遍历代码并检查变量的值,以及在每个步骤中选择的范围应该有助于确定准确的位置问题是。这也是我会做的帮助 - 除了我不知道哪些单元格有数据而哪些没有,所以我不知道像
End这样的函数在你的情况下正在做什么。要找出的一个例子是,这条线实际上选择是什么?Range(Selection, Selection.End(xlDown)).Select我不是说这是问题所在,这只是一个谎言来检查“所有”他们 -
所以 Range(Selection, Selection.End(xlDown)).Select 正在根据我的自动过滤条件选择过滤的单元格。我检查了一下,它正在选择正确的东西。现在我想将此选择粘贴到 BP 列的第一个可用空白单元格中。所以我使用代码 Selection.Copy Destination:=Range("BP1048576").End(xlUp).Offset(1, 0) 将选择粘贴到底部的第一个空单元格中。但它只记得最后过滤的选择。
-
正如我所说,这只是(随机选择的)示例。 - 无论如何,如果它只是复制过滤的单元格,而您希望它复制所有单元格,那么合乎逻辑的解决方案是...关闭过滤器?