Добрый день. Пытаюсь написать код для решения своей рабочей задачи. Не работает Суть вот в чём: Есть рабочие файлы, с актами дефектовки инструмента. В них есть колонка, в которой указаны артикулы запчастей. Справа от неё колонка, где я должен указывать цены. Значительная часть артикулов от акта к акту повторяются и есть задумка по запуску макроса делать автозаполнение цен. Создан отдельный файл , который называется PartsPrice.xlsx и статично лежит по пути C:\PartsPrice\PartsPrice.xlsx В нём всего два столбца: Артикул и Цена. Логика работы скрипта подразумевается такая: В акте я выделяю мышью необходимые для расценки ячейки, запускаю макрос. Он в цикле проходит каждую из выделенных ячеек, сравнивает значение с значениями столбца Артикул файла PartsPrice.xlsx, и если находит совпадения, из соответствующего поля Цена копирует значение на 1 ячейку справа от выделенное. И так проходит по всем выделенным. Вот такой код у меня есть, но он не работает)) помогите пожалуйста. [vba]
Код
Sub UpdateAKT()
' Получение указателя на текущий открытый файл (AKT) Dim AKT As Workbook Set AKT = ActiveWorkbook
' Открытие файла PartsPrice.xlsx Dim PartsPricePath As String PartsPricePath = "C:\PartsPrice\PartsPrice.xlsx" Dim PartsPrice As Workbook Set PartsPrice = Workbooks.Open(PartsPricePath) Dim PartsPriceSheet As Worksheet Set PartsPriceSheet = PartsPrice.Sheets(1)
' Обработка каждой выделенной ячейки в колонке C файла AKT Dim AKTSheet As Worksheet Set AKTSheet = AKT.ActiveSheet Dim SelectedCells As Range Set SelectedCells = Selection Dim row As Integer For Each cell In SelectedCells row = cell.Row ' Получение значений для поиска в столбце Article файла PartsPrice Dim lookup_value As String lookup_value = AKTSheet.Cells(row, 3).Value If lookup_value <> "" Then ' Поиск соответствующего артикула в файле PartsPrice.xlsx Dim part_price As Variant Dim part_row As Integer part_row = Application.Match(lookup_value, PartsPriceSheet.Columns(1), 0) If Not IsError(part_row) Then part_price = PartsPriceSheet.Cells(part_row, 2).Value AKTSheet.Cells(row, 5).Value = part_price End If End If Next cell
' Сохранение и закрытие файлов AKT.Save PartsPrice.Close
End Sub
[/vba]
Образец файла АКТ прикладываю
Добрый день. Пытаюсь написать код для решения своей рабочей задачи. Не работает Суть вот в чём: Есть рабочие файлы, с актами дефектовки инструмента. В них есть колонка, в которой указаны артикулы запчастей. Справа от неё колонка, где я должен указывать цены. Значительная часть артикулов от акта к акту повторяются и есть задумка по запуску макроса делать автозаполнение цен. Создан отдельный файл , который называется PartsPrice.xlsx и статично лежит по пути C:\PartsPrice\PartsPrice.xlsx В нём всего два столбца: Артикул и Цена. Логика работы скрипта подразумевается такая: В акте я выделяю мышью необходимые для расценки ячейки, запускаю макрос. Он в цикле проходит каждую из выделенных ячеек, сравнивает значение с значениями столбца Артикул файла PartsPrice.xlsx, и если находит совпадения, из соответствующего поля Цена копирует значение на 1 ячейку справа от выделенное. И так проходит по всем выделенным. Вот такой код у меня есть, но он не работает)) помогите пожалуйста. [vba]
Код
Sub UpdateAKT()
' Получение указателя на текущий открытый файл (AKT) Dim AKT As Workbook Set AKT = ActiveWorkbook
' Открытие файла PartsPrice.xlsx Dim PartsPricePath As String PartsPricePath = "C:\PartsPrice\PartsPrice.xlsx" Dim PartsPrice As Workbook Set PartsPrice = Workbooks.Open(PartsPricePath) Dim PartsPriceSheet As Worksheet Set PartsPriceSheet = PartsPrice.Sheets(1)
' Обработка каждой выделенной ячейки в колонке C файла AKT Dim AKTSheet As Worksheet Set AKTSheet = AKT.ActiveSheet Dim SelectedCells As Range Set SelectedCells = Selection Dim row As Integer For Each cell In SelectedCells row = cell.Row ' Получение значений для поиска в столбце Article файла PartsPrice Dim lookup_value As String lookup_value = AKTSheet.Cells(row, 3).Value If lookup_value <> "" Then ' Поиск соответствующего артикула в файле PartsPrice.xlsx Dim part_price As Variant Dim part_row As Integer part_row = Application.Match(lookup_value, PartsPriceSheet.Columns(1), 0) If Not IsError(part_row) Then part_price = PartsPriceSheet.Cells(part_row, 2).Value AKTSheet.Cells(row, 5).Value = part_price End If End If Next cell
' Сохранение и закрытие файлов AKT.Save PartsPrice.Close
Sub mangasarovdr() Dim rR As Range For Each rR In Selection rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsx").Sheets(1).Range("a1:b1000"), 2, 0) Next rR End Sub
[/vba]
Здравствуйте
Почему не так? [vba]
Код
Sub mangasarovdr() Dim rR As Range For Each rR In Selection rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsx").Sheets(1).Range("a1:b1000"), 2, 0) Next rR End Sub
Если файл PartsPrice.xlsx открыт, то ничего в моем предыдущем коде менять не надо Если закрыт, то можно принудительно открыть:[vba]
Код
Sub mangasarovdr() Workbooks.Open Filename:="C:\PartsPrice\PartsPrice.xlsx", UpdateLinks:=0 Dim rR As Range ThisWorkbook.Activate For Each rR In Selection rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsx").Sheets(1).Range("a1:b10000"), 2, 0) Next rR End Sub
Если файл PartsPrice.xlsx открыт, то ничего в моем предыдущем коде менять не надо Если закрыт, то можно принудительно открыть:[vba]
Код
Sub mangasarovdr() Workbooks.Open Filename:="C:\PartsPrice\PartsPrice.xlsx", UpdateLinks:=0 Dim rR As Range ThisWorkbook.Activate For Each rR In Selection rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsx").Sheets(1).Range("a1:b10000"), 2, 0) Next rR End Sub
Нашёл ошибку, было расширение файла xlsb, вместо xlsx в скрипте. Исправил на xlsx Теперь выдаёт ошибку Run-time error '1004' Невозможно получить свойство VLookup класса WorksheetFuncion
Нашёл ошибку, было расширение файла xlsb, вместо xlsx в скрипте. Исправил на xlsx Теперь выдаёт ошибку Run-time error '1004' Невозможно получить свойство VLookup класса WorksheetFuncionmangasarovdr
Так в том то и дело, что их там может и не оказаться Как-то поменять надо код, да? Типа если совпадений не найдено, то ничего страшного, пропускаем и ищем следующую
Так в том то и дело, что их там может и не оказаться Как-то поменять надо код, да? Типа если совпадений не найдено, то ничего страшного, пропускаем и ищем следующуюmangasarovdr
Не на всё)) только самые ходовые 150-200 позиций) Чисто время на расценке актов сэкономить А остальное вручную у поставщиков уже смотрю Спасибо большое и приятного аппетита!
Не на всё)) только самые ходовые 150-200 позиций) Чисто время на расценке актов сэкономить А остальное вручную у поставщиков уже смотрю Спасибо большое и приятного аппетита!mangasarovdr
Не сразу сообразил - там не надо каждую ошибку обрабатывать, достаточно все одновременно:[vba]
Код
Sub mangasarovdr() Workbooks.Open Filename:="C:\PartsPrice\PartsPrice.xlsx", UpdateLinks:=0 Dim rR As Range ThisWorkbook.Activate On Error Resume Next For Each rR In Selection rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsx").Sheets(1).Range("a1:b10000"), 2, 0) Next rR End Sub
[/vba]
Спасибо)
Не сразу сообразил - там не надо каждую ошибку обрабатывать, достаточно все одновременно:[vba]
Код
Sub mangasarovdr() Workbooks.Open Filename:="C:\PartsPrice\PartsPrice.xlsx", UpdateLinks:=0 Dim rR As Range ThisWorkbook.Activate On Error Resume Next For Each rR In Selection rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsx").Sheets(1).Range("a1:b10000"), 2, 0) Next rR End Sub
А теперь вообще интересно... Никаких ошибок не выдаёт, но и файл не заполняет. Эти артикулы с ценами, естественно я в файл PartsPrice.xlsx забил
А теперь вообще интересно... Никаких ошибок не выдаёт, но и файл не заполняет. Эти артикулы с ценами, естественно я в файл PartsPrice.xlsx забилmangasarovdr
В PERSONAL.XLSB Я так понимаю это файл, который подгружается при любом открытии EXCEL? К сожалению не имею возможности записать его в файлы акта, ибо их тысячи....
В PERSONAL.XLSB Я так понимаю это файл, который подгружается при любом открытии EXCEL? К сожалению не имею возможности записать его в файлы акта, ибо их тысячи....mangasarovdr