Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сравнение с ячейками в другом файле - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение с ячейками в другом файле (Макросы/Sub)
Сравнение с ячейками в другом файле
mangasarovdr Дата: Пятница, 24.03.2023, 11:19 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Добрый день.
Пытаюсь написать код для решения своей рабочей задачи. Не работает :)
Суть вот в чём:
Есть рабочие файлы, с актами дефектовки инструмента. В них есть колонка, в которой указаны артикулы запчастей. Справа от неё колонка, где я должен указывать цены.
Значительная часть артикулов от акта к акту повторяются и есть задумка по запуску макроса делать автозаполнение цен.
Создан отдельный файл , который называется 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]

Образец файла АКТ прикладываю
К сообщению приложен файл: 20681.xlsx (42.9 Kb)
 
Ответить
СообщениеДобрый день.
Пытаюсь написать код для решения своей рабочей задачи. Не работает :)
Суть вот в чём:
Есть рабочие файлы, с актами дефектовки инструмента. В них есть колонка, в которой указаны артикулы запчастей. Справа от неё колонка, где я должен указывать цены.
Значительная часть артикулов от акта к акту повторяются и есть задумка по запуску макроса делать автозаполнение цен.
Создан отдельный файл , который называется 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]

Образец файла АКТ прикладываю

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 11:19
Serge_007 Дата: Пятница, 24.03.2023, 12:05 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Здравствуйте

Почему не так?
[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
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеЗдравствуйте

Почему не так?
[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
[/vba]

Автор - Serge_007
Дата добавления - 24.03.2023 в 12:05
mangasarovdr Дата: Пятница, 24.03.2023, 12:33 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Выглядит очень изящно, но у меня почему-то не заработало(( помогите, пожалуйста
Run-time error '9':
Subscript out of range

Всё что поменял в Вашем скрипте - прописал полный путь до файла PartsPrice
В чём может быть причина?
Скрин ошибки прикладываю
К сообщению приложен файл: 8785020.jpg (72.7 Kb)
 
Ответить
СообщениеВыглядит очень изящно, но у меня почему-то не заработало(( помогите, пожалуйста
Run-time error '9':
Subscript out of range

Всё что поменял в Вашем скрипте - прописал полный путь до файла PartsPrice
В чём может быть причина?
Скрин ошибки прикладываю

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 12:33
Serge_007 Дата: Пятница, 24.03.2023, 12:44 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
поменял в Вашем скрипте
Если файл 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
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
поменял в Вашем скрипте
Если файл 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
[/vba]

Автор - Serge_007
Дата добавления - 24.03.2023 в 12:44
mangasarovdr Дата: Пятница, 24.03.2023, 14:26 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Полностью скопировал скрипт из Вашего последнего сообщения
Ошибка та же
Что может быть?
Скрин прикладываю
К сообщению приложен файл: 5086438.jpg (42.4 Kb)
 
Ответить
СообщениеПолностью скопировал скрипт из Вашего последнего сообщения
Ошибка та же
Что может быть?
Скрин прикладываю

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 14:26
Serge_007 Дата: Пятница, 24.03.2023, 14:31 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
На на какой строке дебаг?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеНа на какой строке дебаг?

Автор - Serge_007
Дата добавления - 24.03.2023 в 14:31
mangasarovdr Дата: Пятница, 24.03.2023, 14:33 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
на

[vba]
Код

rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsb").Sheets(1).Range("a1:b10000"), 2, 0)
[/vba]
 
Ответить
Сообщениена

[vba]
Код

rR.Offset(0, 2) = Application.WorksheetFunction.VLookup(rR, Workbooks("PartsPrice.xlsb").Sheets(1).Range("a1:b10000"), 2, 0)
[/vba]

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 14:33
Serge_007 Дата: Пятница, 24.03.2023, 14:35 | Сообщение № 8
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Таблица на каком листе?
Сделайте скрин .png VBAProject


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеТаблица на каком листе?
Сделайте скрин .png VBAProject

Автор - Serge_007
Дата добавления - 24.03.2023 в 14:35
mangasarovdr Дата: Пятница, 24.03.2023, 14:35 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Нашёл ошибку, было расширение файла xlsb, вместо xlsx в скрипте.
Исправил на xlsx
Теперь выдаёт ошибку
Run-time error '1004'
Невозможно получить свойство VLookup класса WorksheetFuncion
 
Ответить
СообщениеНашёл ошибку, было расширение файла xlsb, вместо xlsx в скрипте.
Исправил на xlsx
Теперь выдаёт ошибку
Run-time error '1004'
Невозможно получить свойство VLookup класса WorksheetFuncion

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 14:35
mangasarovdr Дата: Пятница, 24.03.2023, 14:37 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Таблица на каком листе?
Сделайте скрин .png VBAProject


прикладываю
К сообщению приложен файл: 2086754.png (63.3 Kb)
 
Ответить
Сообщение
Таблица на каком листе?
Сделайте скрин .png VBAProject


прикладываю

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 14:37
Serge_007 Дата: Пятница, 24.03.2023, 14:38 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Невозможно получить свойство VLookup класса WorksheetFuncion
Убедитесь что все артикулы Акта приёмки выполнения работ есть в файле PartsPrice.xlsx


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Невозможно получить свойство VLookup класса WorksheetFuncion
Убедитесь что все артикулы Акта приёмки выполнения работ есть в файле PartsPrice.xlsx

Автор - Serge_007
Дата добавления - 24.03.2023 в 14:38
mangasarovdr Дата: Пятница, 24.03.2023, 14:40 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Так в том то и дело, что их там может и не оказаться
Как-то поменять надо код, да? Типа если совпадений не найдено, то ничего страшного, пропускаем и ищем следующую
 
Ответить
СообщениеТак в том то и дело, что их там может и не оказаться
Как-то поменять надо код, да? Типа если совпадений не найдено, то ничего страшного, пропускаем и ищем следующую

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 14:40
Serge_007 Дата: Пятница, 24.03.2023, 14:44 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
их там может и не оказаться
Прайс не на всё? :)

Как-то поменять надо код, да?
Да, после обеда доделаю


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
их там может и не оказаться
Прайс не на всё? :)

Как-то поменять надо код, да?
Да, после обеда доделаю

Автор - Serge_007
Дата добавления - 24.03.2023 в 14:44
mangasarovdr Дата: Пятница, 24.03.2023, 14:45 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Не на всё)) только самые ходовые 150-200 позиций) Чисто время на расценке актов сэкономить
А остальное вручную у поставщиков уже смотрю
Спасибо большое и приятного аппетита!
 
Ответить
СообщениеНе на всё)) только самые ходовые 150-200 позиций) Чисто время на расценке актов сэкономить
А остальное вручную у поставщиков уже смотрю
Спасибо большое и приятного аппетита!

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 14:45
Serge_007 Дата: Пятница, 24.03.2023, 14:54 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Спасибо)

Не сразу сообразил - там не надо каждую ошибку обрабатывать, достаточно все одновременно:[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]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеСпасибо)

Не сразу сообразил - там не надо каждую ошибку обрабатывать, достаточно все одновременно:[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]

Автор - Serge_007
Дата добавления - 24.03.2023 в 14:54
mangasarovdr Дата: Пятница, 24.03.2023, 14:59 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
А теперь вообще интересно...
Никаких ошибок не выдаёт, но и файл не заполняет.
Эти артикулы с ценами, естественно я в файл PartsPrice.xlsx забил
 
Ответить
СообщениеА теперь вообще интересно...
Никаких ошибок не выдаёт, но и файл не заполняет.
Эти артикулы с ценами, естественно я в файл PartsPrice.xlsx забил

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 14:59
Serge_007 Дата: Пятница, 24.03.2023, 15:02 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Приложите оба файла в одном архиве


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеПриложите оба файла в одном архиве

Автор - Serge_007
Дата добавления - 24.03.2023 в 15:02
mangasarovdr Дата: Пятница, 24.03.2023, 15:04 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
Прикладываю
К сообщению приложен файл: PartsPrice.zip (46.5 Kb)
 
Ответить
СообщениеПрикладываю

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 15:04
Serge_007 Дата: Пятница, 24.03.2023, 15:10 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Всё работает

Макрос у Вас где записан?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеВсё работает

Макрос у Вас где записан?

Автор - Serge_007
Дата добавления - 24.03.2023 в 15:10
mangasarovdr Дата: Пятница, 24.03.2023, 15:16 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 0 ±
Замечаний: 0% ±

2016
В PERSONAL.XLSB
Я так понимаю это файл, который подгружается при любом открытии EXCEL?
К сожалению не имею возможности записать его в файлы акта, ибо их тысячи....
 
Ответить
СообщениеВ PERSONAL.XLSB
Я так понимаю это файл, который подгружается при любом открытии EXCEL?
К сожалению не имею возможности записать его в файлы акта, ибо их тысячи....

Автор - mangasarovdr
Дата добавления - 24.03.2023 в 15:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение с ячейками в другом файле (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!