Количество строк и функция вставки - PullRequest
0 голосов
/ 18 декабря 2018

Я использую следующий код для копирования из файла Excel, начинающегося с «Сведения о задержке заказа»:

Sub INSERT()

Dim Wb1 As Workbook, wb2 As Workbook, wB As Workbook
Dim rngToCopy As Range
Dim countEND As Long

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Sheets("RAW_DATA").Select

Worksheets("RAW_DATA").Range("A3:CA45000").ClearContents
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData

For Each wB In Application.Workbooks
    If Left(wB.Name, 17) = "Backorders Detail" Then
        Set Wb1 = wB
        Exit For
    End If
Next

If Not Wb1 Is Nothing Then
    Set wb2 = ThisWorkbook

    With Wb1.Sheets(2)
        Set rngToCopy = .Range("A3:BX3", .Cells(.Rows.Count, "A").End(xlUp))
    End With
    wb2.Sheets("RAW_DATA").Range("A3:BX3").Resize(rngToCopy.Rows.Count).Value = rngToCopy.Value

End If

With wb2.Sheets("RAW_DATA")
    countEND = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("BY3:BY" & countEND).Formula = "=IFERROR(IF(AND(VLOOKUP(VALUE(AS3);BG_DATA!A:A;1;FALSE)=(VLOOKUP(VALUE(AS3);BG_DATA!A:A;1;FALSE));(AF3>0));"""";""x"");""x"")" 'Check
    .Range("BZ3:BZ" & countEND).Formula = "=VLOOKUP(VALUE(AS3);BG_DATA!A:I;9;FALSE)" 'Vendor'
    .Range("CA3:CA" & countEND).Formula = "=VLOOKUP(VALUE(AS3);BG_DATA!A:J;10;FALSE)" 'Planner
End With

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

MsgBox "DONE!"

End Sub

Я скопировал эту функцию из другого файла Excel, который я создал.Это сработало довольно хорошо.Но по какой-то причине следующая часть теперь дает мне ошибку:

With wb2.Sheets("RAW_DATA")
    countEND = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("BY3:BY" & countEND).Formula = "=IFERROR(IF(AND(VLOOKUP(VALUE(AS3);BG_DATA!A:A;1;FALSE)=(VLOOKUP(VALUE(AS3);BG_DATA!A:A;1;FALSE));(AF3>0));"""";""x"");""x"")" 'Check
    .Range("BZ3:BZ" & countEND).Formula = "=VLOOKUP(VALUE(AS3);BG_DATA!A:I;9;FALSE)" 'Vendor'
    .Range("CA3:CA" & countEND).Formula = "=VLOOKUP(VALUE(AS3);BG_DATA!A:J;10;FALSE)" 'Planner
End With

Ошибка времени выполнения 1004 - Ошибка приложения или объекта.Я гуглил это, но не нашел решения.Файл Excel был XLSX и теперь является XLSM.Может кто-нибудь подсказать в чем проблема?

1 Ответ

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

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

With wb2.Sheets("RAW_DATA")
    countEND = .Cells(.Rows.Count, "A").End(xlUp).Row
    .Range("BY3:BY" & countEND).Formula = "=IFERROR(IF(AND(VLOOKUP(VALUE(AS3),BG_DATA!A:A,1,FALSE)=(VLOOKUP(VALUE(AS3),BG_DATA!A:A,1,FALSE)),(AF3>0)),"""",""x""),""x"")" 'Check
    .Range("BZ3:BZ" & countEND).Formula = "=VLOOKUP(VALUE(AS3),BG_DATA!A:I,9,FALSE)" 'Vendor'
    .Range("CA3:CA" & countEND).Formula = "=VLOOKUP(VALUE(AS3),BG_DATA!A:J,10,FALSE)" 'Planner
End With

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

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