Страницы: 1
RSS
Перенос данных между столбцами двух книг. Ошибка 400
 
Задача: из файла А (по определенному пути) перенести данные из определенных столбцов в определенные столбцы файла Б. Конвертнуть часть перенесенных данных в штрихкод.
Как решал: есть некая функция по конвертации. + написал макрос
Код
Sub Äàòà()
Dim wb, ab As Workbook
Dim sWb As String
Dim Cel As Long
Dim ai, bi, ci As Range
Dim sh As Worksheet
Set ab = ActiveWorkbook
  sPath = ThisWorkbook.Worksheets(4).Cells(1, 1).Value
  sWb = ThisWorkbook.Worksheets(4).Cells(1, 2).Value
Set wb = Workbooks.Open(sPath & "\" & sWb, False, True)
Set sh = wb.Worksheets(1)
With sh
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
ai = Range("d15:d" & lLastRow)
bi = Range("k15:k" & lLastRow)
ci = Range("y15:y" & lLastRow)
End With
ab.Worksheets(5).Range("A2:a" & lLastRow - 14) = ai
ab.Worksheets(5).Range("c2:c" & lLastRow - 14) = bi
ab.Worksheets(5).Range("d2:d" & lLastRow - 14) = ci
For Cel = 2 To lLastRow - 14
If Not Cells(Cel, 1) Like "" Then
Cells(Cel, 2) = Barcode.Code_128("A" & Cel)
        End If
If Not Cells(Cel, 3) Like "" Then
Cells(Cel, 5) = Barcode.Code_128("d" & Cel)
        End If
Next Cel
wb.Close False
End Sub
Результат:
Получена ошибка 400 без объяснения о возникновении :(
Можете помочь с тем что делается макросом не там и не то? Откуда эта ошибка? И что она обозначает?

Приложен файл источник данных. К сожалению файл результат превышает 9 мегабайт даже при обрезанных данных.
 
alex_j, пройдите код по шагам ([F8]), если не видите по [DEBUG] строку с ошибкой.
Так быстрее увидите, откуда ноги растут вашей проблемы.
 
Цитата
alex_j написал:
Dim ai, bi, ci As Range
Вы зря надеетесь, что ai и bi имеют тип Range. На самом деле это Variant. И это не только в данной строке

Цитата
alex_j написал:
Set sh = wb.Worksheets(1)
With sh
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
ai = Range("d15:d" & lLastRow)
bi = Range("k15:k" & lLastRow)
ci = Range("y15:y" & lLastRow)
End With
Здесь вы работаете не с ячейками листа sh, а с ячейками активного листа.
Писать по контексту надо примерно так -
Код
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
и так
Код
SET ci = .Range("y15:y" & lLastRow)
 
Апострофф, Большое спасибо! Т.е. даже при использовании With  мне необходимо использовать признак что данные беруться именно из описанного места (объявленной страницы)?
 
Код
With sh
     .Cells(1,1).Value = 5
     Cells(2,2).Value = 7
End With

В ячейку А1 листа sh записываем 5
В ячейку В2 листа активного записываем 7
Если активен лист  sh, то заполнятся две ячейки на этом листе
Страницы: 1
Наверх