Excel VBA循环和if语句问题

Excel VBA循环和if语句问题,excel,vba,Excel,Vba,我对以下代码有问题。 我希望将“U”列中值为“long”的每个单元格复制到新的工作表中。 但是我开发的代码只检索第一个结果。它在“U6”之后停止。 你能帮帮我吗 子报告crea() 工作表(“TLM”)。选择 ActiveSheet.Range(“U3”)。选择 做 如果ActiveCell.Value=“long”,则 ActiveCell.EntireRow.Select 选择,复制 工作表(“报告”)。选择 范围(“A”&行数)。结束(xlUp)。偏移量(1)。选择 活动表。粘贴 Appl

我对以下代码有问题。 我希望将“U”列中值为“long”的每个单元格复制到新的工作表中。 但是我开发的代码只检索第一个结果。它在“U6”之后停止。 你能帮帮我吗

子报告crea()
工作表(“TLM”)。选择
ActiveSheet.Range(“U3”)。选择
做
如果ActiveCell.Value=“long”,则
ActiveCell.EntireRow.Select
选择,复制
工作表(“报告”)。选择
范围(“A”&行数)。结束(xlUp)。偏移量(1)。选择
活动表。粘贴
Application.CutCopyMode=False
其他的
ActiveCell.Offset(1,0)。选择
如果结束
循环直到IsEmpty(ActiveCell.Offset(1,0))
末端接头()

我在这行代码中发现了一个bug:

Range("A" & Rows.Count).End(xlUp).Offset(1).Select
Offset
接受两个参数,因此它应该是这样的:

Range("A" & Rows.Count).End(xlUp).Offset(1,0).Select
此外,粘贴剪贴板中的内容后,应立即取消剪切复制模式:

ActiveSheet.Paste                 'Paste is done here
Application.CutCopyMode = False   'This is a good practice

看看这是否有帮助。此外,
TLM
工作表的屏幕截图将帮助我们更准确地分析问题。

首先,
结束子部分不应带有括号。当我把它复制到一个模块中时,它立即突出显示了一个错误

您的循环正在使用
ActiveCell.Offset(1,0)。请选择
两次:

   If ActiveCell.Value = "long" Then
       ActiveCell.EntireRow.Select
       Selection.Copy
       ActiveCell.Offset(1, 0).Select 'first Offset
       Sheets("report").Select
       Range("A" & Rows.Count).End(xlUp).Offset(1).Select
       ActiveSheet.Paste
       Application.CutCopyMode = False
       Sheets("TLM").Select
       ActiveCell.Offset(1, 0).Select 'second Offset
  Else
因此,在找到每个
“long”
之后,您只需查看第二行


我在10个连续的“长”单元格上测试了你的代码,在
报告中得到了5个。我无法复制您的
U6
stop。

如果您手动完成此任务,您是否会使用Excel内置的
Autofilter
功能一次抓取所有“长”匹配行并将它们全部复制到“报告”中
工作表
?你好,丹-是的,我的想法是在第一个循环中添加第二个循环,以便随后执行另一个任务。你好,艾哈迈德,谢谢你的帮助,但我的问题仍然存在。我认为这个问题可能与“ActiveSheet.Range”(“U3”)有关。选择“code”,因为我只有“U”列的第一个结果。由于我是这个论坛的新手,我无法发布“TLM”表单的screeshot。抱歉。@user3929329您可以使用任何图像上载站点并发布链接。@Ahmad
Range.Offset
有两个可选参数:RowOffset和columnCoffset。所以
Range(“A”&Rows.Count).End(xlUp).Offset(1).Select
在语法上是正确的。@MarkFitzgerald感谢您提供的信息。嗨,Mark,我正在复制包含“long”的每一行。“U6”是出现“long”的第一行。我插入了sevral“offset”函数以尝试转到下一个“long”行。使用的逻辑将在
“long”
单元格下方的第一个空单元格处停止。我的文件是100行“long”或“short”,中间没有任何空单元格。但下面的代码仅检索第一行中的“long”,然后停止循环。对不起,如果我不太清楚的话。