2014-06-27 32 views
2

我有,如果在公式中這是一個範圍的一部分的細胞產生的「X」,即填充的數組:返回整個陣列作爲字符串

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim Fault(10) As Boolean 

For i = 1 To 10 

If Range("A" & i).Value = "X" Then 
    Fault(i) = True 
End If 

Next i 


MsgBox Fault 'VBA Errors Here With "Type Mismatch" 

End Sub 

我的問題是,是否有可能返回一個整個數組作爲字符串。所以在上面的例子中,如果沒有錯誤,我希望消息框返回「0000000000」。如果第7個陣列出現故障,則返回「0000001000」。

我的目的是檢查字符串總是等於「0000000000」才能繼續。但是,如果有更好的方法來檢查整個數組是否爲假,那麼這將更容易。

+0

它是必不可少的知道故障發生在哪裏,或僅僅知道故障是足夠的? – barrowc

+0

如果我能夠知道數組的哪一位包含「真」值,那麼最好,但我仍然對測試整個陣列感興趣。 – SilverShotBee

回答

3

嘗試這種情況:

Sub JoinArray() 
    Dim Fault(9) As String, arrString As String 

    For i = 1 To 10 
     If Range("A" & i) = "X" Then 
      Fault(i - 1) = 1 
     Else 
      Fault(i - 1) = 0 
     End If 
    Next i 

    arrString = Join(Fault(), "") 

    If InStr(arrString, "1") Then 
     MsgBox "Fault Found" 
    Else 
     MsgBox "No faults found" 
    End If 
End Sub 

注:

  1. 通常的陣列零索引,以便Fault(9)允許10個時隙例如範圍(「A1:A10」)
  2. Join""參數意味着有在輸出即00.11億

替代方法沒有空間,而不使用陣列

Sub FindFaults() 
    Dim rng As Range, cl As Range, faultLocations As String 

    Set rng = Range("A1:A1000") 
    faultLocations = "Faults found in the following cell(s):" & vbCrLf & vbCrLf 

    If WorksheetFunction.CountIf(rng, "X") = 0 Then 
     MsgBox "No Fault Found" 
    Else 
     For Each cl In rng 
      If cl = "X" Then 
       faultLocations = faultLocations + "Cell: " & cl.Address & vbCrLf 
      End If 
     Next cl 
    End If 

    MsgBox faultLocations 
End Sub 
+0

這太好了,但如果我的'Fault'數組長度爲1000,會怎麼樣?很明顯,我不想測試「000000000 ....」到1000.有沒有一種方法來測試,以確保整個數組只包含「0」,但如果它沒有,確切地說1位於的位置?感謝這個答案,但它朝着正確的方向邁出了一步 – SilverShotBee

+1

查看更新以瞭解如何查看是否發現任何故障。當你說出1的位置時,你的意思是範圍參考? –

+0

不,我''號碼會好 – SilverShotBee