Доброй ночи! Просьба помочь с решением задачи, есть активная книга из которой будет запускаться макрос при ее сохранении макрос должен: 1) скопировать все данные со второй до последней заполненной строки с листа "данные" активной книги 2) скопировать дату с листа "взять дату" из фиксированной ячейки 3) открыть файл по определенному пути в скрытом режиме 4) определить последнюю заполненную строку 5) вставить скопированные значения ниже последней заполненной строки (с возможностью выборки скопированных ранее столбцов), например столбцы 1,2,8,10 и последним столбцом записать по всем строкам скопированную дату 6) сохранить и закрыть данную книгу
Заранее большое спасибо, готов обсудить вознаграждение если потребуется
Доброй ночи! Просьба помочь с решением задачи, есть активная книга из которой будет запускаться макрос при ее сохранении макрос должен: 1) скопировать все данные со второй до последней заполненной строки с листа "данные" активной книги 2) скопировать дату с листа "взять дату" из фиксированной ячейки 3) открыть файл по определенному пути в скрытом режиме 4) определить последнюю заполненную строку 5) вставить скопированные значения ниже последней заполненной строки (с возможностью выборки скопированных ранее столбцов), например столбцы 1,2,8,10 и последним столбцом записать по всем строкам скопированную дату 6) сохранить и закрыть данную книгу
Заранее большое спасибо, готов обсудить вознаграждение если потребуетсяXenus91
с возможностью выборки скопированных ранее столбцов
В этой фразе мне непонятен смысл слова "ранее". Это можно понимать по разному, или копировать только те столбцы, заголовки которых совпадают с заголовками целевого файла, или из них опять что то нужно выбирать, или вообще что то другое? Поясню как я вас понял - макрос в вашем файле с исходными данными запускается по событию Workbook_BeforeClose, он открывает файл с уже накопленными архивными данными по нужным столбцам, добавляет новые и всё сохраняется и закрывается. Всё это вполне реализуемо, или как то не так?
с возможностью выборки скопированных ранее столбцов
В этой фразе мне непонятен смысл слова "ранее". Это можно понимать по разному, или копировать только те столбцы, заголовки которых совпадают с заголовками целевого файла, или из них опять что то нужно выбирать, или вообще что то другое? Поясню как я вас понял - макрос в вашем файле с исходными данными запускается по событию Workbook_BeforeClose, он открывает файл с уже накопленными архивными данными по нужным столбцам, добавляет новые и всё сохраняется и закрывается. Всё это вполне реализуемо, или как то не так? i691198
i691198, речь идёт про скопированный диапазон из активной книги, но при переносе в архивный файл именно в коде хочется иметь возможность перестроить порядок столбцов из исходного файла Т.е допустим в исходной таблице 5 столбцов, а выводить в архивный файл нужно всего 3: в порядке 4, 1, 2 Запуск макроса по события AfterSave Открывает архивный файл в скрытом режиме Уточнение по пути к архивному файлу, он лежит в библиотеке sharepoint,соответственно ссылка идёт в формате «http://hdhhdh/архив.xlsx»
i691198, речь идёт про скопированный диапазон из активной книги, но при переносе в архивный файл именно в коде хочется иметь возможность перестроить порядок столбцов из исходного файла Т.е допустим в исходной таблице 5 столбцов, а выводить в архивный файл нужно всего 3: в порядке 4, 1, 2 Запуск макроса по события AfterSave Открывает архивный файл в скрытом режиме Уточнение по пути к архивному файлу, он лежит в библиотеке sharepoint,соответственно ссылка идёт в формате «http://hdhhdh/архив.xlsx»Xenus91
Xenus91, С sharepoint я никогда не работал, а так покажу, как на вашем примере эту задачу можно решить на локальном компе. Для удобства отладки изменил наши невыразительные исходные данные на более понятные. На мой вопрос какие столбцы нужно копировать внятного ответа вы не дали, (в программировании ответ "допустим" не имеет смысла, нужна конкретика), то предлагаю такой вариант. Есть исходный файл, в котором при открытии (или закрытии) очищается рабочее пространство. В процессе сеанса работы рабочее пространство забивается данными (надеюсь без пустых ячеек, хотя бы в первом столбце). При закрытии этого файла по событию AfterSave нужные данные добавляются в файл "Архив". Пока вижу такой вариант - копируются значения из тех столбцов, заголовки которых соответствуют заголовкам целевого файла. То есть у вас уже предварительно должен быть создан файл с именем "Архив", где в первой строке указаны нужные заголовки из исходного файла в любом порядке. Количество столбцов в исходном файле тоже может быть любым. На событие макрос пока не стал подключать, пока попробуйте обычным запуском, может быть будут вопросы. P.S. К сожалению я не знаю уровень ваших знаний VBA, так что не обижайтесь, если скажу что то совсем банальное для вас. В моём примере макроса файл "Архив" привязан к корню диска D:. Так что нужно будет в строке макроса Set Nf = oFl.Workbooks.Open("D:\Архив.xlsx") прописать нужный путь, или перенести этот файл в корневую папку диска D. P.P.S. Не учел один момент - у форума есть одна неприятная вещь - уродовать имена прилагаемых файлов, так что переименуйте файл "arkhiv" в "Архив".
Xenus91, С sharepoint я никогда не работал, а так покажу, как на вашем примере эту задачу можно решить на локальном компе. Для удобства отладки изменил наши невыразительные исходные данные на более понятные. На мой вопрос какие столбцы нужно копировать внятного ответа вы не дали, (в программировании ответ "допустим" не имеет смысла, нужна конкретика), то предлагаю такой вариант. Есть исходный файл, в котором при открытии (или закрытии) очищается рабочее пространство. В процессе сеанса работы рабочее пространство забивается данными (надеюсь без пустых ячеек, хотя бы в первом столбце). При закрытии этого файла по событию AfterSave нужные данные добавляются в файл "Архив". Пока вижу такой вариант - копируются значения из тех столбцов, заголовки которых соответствуют заголовкам целевого файла. То есть у вас уже предварительно должен быть создан файл с именем "Архив", где в первой строке указаны нужные заголовки из исходного файла в любом порядке. Количество столбцов в исходном файле тоже может быть любым. На событие макрос пока не стал подключать, пока попробуйте обычным запуском, может быть будут вопросы. P.S. К сожалению я не знаю уровень ваших знаний VBA, так что не обижайтесь, если скажу что то совсем банальное для вас. В моём примере макроса файл "Архив" привязан к корню диска D:. Так что нужно будет в строке макроса Set Nf = oFl.Workbooks.Open("D:\Архив.xlsx") прописать нужный путь, или перенести этот файл в корневую папку диска D. P.P.S. Не учел один момент - у форума есть одна неприятная вещь - уродовать имена прилагаемых файлов, так что переименуйте файл "arkhiv" в "Архив".i691198
i691198, с локальным файлом все хорошо, но при попытке дать ссылку на документ в библиотеке шарпоинт формата «http://hdhhdh/архив.xlsx» файл не сохраняется подразумеваю что сам файл архива при открытии открывается по умолчанию в режиме чтения, пробовал добавить игнорирование Readonly не помогло...
i691198, с локальным файлом все хорошо, но при попытке дать ссылку на документ в библиотеке шарпоинт формата «http://hdhhdh/архив.xlsx» файл не сохраняется подразумеваю что сам файл архива при открытии открывается по умолчанию в режиме чтения, пробовал добавить игнорирование Readonly не помогло...Xenus91
Покопался, нашел решение здесь добавил в код после метода Workbooks.Open [vba]
Код
ActiveWorkbook.LockServerFile
[/vba] теперь все ок, i691198, единственный момент в исходном файле данные забираются с умной таблицы, в которой есть пустые строки, как их можно порезать?
Покопался, нашел решение здесь добавил в код после метода Workbooks.Open [vba]
Код
ActiveWorkbook.LockServerFile
[/vba] теперь все ок, i691198, единственный момент в исходном файле данные забираются с умной таблицы, в которой есть пустые строки, как их можно порезать?Xenus91
Сообщение отредактировал Xenus91 - Понедельник, 27.02.2023, 03:09
Xenus91, Целочисленные переменные в коде объявлены типом Integer, максимально допустимое значение 32767. Вероятно какие то значения выходят за этот предел. Нужно в строке Dim CL1%, CL2%, CR1%, CR2%, i%, j% заменить знак "%" на "&", то есть задать тип Long.
Xenus91, Целочисленные переменные в коде объявлены типом Integer, максимально допустимое значение 32767. Вероятно какие то значения выходят за этот предел. Нужно в строке Dim CL1%, CL2%, CR1%, CR2%, i%, j% заменить знак "%" на "&", то есть задать тип Long.i691198
Сообщение отредактировал i691198 - Воскресенье, 05.03.2023, 10:10