2015-07-02 3 views
2

мне было интересно, почему я держать перед собой ошибкурассогласования длянесоответствие ошибок для SheetName

Если (листы (newsheetname) .Rows (л) .Cells (1, 2) .Value = продукта) Тогда

Код в основном пытается вычислить и сопоставить ячейки и перебрать их на разные рабочие листы.

Ниже мой код:

Dim range1, range2 As Range 
    'define the variables 
    Dim referencesheetcols As Integer 
    Dim range1rows, range1cols, range2rows, range2cols, testrows, testcols, i, j, p As Long 
    Dim bMatches, rowmatched As Boolean 
    Dim product As String 

    product = "ProductA" 
    newsheetcols = 2123 
    referencesheetcols = 2123 
    ' how many rows and columns should we compare? 
    testrows = 1 
    testcols = 7 
    p = Sheets(referencesheetname).UsedRange.Rows.Count 
    For l = 7 To newsheetcols 
     'only test if correct product 

     **If (Sheets(newsheetname).Rows(l).Cells(1, 2).Value = product) Then** 
      rowmatched = False 
      For k = 7 To referencesheetcols 
       'bmatch = False 
       Set range1 = Sheets(referencesheetname).Rows(k) 
       Set range2 = Sheets(newsheetname).Rows(l) 
       ' count the rows and columns in each of the ranges 
       range1rows = range1.Rows.Count 
       range1cols = range1.Columns.Count 
       range2rows = range2.Rows.Count 
       range2cols = range2.Columns.Count 
       'are the ranges the same dimension? 
       bMatches = (range1rows = range2rows And range1cols = range2cols) 
       'if same dimensions loop through the cells 
       If bMatches Then 
        For i = 1 To testrows 
         For j = 1 To testcols 
          If (range1.Cells(i, j).Value <> range2.Cells(i, j).Value) Then 
           bMatches = False 
           i = testrows 
           j = testcols 
          End If 
         Next 
        Next 
       End If 
       If bMatches Then 
        rowmatched = True 
        k = referencesheetcols 
       End If 
       'Sheets(outputsheetname).Cells(1, 1).Value = rowmatched 
       If (Not (rowmatched) And k = referencesheetcols) Then 
        range2.Copy 
        Sheets(outputsheetname).Range("a1:a6000").Cells(p, 1).Offset(2, 0).Select 
        ActiveSheet.Paste 
        p = p + 1 
       End If 
      Next 
     End If 
    Next 
End Sub 
+0

Где вы определяете 'newsheetname', 'referencesheetname' и 'ouputsheetname'? –

+0

Помогает ли вам преобразовать обе стороны в строку? cstr (...) = cstr (...)? – Krishna

+0

Кришна может быть прав, но вам нужно будет преобразовать листы (newsheetname) .Rows (l) .Cells (1, 2). Значение для строки, продукт уже является строкой – Tom

ответ

1

завершить вопрос рядный с С.О. руководящих принципов,

If cstr(Sheets(newsheetname).Rows(l).Cells(1, 2).Value) = product Then 
      rowmatched = False 
      For k = 7 To referencesheetcols 
Смежные вопросы