Доброго времени суток! Прошу помощи в моем вопросе, ломаю голову уже второй день.
Исходные данные: 1) Две идентичные книги .xlsm - включают два листа. Первый лист формирует 8 переменных значений (формулами) используя данные из второго листа, содержащий список - две колонки, пополнение строк списка происходит через VBА. 2) Два компьютера в одной локальной сети. 3) Excel 2010
Процесс: Две книги Excel запущены на двух компьютерах в локальной сети. Через форму VBA каждый принимает 1 значение (данные штрихкода) и записывает их в лист "Список" формируя строку из двух значений штрихкод и время добавления. Первый лист используя формулы по маскам считает количество 8-и переменным (общее количество, количество по маске1, по маске 2 и тд.). Затем эти данные отображаются в форме VBA в Label.caption.
Задача: Передать 8 сформированных значений из книги1 в книгу2 и наоборот из книги 2 в книгу1 по локальной сети. Необходимо передать данные в момент их изменения. В результате необходимо получать в реальном времени на обоих формах VBA одинаковые значения сумм 8 переменных в Label.caption. Базы остаются в каждой книге уникальными. Все усложняется тем, что данные могут поступать одновременно с промежутком менее 1 секунды. К каждому компьютеру подключено 3 сканера штрихкодов.
Сейчас все идеально работает по отдельности, но при попытке связать две книги, например средствами Power Query и добавить код обновления запроса после каждого ввода данных - даже при 8-и переменных это занимает слишком много времени, макрос упирается в процесс обновления предыдущего запроса. При использовании совместного использования книги (через 3 файл), ограничение на обновление данных в 5 секунд.
Возможно есть способ передать значения средствами VBA? Файл прикрепляю.
Заранее большое спасибо всем откликнувшимся!
Доброго времени суток! Прошу помощи в моем вопросе, ломаю голову уже второй день.
Исходные данные: 1) Две идентичные книги .xlsm - включают два листа. Первый лист формирует 8 переменных значений (формулами) используя данные из второго листа, содержащий список - две колонки, пополнение строк списка происходит через VBА. 2) Два компьютера в одной локальной сети. 3) Excel 2010
Процесс: Две книги Excel запущены на двух компьютерах в локальной сети. Через форму VBA каждый принимает 1 значение (данные штрихкода) и записывает их в лист "Список" формируя строку из двух значений штрихкод и время добавления. Первый лист используя формулы по маскам считает количество 8-и переменным (общее количество, количество по маске1, по маске 2 и тд.). Затем эти данные отображаются в форме VBA в Label.caption.
Задача: Передать 8 сформированных значений из книги1 в книгу2 и наоборот из книги 2 в книгу1 по локальной сети. Необходимо передать данные в момент их изменения. В результате необходимо получать в реальном времени на обоих формах VBA одинаковые значения сумм 8 переменных в Label.caption. Базы остаются в каждой книге уникальными. Все усложняется тем, что данные могут поступать одновременно с промежутком менее 1 секунды. К каждому компьютеру подключено 3 сканера штрихкодов.
Сейчас все идеально работает по отдельности, но при попытке связать две книги, например средствами Power Query и добавить код обновления запроса после каждого ввода данных - даже при 8-и переменных это занимает слишком много времени, макрос упирается в процесс обновления предыдущего запроса. При использовании совместного использования книги (через 3 файл), ограничение на обновление данных в 5 секунд.
Возможно есть способ передать значения средствами VBA? Файл прикрепляю.
Сейчас создал вспомагательный файл с общим доступом, в него загружаются 8 значений и 8 забираются. Работает, но не савсем корректно. И все же используется сохранение, которое занимает время.
Для первой книги [vba]
Код
Sub Share() Dim Kniga As String Dim ITK, IOK As String
Kniga = Range("O4").Value 'путь к вспомагательной книге с общим доступом ITK = ThisWorkbook.Name IOK = Dir(Kniga) GetObject (Kniga) 'Workbooks(IOK).AcceptAllChanges Workbooks(IOK).Worksheets(1).Range("B1:B8") = Workbooks(ITK).Worksheets(1).Range("A1:A8").Value ' забрали из столбца A текущей и поместили в В share Workbooks(ITK).Worksheets(1).Range("B1:B8") = Workbooks(IOK).Worksheets(1).Range("A1:A8").Value ' забрали из столбца A share и поместили в В текущей Workbooks(IOK).Save End Sub
[/vba]
Для второй книги, необходимо изменить путь к файлу в ячейке Range("O4") сетевой адрес, и изменить порядок выгрузки данных [vba]
Код
Sub Share() Dim Kniga As String Dim ITK, IOK As String
Kniga = Range("O4").Value 'путь к вспомагательной книге с общим доступом ITK = ThisWorkbook.Name IOK = Dir(Kniga) GetObject (Kniga) 'Workbooks(IOK).AcceptAllChanges Workbooks(ITK).Worksheets(1).Range("B1:B8") = Workbooks(IOK).Worksheets(1).Range("B1:B8").Value Workbooks(IOK).Worksheets(1).Range("A1:A8") = Workbooks(ITK).Worksheets(1).Range("A1:A8").Value Workbooks(IOK).Save End Sub
[/vba]
Сейчас создал вспомагательный файл с общим доступом, в него загружаются 8 значений и 8 забираются. Работает, но не савсем корректно. И все же используется сохранение, которое занимает время.
Для первой книги [vba]
Код
Sub Share() Dim Kniga As String Dim ITK, IOK As String
Kniga = Range("O4").Value 'путь к вспомагательной книге с общим доступом ITK = ThisWorkbook.Name IOK = Dir(Kniga) GetObject (Kniga) 'Workbooks(IOK).AcceptAllChanges Workbooks(IOK).Worksheets(1).Range("B1:B8") = Workbooks(ITK).Worksheets(1).Range("A1:A8").Value ' забрали из столбца A текущей и поместили в В share Workbooks(ITK).Worksheets(1).Range("B1:B8") = Workbooks(IOK).Worksheets(1).Range("A1:A8").Value ' забрали из столбца A share и поместили в В текущей Workbooks(IOK).Save End Sub
[/vba]
Для второй книги, необходимо изменить путь к файлу в ячейке Range("O4") сетевой адрес, и изменить порядок выгрузки данных [vba]
Код
Sub Share() Dim Kniga As String Dim ITK, IOK As String
Kniga = Range("O4").Value 'путь к вспомагательной книге с общим доступом ITK = ThisWorkbook.Name IOK = Dir(Kniga) GetObject (Kniga) 'Workbooks(IOK).AcceptAllChanges Workbooks(ITK).Worksheets(1).Range("B1:B8") = Workbooks(IOK).Worksheets(1).Range("B1:B8").Value Workbooks(IOK).Worksheets(1).Range("A1:A8") = Workbooks(ITK).Worksheets(1).Range("A1:A8").Value Workbooks(IOK).Save End Sub
[/vba] который по идее должен вносить и обновлять изменения без сохранения, но он не работает. Возможно, есть способ обновления общей книги без сохранения изменений, как раньше писал это возможно решить средствами самого Excel. При использовании совместного использования можно установить интервал синхронизации данных. но он ограничен от 5 мин и более. мне необходимо выполнять синхронизацию совместно с выполнением кода.
В предыдущем посте есть закоменченный код [vba]
Код
Workbooks(IOK).AcceptAllChanges
[/vba] который по идее должен вносить и обновлять изменения без сохранения, но он не работает. Возможно, есть способ обновления общей книги без сохранения изменений, как раньше писал это возможно решить средствами самого Excel. При использовании совместного использования можно установить интервал синхронизации данных. но он ограничен от 5 мин и более. мне необходимо выполнять синхронизацию совместно с выполнением кода.gobotechnolight
Сообщение отредактировал gobotechnolight - Вторник, 15.06.2021, 13:56
В том то и вопрос как это сделать по в локальной сети на разных компах. Выше я написал код через файл посредник у которого совместное использование, но это не решение. Если есть возможность указать сетевой путь до файла. Но здесь и нужна подсказка.
Один файл открыт на одном компе второй на другом и они оба активно меняют значения в 8 ячейках. Необходимо синхронизовать эти значения в обоих файлах
В том то и вопрос как это сделать по в локальной сети на разных компах. Выше я написал код через файл посредник у которого совместное использование, но это не решение. Если есть возможность указать сетевой путь до файла. Но здесь и нужна подсказка.
Один файл открыт на одном компе второй на другом и они оба активно меняют значения в 8 ячейках. Необходимо синхронизовать эти значения в обоих файлахgobotechnolight
Сообщение отредактировал gobotechnolight - Вторник, 15.06.2021, 14:09
Возможно есть способ передать значения средствами VBA?
уже привел несколько примеров как я пытаюсь решить это средствами VBA, но у меня не получается передать данные напрямую. Прошу помощи у знатаков!gobotechnolight
Для обновленя необходимо сохранение файла посредника, в этот момент могут поступить данные со второго или тогоже компа. На каждом компе по 3 сканера штрихкодов, и иногда данные поступают совместно. сохранение замедляет процесс. нужен код обнавления совместной книги, так-как стандартными средствами обнвление происходит минимально раз в мин.
Для обновленя необходимо сохранение файла посредника, в этот момент могут поступить данные со второго или тогоже компа. На каждом компе по 3 сканера штрихкодов, и иногда данные поступают совместно. сохранение замедляет процесс. нужен код обнавления совместной книги, так-как стандартными средствами обнвление происходит минимально раз в мин.gobotechnolight
Делайте файл посредник не XLS a текстовый файл. При этом лучше 2. записываете измененя на одном ПК в один файл, читаете из него на другом , и наоборот. Данные файловые операции намного легче. Но в целом надо просто переходить от таблиц Excel к таблицам СУБД. Даже файл Access помог бы.
Делайте файл посредник не XLS a текстовый файл. При этом лучше 2. записываете измененя на одном ПК в один файл, читаете из него на другом , и наоборот. Данные файловые операции намного легче. Но в целом надо просто переходить от таблиц Excel к таблицам СУБД. Даже файл Access помог бы.bmv98rus
Замечательный Временно просто медведь , процентов на 20.