2016-01-19 4 views
1

Я пытаюсь получить колонку с внешнего/закрытого листа Excel и сравнить ее с колонкой с открытого листа.Excel/VBA - для каждого цикла и StringComp

Проблема заключается в том, что с некоторыми из моих входов, результат является ложным, так как сравнение не является правильным, и поэтому программа говорит мне, что мой массив нашел() не является достаточно большим для всех данных

Мой код:

Private Sub CommandButton1_Click() 

Dim varData As Variant 
Dim objExcel As New Excel.Application 
Dim objSheet As Object 
Dim extRange As Variant 
Dim intRange As Variant 

Set intRange = ThisWorkbook.Sheets(1).Range("A4:A11") 

Dim loopStr As Variant 
Dim loopStr2 As Variant 
Dim found() As Variant 
Dim loopInt As Integer 
Dim endStr As Variant 

loopInt = 1 
varData = Application.GetOpenFilename("Excel (*.xlsx), *.xlsx") 
If varData <> False Then 
objExcel.Workbooks.Open varDatei 
Set objSheets = objExcel.Sheets(1) 
objSheets.Activate 
LastRow = objSheets.Cells(Rows.Count, 3).End(xlUp).Row 
Set extRange = objSheets.Range("B3:B" & LastRow) 
ReDim found(1 To LastRow) 
For Each loopStr In extRange 
    For Each loopStr2 In intRange 
     If StrComp(loopStr, loopStr2) = True Then 
      found(loopInt) = loopStr 
      loopInt = loopInt + 1 
     End If 
    Next loopStr2 
Next loopStr 
loopStr = "" 
For Each loopStr In found 
    endStr = endStr + " " + loopStr 
Next loopStr 
Debug.Print endStr 
Else 
MsgBox "Error" 
End If 

End Sub 
+1

Можете ли вы подтвердить, что говорит сообщение об ошибке, и по какой строке кода он появляется? – Jordan

+1

Вам нужно сбросить loopint, так как это будет увеличиваться, до петли loopstr2 –

+0

Вы можете использовать ubound (found) вместо loopint. –

ответ

0

LastRow = objSheets.Cells (Rows.Count, 3) .END (xlUp) .Row

"Ряды", кажется, не определено мне. Обычный синтаксис либо

LastRow = objSheets.Cells(objSheets.Rows.Count, 3).End(xlUp).Row 

(или любой другой лист вы хотите считать строки для) или

LastRow = objSheets.Cells(.Rows.Count, 3).End(xlUp).Row 

для текущего листа. Проверьте, что говорит отладчик о «Rows.Count». Попробуйте это и ответьте, если вы сочтете это полезным.

+0

Я проверил его, он возвращает мне правильный номер, так что это не проблема. Но все же спасибо за помощь – ndslr

Смежные вопросы