2016-09-09 44 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 
相关问题