Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA循环不会基于Activecell值停止_Vba_Excel - Fatal编程技术网

Excel VBA循环不会基于Activecell值停止

Excel VBA循环不会基于Activecell值停止,vba,excel,Vba,Excel,当activecell的值为“BBSE”时,我有一个循环需要停止,但它通过该单元格并继续循环。有人能帮我吗? 我在一个工作簿中从表中剪切行,然后粘贴到另一个工作簿中。在F列的列表之前,我有许多空白单元格,因此我使用xldown。 以下是相关代码: 'Illuminators Worksheet OP_wb.Activate Range("F2").End(xlDown).Select Do Until ActiveCell.Value = "BBSE" OP_wb.Activate

当activecell的值为“BBSE”时,我有一个循环需要停止,但它通过该单元格并继续循环。有人能帮我吗? 我在一个工作簿中从表中剪切行,然后粘贴到另一个工作簿中。在F列的列表之前,我有许多空白单元格,因此我使用xldown。 以下是相关代码:

'Illuminators Worksheet
OP_wb.Activate
Range("F2").End(xlDown).Select


Do Until ActiveCell.Value = "BBSE"
    OP_wb.Activate
    Worksheets("Optic Main").Activate
    Range("F2").End(xlDown).Select
    Selection.EntireRow.Cut
    Demand_WB.Activate
    Worksheets("Illuminators").Activate
    Range("A" & Rows.Count).End(xlUp).Offset(1).Select
    ActiveSheet.Paste


Loop
这里是我想要停止红色圆圈中的循环的地方:

这就是我使用END.xlDown的原因


可能会这样尝试

'Mentioning Starting Row Here
x = 2

Do
    'x refers to Row and F refer to column name
    With Cells(x, "F")
        'Exiting Do Loop once it finds the matching value using If statement
        If .Value = "BBSE" Then Exit Do
        OP_wb.Activate
        Worksheets("Optic Main").Activate
        .EntireRow.Cut
        Demand_WB.Activate
        Worksheets("Illuminators").Activate
        Range("A" & Rows.Count).End(xlUp).Offset(1).Select
        ActiveSheet.Paste
    End With
    'Incrementing row number here to move on to next row
    x = x + 1
Loop

如果我正确理解了您想要实现的目标,我相信以下几点可以实现:

Dim startRow As Long
Dim endRow As Long
With OP_wb.Worksheets("Optic Main")
    startRow = .Range("F2").End(xlDown).Row
    endRow = .Columns("F").Find(What:="BBSE", LookIn:=xlValues, LookAt:=xlWhole).Row
    .Rows(startRow & ":" & endRow).Cut
End With
With Demand_WB.Worksheets("Illuminators")
    .Range("A" & .Rows.Count).End(xlUp).Offset(1).Insert Shift:=xlDown
End With

这永远不会匹配,因为您试图将列的内容与单个单元格的内容进行匹配。但是您的
ActiveCell
位于列a中!(在不同的工作表上?在不同的工作簿中??(第一次循环除外)基本上,停止使用
Activate
Select
。请参阅。@Luuklag第一次通过循环时,选择了由
OP_wb.ActiveSheet.Range(“F2”).End(xlDown)
表示的单个单元格(我猜
OP_wb
是工作簿)。之后,选择由
需求工作表(“照明器”).Range(“A”和Rows.Count).End(xlUp).Offset(1)
表示的单个单元格。因此,永远不会选择列。(我想。也许我应该检查一下。)不,你是对的,第二次通过时选择了整行。我很难理解代码试图做什么。它是否试图将信息从
OP_wb
中的表“Optical Main”按相反顺序复制到
Demand_wb
中的表“Illuminators”(照明器)中(即底部行在顶部结束),直到您到达F列中包含“BBSE”的源行?如果VBA中不需要结束,因为我们没有使用Else语句:)@Sixthsense,正确答案是“
如果
不需要结束,因为它是一行
如果
”。一行
If
可以包含一个
Else
,例如
如果A=b那么c=5 Else c=6
。很高兴知道。我将删除我的评论。@YowE3K,你试过了吗?请尝试并发表评论。不知道是谁向我发了-1:(