Как в Vba Excel Макросом Конвертировать Адрес из a1 в R1c1
Загрузка из Excel в 1С при помощи VBA. Ускорение 200%.
Как-то возникла у меня необходимость анализа большого отчета, который выгружался из 1С в Excel. Это был такой монструозный отчет, что при выводе терялись данные, куча условий на выводе, которые вносили ошибку. Конечно, скажете вы, проще переделать отчет, чем его проверять, но на тот момент времени не было на переделку.
Сражу же пришел на ум вариант загрузить результаты отчет из Excel в 1С и произвести сверку данных путем простой выборки.
Взялся я загружать данные, а данные это около 5000 строк и 27 столбцов. Не помню сколько у меня заняло времени на загрузку, используя вызов Excel из 1С и загрузка данных с преобразованием. Но факт в том, что в то время пока загружались данные и отлаживалась загрузка, я задумался, почему же так долго происходит загрузка.
Начал копать Excel при помощи VBA и заметил что в VBA код выполняется быстрее, чем в 1С (обход ячеек, преобразование данных) и тут меня осенило… Ну а в чем заключался мой метод, я опишу ниже. Сразу оговорюсь, что подобного метода я не встречал, если кто-то встречал подобные статьи, прошу скинуть мне ссылочку.
Для демонстрации моего метода, разработана простейшая конфигурация, ее состав один справочник и обработка, создан файл Excel c 5000 строк.
Поскольку это тонкий клиент, запись элементов справочника происходит на сервере
А вот теперь другая загрузка. Для нее нам понадобиться:
1. Написать скрипт для выгрузки данных в текстовый файл;
2. Написать код для загрузки данных из текстового файла.
Казалось бы все просто, но нет, мы не будем загружать данные из текстового файла, загрузку сделает сама 1С.
a.WriteLine («СписокЗначение.Добавить(«» + whs.Cells(rw.Row, 1).Value + «»);»)
Что он делает, создаем текстовый файл, имя его мы будем передавать из 1С.
В этом скрипте можно не только записывать текстовые данные, но и, например, такие инструкции:
Справочники.Номенклатура.НайтиПоКоду(«» + whs.Cells(rw.Row, 1).Value + «»);
После того как скрипт отлажен (все бы они такие легкие были) помещаем этот скрипт в макет (текстовый документ). В код не советую текст вставлять, замучаетесь кавычки удваивать.
Для того что бы иметь возможность добавлять модуль в проект VBAProject необходимо установить «Доверять доступ к Visual Basic Project». В подсказке написано где это сделать.
Ну и все, устанавливаем скрипт, выполняем его и получаем файл с результатом.
Далее этот результат загружаем в текстовый документ и выполняем командой Выполнить. В результате выполнения кода из файла у нас создастся СписокЗначений с именем СписокЗначение. А поскольку в коде из файла объект называется так же, 1С поместит в этот объект результат выполнения кода.
Ну вот и все , а теперь все ради чего это делалось: сравнение производительности:
Тестирование производительности первым методом загрузки.
Тестирование производительности вторым методом загрузки.
Как видно, используя второй метод загрузки, выигрыш во времени получился существенный.
© neusro , 20 13 . При копировании и републикации статьи ссылка на первоисточник обязательна.
[expert_bq id=»1570″]Если тип диаграммы, которую вы хотите создать, содержит несколько рядов данных; Рекомендуется использовать легенды, так как они помогут определить цвета и формы каждой из введенных данных. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] А теперь нужно продублировать строки, в результате чего количество строк для каждого участника лотереи будут соответствовать количеству купленных им билетов. Например, если Барбара приобрела два билета, для нее создаются две строки. Ниже показана процедура, выполняющая вставку новых строк.Excel vba перебор ячеек в диапазоне
Вторая программа предполагает, что в ячейках B12 и B13 рабочего листа записаны 2 даты. Это могут быть строки, интерпретируемые Вашим Excel как даты, например, 01.01.2001 или даты, полученные формулой, скажем, =СЕГОДНЯ()
Задание групп строк и столбцов с помощью объекта Range
Если в диапазоне указываются только имена столбцов или строк, то объект Range задает диапазон, состоящий из указанных столбцов или строк. Например, Range («А: с») задает диапазон, состоящий из столбцов А, в и с, а Range
Объект Range позволяет сочетать гибкость VBA и мощь рабочего листа Excel. Более 400 встроенных функций рабочего листа существенно упрощают и делают более наглядным программирование на VBA.
Далее приводятся наиболее часто используемые свойства и методы объекта
Возвращает значение из ячейки или в ячейки диапазона. В данном примере переменной х присваивается значение из ячейки C1 :
х = Range («C1») .Value В следующем примере в диапазон AI : В2 введена 1 :
Возвращает имя диапазона. В данном примере диапазону А1:В2 присваивается имя итоги:
Возвращает число объектов в наборе. В данном примере переменной х присваивается значение, равное числу строк диапазона AI : В2 :
Возвращает число строк текущего диапазона. Текущим является диапазон, ограниченный пустыми строками и столбцами и содержащий данный элемент. В следующем примере переменной у присваивается значение, равное числу строк в текущем диапазоне, содержащем ячейку AI :
Возвращает столбец и строку соответственно. В данном примере очищается содержимое строки и выделяется столбец с активной ячейкой:
Возвращает ширину столбцов и высоту строк диапазона соответственно
Возвращает объект comment (примечание), который связан с левым верхним углом диапазона при отображении на экране. Объект comment является элементом семейства comments. Метод AddComment, примененный к диапазону, создает новое примечание. Среди методов объекта comment отметим только метод Text, который задает текст, выводимый в примечании. Синтаксис:
.Text Text:= «Чрезвычайно важно!» & Chr(10) & «Про это никак нельзя забыть ! «
Рис. 2.1. Пример отображения примечания на рабочем листе
Возвращает объект Font (шрифт). Объект Font имеет следующие свойства:
FontStyle — СТИЛЬ, возможен Regular (обычный), Bold (ПОЛУЖИРНЫЙ), Italic(курсив), Bold italic (полужирный курсив)
strikethrough — допустимы два значения: True (буквы имеют линию по центру, как будто они перечеркнуты) и False (не имеют линии по центру)
Superscript — допустимы два значения: True (текст используется как верхний индекс) и False (не используется как верхний индекс)
Subscript — допустимы два значения: True (текст используется как нижний индекс) и False (не используется как нижний индекс)
Например, в следующем примере устанавливается для диапазона AI : в2 полужирный шрифт, красного цвета и с высотой символов 1 4 :
Возвращает формулу в формате Al. Например, следующая инструкция вводит в ячейку с2 формулу =$А$4+$А$ю:
Возвращает формулу диапазона в формате А1. В отличие от обыкновенной формулы рабочего листа, формула диапазона вводится на рабочем листе не посредством нажатия на клавишу , а с помощью комбинации клавиш ++. Следующая инструкция вводит в диапазон Е!:ЕЗ формулу :
Допустимые значения: True (формула спрятана, если рабочий лист или книга защищены) и False (в противном случае). Например, следующая инструкция скрывает формулы в столбце А: Columns («A») . FormulaHidden = True
Возвращает неанглоязычные (местные) формулы в формате А1. Например, следующая инструкция вводит в ячейку В2 формулу =СУММ(С1:С4):
[expert_bq id=»1570″]Если вы не специалист в VBA достаточно будет подсмотреть готовые макросы на просторах интернета и скопировать их в свой документ. Если же вы хотите что-то уточнить, обращайтесь ко мне![/expert_bq] Excel предлагает множество инструментов и опций, которые сделают вашу работу быстрее и проще. Одним из инструментов, с которым вы, возможно, не знакомы в этой программе, является возможность оформления динамического стола.Объекты Range и Selection. Основные объекты VBA. Язык визуального программирования приложений Visual Basic for Applications
Возможности VBA достаточно обширны. Мы привели лишь несколько примеров, однако вы можете изучить тему более детально самостоятельно, записавшись на курс «Excel Academy», просматривая обучающие видео и наши статьи.