在Sheet1和Sheet2中,如果B列中的单元格显示为“In Progress”,则我希望将整行复制到另一个Sheet4。
我想对两个工作表的所有行重复此操作。
Sub Demo1()
Dim wb As Workbook
Dim ws As Worksheet, sh As Worksheet
Dim lastrow As Long
Dim w As Integer
Dim i As Integer
Set wb = Workbooks(Book1)
Set ws = Worksheets("Sheet4")
Set sh = ActiveSheet
For w = 1 To wb.Sheets.Count
For i = 1 To lastrow
If ActiveSheetCells(i, 2).Value = "In Progress" Then
wb.ws.Cells(1, 1).Insert
Else
If Cells(i, 2).Value = "" And i < 50 Then
ActiveCell.Offset(1, 0).Select
End If
Cells(i, 2).Value = "" And i > 49
Next i
Next w
End Sub
错误信息
第1页
第2页
第三页
1条答案
按热度按时间rqqzpn5f1#
根据我对帖子的评论,快速回顾一下你的代码(未经测试):
不要使用
Integer
,使用Long
;前者将在VBA中进行转换,因此您可以使用后者来保存处理。使用描述性的变量名,这样你就不会在10个月的时间里重新审视你的代码,或者让别人审视你的代码。在大多数情况下,人们应该能够理解发生了什么,而不需要使用过多的注解。
尽量不要有一堵变量墙,如果你可以在变量被使用时给它定维数,你就把它们配对在一起,当你把它作为
string
使用时,你可能会更快地捕捉到x as long
。您有一个
.Select
,但没有任何React。此外,作为注解包含在内,使用ActiveCell
可能不是您想要的...请使用直接单元格引用。请注意,当您循环时,VBA将更改其引用,但它不会物理更改其activecell
。您得到的似乎是另一条
If
语句,其中不包括i > 49
位的任何If / Then
。您的错误的罪魁祸首是缺少
End If
,它现在与注解Added
放在一起。