Ошибка при использовании vba для формулы соответствия индекса с адресом ячейки - PullRequest
0 голосов
/ 19 декабря 2018

Excel продолжает выдавать меня:

Ошибка времени выполнения 1004: ошибка приложения или объекта

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

Это проблема в том, как я определяю диапазон skumaestro?

Спасибо

Sub getskus ()
lastskurow = .Cells(.Rows.count, "M").End(xlUp).Row
lasthandlerow = .Cells(.Rows.count, "B").End(xlUp).Row


With ThisWorkbook.Worksheets(2)

    Dim skumaestro As Range
    Set skumaestro = Range(Cells(lasthandlerow, 13), Cells(lastskurow, 13))

End With
For start = 1 To count

     Range("C" & Rows.count).End(xlUp).Offset(1).Select
     ActiveCell.FormulaR1C1 = "=INDEX(" & barcodes.Address(True, True, 
      xlA1, True) & ",MATCH(" & skumaestro(1).Address(False, True, xlA1, 
      False) & "," & skucodes.Address(True, True, xlA1, True) & ",0))"

     ActiveCell.Value2 = ActiveCell.Value2 

Next

End Sub

1 Ответ

0 голосов
/ 19 декабря 2018

Вы неправильно используете блок С ... Конец с.Обратите внимание на ., который позволяет .Range и .Cells наследовать родительский лист.

With ThisWorkbook.Worksheets(2)

    Dim skumaestro As Range
    Set skumaestro = .Range(.Cells(lasthandlerow, 13), .Cells(lastskurow, 13))

End With

Ваша формула использует адреса xlA1, чтобы попытаться создать формулу FormulaR1C1.Нет определенного родительского листа. штрих-коды и skucodes не определены.Вы не используете start для циклического перемещения по чему-либо.

Я думаю, что вы хотите что-то вроде

For start = 1 To count

     with Range("C" & Rows.count).End(xlUp).Offset(1)   'what parent worksheet?

         .FormulaR1C1 = "=INDEX(" & barcodes.Address(True, True, 
      xlR1C1, True) & ",MATCH(" & skumaestro(start).Address(False, True, xlR1C1, 
      False) & "," & skucodes.Address(True, True, xlR1C1, True) & ",0))"

         .Value = .Value2 

    end with

Next start

Вы не используете внешний адрес для skumaestro в формуле, поэтому можно разумно предположить, что формула предназначалась для того же рабочего листа, который использовался выше.

Dim skumaestro As Range, addr1 as string, addr2 as string

With ThisWorkbook.Worksheets(2)

    Set skumaestro = .Range(.Cells(lasthandlerow, 13), .Cells(lastskurow, 13))
    addr1 = barcodes.Address(True, True, xlR1C1, external:=True)
    addr2 = skucodes.Address(True, True, xlR1C1, external:=True)

     with .Range("C" & Rows.count).End(xlUp).Offset(1).resize(count, 1)

         .FormulaR1C1 = "=INDEX(" & addr1 & ",MATCH(" & skumaestro(1).Address(False, True, xlR1C1, False) & "," & addr2 & ",0))"
         .Value = .Value2 

    end with

End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...