2016-09-09 74 views
0

我試圖將數據表中的信息拉入數組中,但我只想要符合條件的數據。我的IF聲明一直在拋出這個錯誤,現在一直讓我頭痛一個小時。任何建議感激!對象不支持此屬性或方法與If-Then語句

Dim InputArray() As String 
Dim i As Integer, j As Integer, r As Integer, m As Integer, k As Integer 

ReDim InputArray(1 To 798, 1 To 22) 

LoopStart: 
For m = 1 To 866 
    Sheets("Base").Activate 
    If Sheets("Base").Cell(m + 1, 23) = 6 Then GoTo Line1 <<This line throws the error 


Line1: 
    k = UBound(InputArray, 1) + 1 
     For j = 1 To 22 
      InputArray(k, j) = Sheets("Base").Cell(m + 1, j).Value 
     Next j 

Next m 
'GoTo LoopStart 

End Sub 
+0

另外,如果我嘗試後添加「.value的」,‘單元(M + 1,23)’,我得到一個不同的錯誤 - ‘應用程序定義或對象定義的錯誤’ –

+4

你應該說'細胞不是「細胞」。 –

+0

'Sheets(「Base」)。Activate'是不必要的。 'Activate'是一個很慢的語句,所以如果需要的話,可以避免將它放在For循環中。 –

回答

0

下面的代碼,只是指的代碼,你上傳的部分,如果你可以上傳你的Sub的休息一下,也許可以提供更好的和更清潔的解決方案。

像@Tony Dallimore提到,改變CellCells,也宣告BaseSht As Worksheet後,除去可能出現的錯誤,並在以後使用With BaseSht

不知道爲什麼你有位於Line1,你必須把它放在你的代碼,甚至If .Cells(m + 1, 23).Value = 6失敗了,但它仍然會去到下一行,這是k = UBound(InputArray, 1) + 1For環以下這一點。

如果您共享您的工作表和數據結構,可能會改變For m = 1 To 866動態LASTROW,與For m = 1 To LastRow,其中LASTROW是一個數字,你所擁有的行數據的數量是動態變化的。

Dim BaseSht   As Worksheet 
Dim InputArray() As String 
Dim i As Integer, j As Integer, r As Integer, m As Integer, k As Integer 

Set BaseSht = ThisWorkbook.Sheets("Base") 
ReDim InputArray(1 To 798, 1 To 22) 

LoopStart: 

With BaseSht 
    For m = 1 To 866   
     If .Cells(m + 1, 23).Value = 6 Then GoTo Line1 

Line1: 
     k = UBound(InputArray, 1) + 1 
     For j = 1 To 22 
      InputArray(k, j) = .Cells(m + 1, j).Value 
     Next j 

    Next m 

End With 
'GoTo LoopStart 
相關問題