Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Содержание

Введение

В рамках практического изучения ООП написал набор классов, реализующих построение древовидной структуры любого уровня сложности для VBA. Как вы знаете, сам VBA кроме массивов и коллекций (объект ) в готовом виде ничего более не имеет. Пределом мечтаний на данный момент является внешний компонент из библиотеки Microsoft Scripting Runtime. В виду этакой скудности приходится городить конструкты типа с элементами в виде других , либо изобретать свои классы. Чем я и занялся. Теперь, если вам потребуется выстроить дерево, то вы можете воспользоваться моим готовым решением.

Прошу прощения у новичков — статья не предназначена для начинающих, да вам это и не надо. Поэтому всякие мелочи разжёвывать не буду — нет времени, а те, кому это может пригодиться, способны разобраться по краткому описанию. Относительно сложные или тонкие моменты прокомментированы.

Работа с извещениями об изменениях

Еще одним новшеством приложения SWPlus стало появление модуля RevEditor. Благодаря ему пользователи смогут заполнить графы с изменениями в штампе чертежа или спецификации и заполнить извещения об изменениях по ГОСТ 2.503-2013 (рис. 12).

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 12 – Внешний вид диалогового окна RevEditor

Для ПИ и ИИ разработан удобный интерфейс (рис. 13) с выбором из списков параметров извещений об изменениях (причина, указание о заделе и прочее). Выберите нужные параметры в форме извещения и будет создан документ, в котором останется только добавить графическое изображение извещения. Все изменения хранятся в документе чертежа. ИИ или ПИ создаются в виде чертежа SOLIDWORKS, который связан с чертежом, на который они выпущены.

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 13 – Внешний вид диалогового окна для ввода параметров извещений об изменениях

В этой статье мы собрали существенные отличия в двух продуктах c одинаковым названием SWPlus и теперь Вам решать продолжать использовать макросы или присоединиться к пользователям, которые используют в работе новое приложение SWPlus и двигаются вперед, получая от приложения новые возможности. Мы со своей стороны обещаем Вам поддержку и с удовольствием поделимся с Вами опытом работы в SWPlus и в SOLIDWORKS.

Node: методы класса

Метод Описание
Параметры: Name Возвращает: Node Создаёт дочерний узел для того экземпляра класса, у которого вызывается. Параметр обязательный, опциональный. Если установлен режим уникальности имён узла (смотри свойство объекта ) и такое имя уже есть, то вместо создания узла метод просто вернёт ссылку на уже имеющейся узел (указанный при этом на процесс не влияет).
Параметры: нетВозвращает: ничего Удаляет узел, чей экземпляр вызвал данный метод. Если у узла есть потомки, то они также рекурсивно все удаляются, начиная от самых дальних и заканчивая текущим.
Параметры: нетВозвращает: Boolean Отвечает на вопрос: есть ли дети у текущего узла.
Параметры: NameВозвращает: Boolean Отвечает на вопрос: есть ли у проверяемого узла дети с указанным именем. Именно дети, а не потомки вообще.
Параметры: NameВозвращает: Node Возвращает дочерний узел по имени, если таковой, конечно, есть. В противном случае возвращается Nothing.
Параметры: VariantВозвращает: ничего Прикрепляет к узлу некую полезную нагрузку, которую вы определяете сами. Это может быть какой-то простой тип или объект. В последнем случае вы, разумеется, должны использовать оператор Set.
Параметры: нетВозвращает: Boolean Отвечает на вопрос: есть ли у узла полезная нагрузка.
Параметры: нетВозвращает: Variant Возвращает полезную нагрузку узла, если она есть. Вы сами должны анализировать, что вам возвращается и как это принять.
Параметры: CountВозвращает: Node Возвращает предка относительно вызвавшего экземпляра. С count=1 вы получите своего родителя, с count=2 получите родителя своего родителя и так далее. Если вы проскочите корень, указав слишком большой count, то в любом случае будет возвращен корневой узел.
Параметры: NodesSetВозвращает: Nodes Возвращает коллекцию узлов в виде нового экземпляра , которая содержит потомков текущего узла. NodesSet принимает значения: и . Как нетрудно догадаться, параметр регулирует вопрос включения в конечную выборку текущего узла.
Параметры: NodesSetВозвращает: Nodes Возвращает коллекцию узлов в виде нового экземпляра , которая содержит всех предков текущего узла. принимает значения: , , или . Параметр регулирует вопрос включения в конечную выборку корневого узла и текущего узла. Есть любые комбинации.
Параметры: OldParentВозвращает: нет Текущий узел усыновляет всех детей указанного узла. Если нарушаются условия, о которых уже говорилось при обсуждении свойства , то генерируется исключение.
Параметры: SectionВозвращает: нет Отладочная печать на лист Debug в указанную секцию листа. Полезный метод, чтобы понимать, что происходит. По идее его надо бы убрать, но я решил оставить для удобства.

Изменения в заполнении свойств

3.1. Изменения в части интерфейса

Изменения интерфейса затронули все модули SWPlus. Остановимся на модуле MProp и его диалоговом окне.

Заполнение свойств документов стало интуитивно понятно: каждой ячейке основной надписи – свое свойство. А если нажать левой кнопкой мыши на полях Лит., Масса или Материал, то появляются дополнительные диалоговые окна, и пользователь может выбрать из списка литеру документа или массу модели с единицами измерения, или материал из базы данных материала, а также ввести значение сортамента или указать параметры заготовки.

На рис. 1 показан внешний вид диалогового окна MProp для заполнения свойств деталей, на рис. 2 — для стандартных изделий.

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 1 – Заполнение свойств модели детали

 Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 2 – Заполнение свойств стандартных изделий

3.2 Изменение в способе заполнения свойств

В приложении SWPlus при открытой сборке можно заполнять свойства компонентов сборки, не открывая их в отдельном окне. Это позволяет помимо уменьшения времени на открытие деталей заполнить свойства компонента сборки в конкретной сборке.

3.4 Изменения в свойствах детали-заготовки

В приложении SWPlus свойства детали-заготовки не нужно больше дублировать вручную, они зачитываются из файла заготовки (рис. 3).

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 3 – Заполнение свойств заготовки

3.5 Заполнение всех полей основной надписи

Как в модели, так в чертеже и спецификации теперь можно заполнить все поля в основной надписи. По умолчанию диалоговое окно MProp для чертежа выглядит так как показано на рис. 4.

Популярные статьи  Отличия преобразователей частоты от устройств плавного пуска двигателей

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 4 – Заполнение свойств чертежа

А чтобы заполнить оставшиеся поля пользователю достаточно нажать кнопку «Дополнительно» и ввести значения в открывшиеся поля (рис. 5).

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 5 – Заполнение всех возможных полей основной надписи

3.6 Заполнение свойств чертежа и спецификации в отдельности

В Приложении SWPlus появилась возможность заполнять поля основной надписи спецификации и чертежа в отдельности. Достаточно запустить MProp для чертежа, выбрать «Чертеж» или «Спецификацию» в разделе Документ и заполнить свойства.

3.7 Вставка подписей в основную надпись документа

Для удобства выпуска документов в электронном виде в новом приложении SWPlus предусмотрена возможность заполнения поля «Подп.» основной надписи картинкой с подписью. На рис. 6 показан пример подписи конструктора, разработавшего чертеж.

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 6 – Вид штампа основной надписи с подписью конструктора

Запись макроса в Excel

Теперь давайте запишем очень простой макрос, который выбирает ячейку и вводит в нее текст, например “Excel”.

Вот шаги для записи такого макроса:

  1. Перейдите на вкладку “Разработчик”.
  2. В группе “Код” нажмите кнопку “Запись макроса”. Откроется одноименное диалоговое окно.
  3. В диалоговом окне “Запись макроса” введите имя для своего макроса, например “ВводТекста”. Есть несколько условий именования, которые необходимо соблюдать при назначении макроса. Например, вы не можете использовать пробелы между ними. Обычно я предпочитаю сохранять имена макросов как одно слово, с разными частями с заглавным первым алфавитом. Вы также можете использовать подчеркивание для разделения двух слов – например, “Ввод_текста”.
  4. Если вы хотите, то можете задать сочетание клавиш. В этом случае мы будем использовать ярлык Ctrl + Shift + N. Помните, что сочетание, которое вы указываете, будет отменять любые существующие горячие клавиши в вашей книге. Например, если вы назначили сочетание Ctrl + S, вы не сможете использовать это для сохранения рабочей книги (вместо этого, каждый раз, когда вы его используете, он выполняет макрос).
  5. В поле “Сохранить в” убедитесь, что выбрана опция “Эта книга”. Этот шаг гарантирует, что макрос является частью рабочей книги. Он будет там, когда вы сохраните его и снова откроете, или даже если вы поделитесь файлом с кем-то.
  6. Введите описание при необходимости. Обычно я этого не делаю, но если у вас много макросов, лучше указать, чтобы в будущем не забыть что делает макрос.
  7. Нажмите “ОК”. Как только вы нажмете OK, Excel начнет записывать ваши действия. Вы можете увидеть кнопку “Остановить запись” на вкладке “Разработчик”, которая указывает, что выполняется запить макроса.
  8. Выберите ячейку A2.
  9. Введите текст “Excel” (или вы можете использовать свое имя).
  10. Нажмите клавишу Enter. Вы попадете на ячейку A3.
  11. Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.

Поздравляем! Вы только что записали свой первый макрос в Excel. Хотя макрос не делает ничего полезного, но он поможет нам понять как работает макрорекордер в Excel.

Теперь давайте рассмотрим код который записал макрорекодер. Выполните следующие действия, чтобы открыть редактор кода:

  1. Удалите текст в ячейке A2. Это нужно, чтобы проверить будет ли макрос вставлять текст в ячейку A2 или нет.
  2. Выберите любую ячейку – кроме A2. Это нужно проверить, выбирает ли макрос ячейку A2 или нет.
  3. Перейдите на вкладку “Разработчик”.
  4. В группе “Код” нажмите кнопку “Макросы”.
  5. В диалоговом окне “Макрос” щелкните макрос “ВводТекста”.
  6. Нажмите кнопку “Выполнить”.

Вы увидите, что как только вы нажмете кнопку “Выполнить”, текст “Excel” будет вставлен в ячейку A2 и выбрана ячейка A3. Это происходит за миллисекунды. Но на самом деле макрос последовательно выполнил записанные действия.

Альтернативный вариант открытия файла

 Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.Open fname, local:=True Set ws = wb.Item(1).ActiveSheet 

При открытии файла можно использовать доп.параметры (приведу некоторые):

UpdateLinks – обновлять или нет внешние ссылки при открытии файла;ReadOnly – открытие в режиме только для чтения;Format – используемый при открытии разделитель (1 – символ tab, 2 – запятые, 3 – пробелы, 4 – точка с запятой, 5 – без разделителя, 6 – пользовательский разделитель, заданный в Delimiter);Delimiter – пользовательский разделитель (в случае, если Format = 6);Origin – тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);Local – использование в Excel языка такого же, как в открываемом файле.

Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.

 ws.Cells(1, 1).Value = "Test" ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта ws.Cells(1, 1).HorizontalAlignment = xlCenter ' 

Приехали…

К моему глубокому огорчению, данное решение работает нестабильно. При запуске файла, если нажать кнопку «Создать дерево» на листе Data, то вы скорее всего получите ошибку Type mismatch или произойдёт крах Excel. При этом я почти на 99% уверен, что ошибок в коде нет. Если войти в IDE и начать делать ничего не значащие изменения, перекомпиляции, то код начинает работать. Всё это происходит скорее всего из-за ошибок в реализации ООП в MS Office. Если кто-то сможет мне указать на работающие способы заставить классы работать без существенной переделки архитектуры классов (например, я категорически не хочу отказываться от интерфейсных классов), то буду очень признателен, но что-то мне подсказывает, что этого не случится.

Node: свойства класса

Наше дерево представляет собой некое множество узлов, объединенных друг с другом отношениями родитель – потомки. То есть каждый узел имеет ОДНОГО родителя и может иметь потомков (одного или больше), а может и не иметь. Любой узел имеет следующие свойства:

Свойство Описание
Тип: StringДоступ: Read / Write Текстовое имя узла. Нет никаких требований уникальности имени по структуре. Корень имеет стандартное имя «_ROOT_». Любые узлы могут быть переименованы (поле доступно на запись), если есть такая необходимость.
Тип: LongДоступ: Read / Write Числовой уникальный идентификатор. При создании нового узла он автоматически получает уникальный номер по принципу счётчика. Корневой узел имеет номер 0. Его первый потомок имеет номер 1 и так далее. Однако, вы можете при создании указать конкретный, желаемый вами номер, в этом случае создаваемый узел получит его в качестве . В любой момент вы можете присвоить узла другой номер. Если номер, который вы присваиваете уже используется другим узлом, то они обменяются номерами. Нельзя присвоить узлу, отличному от корня, номер 0. Однако корню можно присвоить любой другой номер и, если тот занят, то ноль перейдёт к тому узлу. То есть и тут фактически полная свобода.
Тип: LongДоступ: Read only Поколение узла, считая от корня. Корень всегда имеет =0. Его прямые дети имеют =1, их дети 2 и так далее.
Тип: NodesДоступ: Read only Данное свойство представляет собой коллекцию узлов – потомков данного узла – в виде класса (подробнее о нём – ниже)
Тип: NodeДоступ: Read / Write Ссылка на родителя узла. У корня содержит Nothing. Путем изменения данного свойства можно перемещать узлы (разумеется со всеми их потомками). Однако, есть 2 условия: 1) перемещаемый узел и приёмный родитель должны принадлежать к одному экземпляру класса ; 2) приёмный родитель не может быть потомком перемещаемого.
Тип: NodeДоступ: Read only Ссылка на корень. У корня содержит Nothing.
Тип: PerfectTreeДоступ: Read only Ссылка на экземпляр родительского класса
Тип: BooleanДоступ: Read only Для корня — true, у остальных — false.
Тип: LongДоступ: Read only Число потомков во всех последующих поколениях.
Популярные статьи  Развитие ветроэнергетики в мире

Чтобы лучше уяснить себе назначение основных свойств узла, поизучайте эту иллюстрацию:

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Первая программа на VBA Excel

Добавляем на стандартный модуль шаблон процедуры – строки ее начала и завершения, между которыми мы и будем писать свою первую программу (процедуру, подпрограмму).

  1. Откройте стандартный модуль двойным кликом по его ссылке в проводнике. Поместите в него курсор и нажмите кнопку «Procedure…» во вкладке «Insert» главного меню. Та же ссылка будет доступна при нажатии на вторую кнопку после значка Excel на панели инструментов.

В результате откроется окно добавления шаблона процедуры (Sub).

  1. Наберите в поле «Name» имя процедуры: «Primer1», или скопируйте его отсюда и вставьте в поле «Name». Нажмите кнопку «OK», чтобы добавить в модуль первую и последнюю строки процедуры.

Имя процедуры может быть написано как на латинице, так и на кириллице, может содержать цифры и знак подчеркивания. Оно обязательно должно начинаться с буквы и не содержать пробелы, вместо которых следует использовать знак подчеркивания.

  1. Вставьте внутрь шаблона процедуры следующую строку: .

Функция MsgBox выводит информационное сообщение с указанным текстом. В нашем примере – это «Привет».

  1. Проверьте, что курсор находится внутри процедуры, и запустите ее, нажав клавишу «F5». А также, запустить процедуру на выполнение можно, нажав на треугольник (на изображении под пунктом меню «Debug») или на кнопку «Run Sub/UserForm» во вкладке «Run» главного меню редактора VBA Excel.

Если вы увидели такое сообщение, как на изображении, то, поздравляю – вы написали свою первую программу!

Некоторые замечания

Как грамотно прятать внутреннюю кухню ваших объектов?

Одна из самых полезных и неочевидных вещей, которой я обучился во время создания данных классов, — это способ сокрытия от пользователя нюансов внутренней реализации ваших объектов и защите их внутренних структур.

Например, возьмём такое свойство класса , как . Если вы сделаете так:

То через некоторое время поймёте, что:

  1. У вас нет защиты от дурака. Кто угодно сможет присвоить неправильное значение свойству и сломает всю гармонию вашей структуры, которую, вы вообще-то говоря, обязаны защищать, если пишите компоненты для других. Если же вы будете в обработчике Let городить проверку присваиваемого значения на корректность, то получится слишком сложно и, в конце концов, медленно.

  2. Осознав вышесказанное, вы захотите закрыть свойство на запись из пользовательских модулей. Ведь действительно, при создании нового узла его вычисляется из родительского +1 и у пользователя нет никаких практических причин писать в это свойство. Но как это сделать? Вы в начале наивно используете директиву Friend, но она вам никак не поможет с этой проблемой.

  3. Тогда вы уберёте обработчик Property Let вообще. И через 5 минут столкнётесь с проблемой, что непонятно, как инициировать поле при создании нового экземпляра объекта . «C хрена ли?» — скажете вы. Объясняю: у вас есть родительский . Находясь в нём, вы вызываете метод , в котором создаёте новый экземпляр класса . Но вы не можете передать туда информацию. Вы можете менять только Public или Friend свойства, открытые на запись! А мы как раз хотим от них избавиться. WTF?

Я нигде не нашёл источников информации, где об этом чётко и ясно было бы рассказано. Я спросил на форумах. И нашёлся хороший человек (спасибо KSV), который набросал пример, но я этот пример осознавал крайне долго. И вот этот механизм я вам намерен разжевать подробно.

Интерфейс класса

первое, что необходимо сделать, это объявить класс-предок или класс-интерфейс. В нём мы объявляем пустое публичное свойство Let — то есть именно то свойство, которое мы хотели бы скрыть в реализации класса Node.

Далее при объявлении наших основных классов, в частности Node, мы должны сослаться на наш интерфейс:

Ну и сам механизм, ради которого всё это затевалось:

Почему мы имеем право присвоить переменной значение ? Не смотря на то, что это переменные разных классов, класс — потомок класса , поэтому мы можем переменной родительского класса присвоить ссылку на экземпляр класса-потомка. Наоборот нельзя.

Далее мы помним, что свойство в классе объявлено публичным, поэтому мы легко меняем его, но поскульку в у нас экземпляр класса , то фактически мы меняем свойство переменной . Вот и всё.

Если вы полезете в код моих классов, то именно этого примера вы не найдёте, но обнаружите массу свойств и методов, которые объявлены в , и, используя описанный выше механизм,

Резюмирую: мы смогли избавиться от метода Let Level на уровне класса . Теперь никто не сможет нарушить целостность вашей структуры за счёт присвоения -у неправильного значения, а вы избавлены от утомительных проверок. Таким образом всё, что мы хотим спрятать пробрасывается через класс-предок

Пользователи не будут создавать экземпляры , поэтому нам наплевать, что там «намусорено», нам важно, что всё, что мы хотели скрыть или закрыть на запись, скрыто и закрыто

Конвееры

Обратите внимание, как удобно использовать коллекции. Дело в том, что многие методы класса Nodes возвращают тоже экземпляры класса Nodes, поэтому вы можете формировать конвеер из методов и получить в конце то, что вам нужно:

Стиль «умной» таблицы

Присвоение стиля таблице (изменение стиля) осуществляется с помощью свойства TableStyle объекта ListObjects:

1

ActiveSheet.ListObjects(“МояТаблица1”).TableStyle=“TableStyleMedium15”

Свойство TableStyle может принимать следующие значения:

  • TableStyleLight (светлый) с индексом от 1 до 21 (в Excel 2016);
  • TableStyleMedium (средний) с индексом от 1 до 28 (в Excel 2016);
  • TableStyleDark (темный) с индексом от 1 до 11 (в Excel 2016).

Например, TableStyleLight5, TableStyleMedium24, TableStyleDark8.

Чтобы отменить стиль таблицы в коде VBA, необходимо свойству TableStyle присвоить пустую строку:

1

ActiveSheet.ListObjects(“МояТаблица1”).TableStyle=“”

Этому коду соответствует выбор в разделе «Конструктор» на ленте инструментов Excel самого первого значка стилей в разделе «Светлый».

Изменения в создании спецификаций и ведомостей покупных изделий

6.1 Режим редактирования спецификации

В приложении SWPlus пользователю доступно редактирование значений ячеек спецификации без нарушения связи со свойствами моделей, а также сжатие текста, изменение очередности строк, добавление новых строк и редактирование значений позиций. В макросах такой возможности не было.

После создания спецификации и нажатия в диалоговом окне SpecEditor кнопки «Редактировать» (рис. 9) появится диалоговое окно «Редактирование», внешний вид которого будет изменяться в зависимости от выбранной пользователем ячейки (рис. 10). Измените в этом окне параметры ячейки и сохраните их.

Популярные статьи  Генератор постоянного тока: устройство, принцип работы, классификация

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 9 – Внешний вид диалогового окна SpecEditor

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 10 – Редактирование параметров ячейки

6.2 Настройка SWPlus на использование любых свойств, принятых на предприятии

Какой бы набор свойств не был принят на предприятии приложение SWPlus можно настроить на их использование при заполнении свойств моделей и чертежей и при создании отчетов. Если нужные SWPlus свойства будут отсутствовать в моделях пользователей, то они будут дописаны в свойства автоматически.

Введено несколько режимов работы: использование существующих свойств, конвертация свойств в новые или использование только свойств приложения SWPlus.

Для удобного перехода с макросов на новый SWPlus предусмотрен предустановленный профиль, синхронизирующий свойства моделей. Также существует профиль для моделей, которые были созданы по шаблонам, поставляемых SOLIDWORKS Corp и можно настроить собственный профиль, используя свойства моделей, принятые на предприятии.

6.3 Обработка моделей Toolbox

Теперь при создании спецификаций и ведомостей покупных на изделия, которые включают компоненты Toolbox заполняются наименования и обозначения ДНП даже если деталь Toolbox не имеет собственных свойств. Для достижения этого достаточно расположить модели Toolbox в папке Toolbox\CopiedParts, а наименование детали будет взято из имени конфигурации. Специально вносить свойства в модели Toolbox не нужно.

6.4 Создание спецификаций на основе расчетной спецификации SOLIDWORKS PDM

В новом приложении SWPlus c подключением настройки «Работа с SOLIDWORKS PDM» пользователь получает возможность добавить на лист чертежа расчетную спецификацию, сформированную на изделие из SOLIDWORKS PDM или ведомость покупных изделий. В настройках SOLIDWORKS PDM нужно только создать набор столбцов для новой спецификации и дать ему понятное программе имя. Тоже самое нужно сделать и для ведомости покупных изделий.

6.5 Новый тип отчета – групповая спецификация на 3 исполнения

В приложении SWPlus появился новый бланк – групповая спецификация на 3 исполнения по ГОСТ 2.113. В 2021 году запланирован выход еще нескольких бланков для отчетов.

6.6 Изменения в сортировке

В приложении SWPlus увеличена скорость сортировки спецификации и устранена проблема с «утечкой памяти» при создании спецификаций для больших сборок в SOLIDWORKS 2020, SOLIDWORKS 2021.

6.7 Работа с разделом Комплекты в спецификации

Чтобы ускорить заполнение разделов Документация и Комплекты в приложении SWPlus реализовано диалоговое окно с преднастроенным списком документов на изделие, можно указать их формат, в том числе и для многолистовых документов (рис. 11).

Создаём опросный лист в eplan на основе макроса с использованием объектов-заполнителей

Рис. 11 – Заполнение разделов Документация и Комплекты

6.8 Заполнение полей Формат и Примечания в спецификации

Значения для полей спецификации «Формат» и «Примечание» в приложении SWPlus зачитываются из свойств документов. А поле «Примечание» состоит из комбинации собственных свойств модели, свойств чертежа на модель и свойства модели как компонента сборки. В макросах такая возможность отсутствовала.

Создание сводных таблиц макросом

Источник информации для сводных таблиц всегда один и тот же – база данных. Набор данных образующих базу для обработки в Excel может быть не только на листах рабочей книги, а также и во внешних источниках.

Для описания способа создания сводных таблиц средствами процедур VBA будет использоваться таблица, которая содержит данные по месяцам о оборотах семи магазинов фирмы за последние несколько лет деятельности.

Тестовая база для примера состоит из сгруппированных данных в 21 строке. Благодаря использованию сводных таблиц можно в читабельный вид презентовать изменение данных и извлечь соответственные результаты анализа.

Список данных по каждому месяцу определенного года содержит информацию о размере оборотов в отдельных магазинах фирмы. В таблице включен режим автофильтра, чтобы упростить на сколько возможно предварительный визуальный анализ данных.

С помощью макроса VBA создадим из этого большого объема данных читабельный и удобный для визуального анализа отчет в виде сводной таблице. Нам нужна сводная таблица отчета, в котором без труда можно прочитать интересующую нас информацию без визуального анализа сотен строк в исходной базе данных.

В данном примере создание сводной таблицы VBA-макросом будет достаточно простым. Простота решения будет достигнута за счет симуляции использования подобных параметров и действий, которые предоставляет к распоряжению мастер сводных таблиц в Excel. Используя экземпляр объекта PivotCaches запишем настройки своей сводной таблицы присвоив ей определенное имя. Это позволит потом непосредственно ссылаться на сводную таблицу в любой части кода. Для создания сводной таблицы используя макрос будем использовать метод PivotTableWizard. На этом же шаге будем использовать возможности объекта PivotFields, в котором определим структуру сводной таблицы с учетом исходных данных источника.

Написание кода макросов в Excel всегда начинается с открытия VBA-редактора (ALT+F11): «РАЗРАБОТЧИК»-«Код»-«Visual Basic».

Затем создадим модуль где будет храниться исходный код. Для этого выберите инструмент в редакторе VBA: «Insert»-«Module». В появившемся окне модуля введите следующий VBA-код макроса:

Теперь достаточно лишь запустить макрос выбрав инструмент: «РАЗРАБОТЧИК»-«Код»-«Макросы»-«CreateTableM»-«Выполнить»:

В результате будет автоматически сгенерированная сводная таблица с помощью макроса.

Создание «умной» таблицы

Создается «умная» таблица Excel с помощью следующего кода:

1
2

ActiveSheet.ListObjects.Add(xlSrcRange,Range(“$A$1:$L$15”),,xlNo).Name_

=“МояТаблица1”

В данном примере:

ActiveSheet – лист, на котором создается таблица, может быть любой лист рабочей книги Excel.

Range(“$A$1:$L$15”) – диапазон, который преобразуется в таблицу. Можно использовать и такую форму: Range(Cells(1, 1), Cells(15, 12)), где индексы строк и столбцов можно заменить переменными.

xlNo – указывает, что первая строка выбранного диапазона не содержит заголовки столбцов (граф) будущей таблицы, и их необходимо добавить. В этом случае будет добавлена дополнительная строка с наименованиями столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д., которые в дальнейшем можно переименовать (количество строк в таблице, включая строку заголовков, получится на одну больше, чем в указанном диапазоне). Если в диапазоне уже содержатся заголовки столбцов будущей таблицы, то следует указать вместо xlNo значение xlYes. В этом случае первая строка указанного диапазона будет преобразована в строку заголовков, а если она будет не заполнена, то добавятся названия столбцов по умолчанию: Столбец1, Столбец2, Столбец3 и т.д. (количество строк в таблице, включая строку заголовков, будет то же, что и в указанном диапазоне).

МояТаблица1 – имя, присваиваемое создаваемой таблице. Имя должно быть без пробелов: при указании в коде VBA названия таблицы с пробелами, во время его выполнения Excel заменит пробелы знаками подчеркивания (по крайней мере, так происходит в Excel 2016).

Таблица будет создана со стилем по умолчанию (TableStyleMedium2 в Excel 2016).

Рейтинг
( Пока оценок нет )
Денис Серебряков/ автор статьи
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: