Excel VBA循环和if语句问题
我对以下代码有问题。 我希望将“U”列中值为“long”的每个单元格复制到新的工作表中。 但是我开发的代码只检索第一个结果。它在“U6”之后停止。 你能帮帮我吗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
子报告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您可以使用任何图像上载站点并发布链接。@AhmadRange.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”,然后停止循环。对不起,如果我不太清楚的话。