2017-09-02 107 views
0

概述或即使條件滿足,聲明也不起作用?

我目前工作的一個簡單的功能,以幫助驗證我的數組中的起始位置。我正在使用DO語句,然後直接抵消活動單元格,直到符合我的DO語句的條件。

代碼在Excel工作表

Date  Open High  Low Close Adj Close Volume 
12/22/1998 19.05 19.05 18.85 18.94  9.98  55900 
12/23/1998 18.86 19.22 18.86 19.22  10.13 78800 
12/24/1998 19.22 19.34 19.15 19.34  10.20 43800 
12/28/1998 19.33 19.33 19.04 19.09  10.06 51900 
12/29/1998 19.12 19.29 18.89 19.29  10.17 100800 
12/30/1998 19.19 19.32 19.09 19.22  10.13 154600 
12/31/1998 19.22 19.24 19.04 19.04  10.04 65400 

的日期位於範圍 「A4」 和所有的數據的整個範圍

Public Function ArrayStart() As Variant 

    Range("A3").Select 


    Do 


     ActiveCell.Offset(1, 0).Select 


    Loop While (ActiveCell.Value <> "Date" Or _ 
       ActiveCell.Value <> "Open" Or _ 
       ActiveCell.Value <> "High" Or _ 
       ActiveCell.Value <> "Low" Or _ 
       ActiveCell.Value <> "Close" Or _ 
       ActiveCell.Value <> "Adj Close" Or _ 
       ActiveCell.Value <> "Volume") 

    ArrayStart = ActiveCell.Row 


End Function 

數據位於範圍「 A4:G11"

問題

代碼工作,直到它到達河套雖然部分,即使activecell是「A4」,這是「日期」它不會承認它是這樣,並將繼續不斷循環。

當我走OR開出的條件,並使用此代碼,它完美的作品

Loop While (ActiveCell.Value <> "Date") 

我運行相同的整體代碼,但消除了,報表和它的偉大工程,我越來越沒有錯誤,我只是不能理解爲什麼它不工作。另外,當我將鼠標懸停在vba窗口中的activecell.value上時,它顯示「Date」,當它到達單元格「A4」時?

+1

考慮一個更簡單的語句 - 'x <>「A」或x <>「B」'。如果x'「A」'那麼它是不是'「B」'這樣的語句變成'虛假或TRUE'這是'真'。如果x'「B」'那麼它是不是'「A」'這樣的語句變成'真或FALSE'這是'真'。如果x'「C」'那麼它是不是'「A」'或'「B」'這樣的語句變成'真或TRUE'這是'真'。換句話說,它總是**'真'。 – YowE3K

回答

2

嘗試使用ActiveCell

Public Function ArrayStart() As Variant 
    Range("A1").Select 
    Do 
     ActiveCell.Offset(1, 0).Select 
    Loop Until (ActiveCell.Value = "Date" Or _ 
       ActiveCell.Value = "Open" Or _ 
       ActiveCell.Value = "High" Or _ 
       ActiveCell.Value = "Low" Or _ 
       ActiveCell.Value = "Close" Or _ 
       ActiveCell.Value = "Adj Close" Or _ 
       ActiveCell.Value = "Volume") 
    ArrayStart = ActiveCell.Row 
End Function 

避免,見this瞭解詳情。更有效的代碼將是

Public Function ArrayStartMMM() As Variant 
    Dim rng As Range 
    Set rng = Range("A1") 
    Do 
     Set rng = rng.Offset(1, 0) 
    Loop Until (rng.Value = "Date" Or _ 
       rng.Value = "Open" Or _ 
       rng.Value = "High" Or _ 
       rng.Value = "Low" Or _ 
       rng.Value = "Close" Or _ 
       rng.Value = "Adj Close" Or _ 
       rng.Value = "Volume") 
    ArrayStart = rng.Row 
End Function 
+0

現在它的工作原理另外,加1忘了從0開始 – ZacAttack

+0

是什麼循環,當和Unitl之間的區別?循環的時候我把OR條件進行 – ZacAttack

+1

@ZacAttack而將工作 - 'DO-WHILE'循環迭代只要某個條件爲真在那裏爲'DO-UNTIL'迭代,直到條件不再爲真。 – Mrig

相關問題