2017-09-07 251 views
0

當活動單元值爲「BBSE」時,我有一個需要停止的循環,但它會通過單元並繼續循環。有人可以幫助我呢? 我在一個workbbok中從表格中剪切行並將其粘貼到另一個。在列F中的列表之前,我有很多空白單元格,並且因此我使用了xldown。 下面是相關代碼:不是基於活動單元值停止的Excel VBA循環

'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 

這裏就是我想停在紅色圓圈圈:

enter image description here

這就是爲什麼我使用END.xlDown

enter image description here

+0

這永遠不會匹配,因爲你正試圖列的內容相匹配,對抗的一個單元。 – Luuklag

+1

但是你的'ActiveCell'在A列! (在不同的工作表上?和不同的工作簿中?)(除了第一次通過循環) – YowE3K

+2

基本上,停止使用「激活」和「選擇」。請參閱https://stackoverflow.com/q/10714251/6535336。 – YowE3K

回答

1

如果我理解你想正確實現什麼,我相信下面將實現它:

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 
+0

太棒了!有用! –

0

可能會這樣試試...

'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 
+0

如果在VBA中不需要,因爲我們還沒有使用Else語句:) – Sixthsense

+1

@Sixthsense實際上,正確答案是「End If」,因爲它是單行的「If」,所以不需要。 。單行「If」可以包含「Else」,例如, '如果a = b那麼c = 5否則c = 6'。 – YowE3K

+0

很高興知道。我會刪除我的評論。 – Luuklag