Перейти к публикации

Макрос. Хочу создать


Рекомендованные сообщения

Решил создать макрос для сортировки спецификации.

Открыл сборку, создал спецификацию.

Нажал "Начать запись"

Выделяю спецификацию

Правая кнопка мыши - сортировка

Выбираю "Раздел", "Стандарт", "Сортировка" (такие у меня свойства)

Нажимаю "сортировка"

нажимаю "остановить запись".

Создается какой-то макрос, я его сохраняю.

Далее запускаю на выполнение - и ничего....

Вот что в макросе:

Dim swApp As Object

Dim Part As Object

Dim SelMgr As Object

Dim boolstatus As Boolean

Dim longstatus As Long, longwarnings As Long

Dim Feature As Object

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc

Set SelMgr = Part.SelectionManager

swApp.ActiveDoc.ActiveView.FrameState = 1

boolstatus = Part.Extension.SelectByID2("Детальный элемент110@Лист1", "ANNOTATIONTABLES", 0.2043425775117, -0.04811026775012, 0, False, 0, Nothing, 0)

End Sub

...

Солид 2007 и 2008

Ссылка на сообщение
Поделиться на других сайтах


Решил создать макрос для сортировки спецификации.

Открыл сборку, создал спецификацию.

Нажал "Начать запись"

Solidworks мало чего пишет в записываемый макрос. Поэтому с макросами лучше смотреть справку по API-интерфейсу. Или взять чей-нибудь пример и посмотреть как работает, подправив под свои нужды получить необходимый функционал, например, посмотреть макрос по спецификации от Леона ( <noindex>http://fsapr2000.ru/index.php?showtopic=66...iew=getlastpost</noindex> ) или у него же попросить фрагмент кода на этот случай, если совсем не хочется лазить по справке.
Ссылка на сообщение
Поделиться на других сайтах

К сожалению ответа на этот вопрос пока нету, т.к. я его уже задавал, вот тут

<noindex>http://fsapr2000.ru/index.php?showtopic=34...mp;#entry317033</noindex>

Пока получается только сортировать таблицу "обычными" методами, посмотри в интернете, там полно всяких разных алгоритмов сортировки.

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

Если интересно могу скинуть мой алгоритм сортировки, у меня там по 5 столбцам сортируется.

Ссылка на сообщение
Поделиться на других сайтах

К сожалению ответа на этот вопрос пока нету, т.к. я его уже задавал, вот тут

<noindex>http://fsapr2000.ru/index.php?showtopic=34...mp;#entry317033</noindex>

Пока получается только сортировать таблицу "обычными" методами, посмотри в интернете, там полно всяких разных алгоритмов сортировки.

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

Если интересно могу скинуть мой алгоритм сортировки, у меня там по 5 столбцам сортируется.

Да... проблемы...

Я сначала сортирую по "разделам" в свойствах "Раздел" = 1 - сборки, 2 - детали, 3 стандартные, 4 - прочие, 5 материалы, 6 - комплекты, 71 - сборки, 72,.... соответственно "переменные данные для исполнений"

потом сортировка по свойству "Стандарт". Свойство состоит из группы (болты, винты, .... шайбы) и номера ГОСТ, ОСТ для стандартных или номера документа на поставку для прочих.

И последняя сортировка по свойству "Сортировка". В это свойство копируется "Обозначение" для сборок, деталей, комплектов или "наименование" для стандартных, прочих, материалов.

В итоге все получается по ГОСТ.

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

Очень хочется кнопочку... либо автоматом при каком-либо событии, например, при событии "отобразить СП"...

Ссылка на сообщение
Поделиться на других сайтах

Да... проблемы...

Я сначала сортирую по "разделам" в свойствах "Раздел" = 1 - сборки, 2 - детали, 3 стандартные, 4 - прочие, 5 материалы, 6 - комплекты, 71 - сборки, 72,.... соответственно "переменные данные для исполнений"

потом сортировка по свойству "Стандарт". Свойство состоит из группы (болты, винты, .... шайбы) и номера ГОСТ, ОСТ для стандартных или номера документа на поставку для прочих.

И последняя сортировка по свойству "Сортировка". В это свойство копируется "Обозначение" для сборок, деталей, комплектов или "наименование" для стандартных, прочих, материалов.

В итоге все получается по ГОСТ.

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

Очень хочется кнопочку... либо автоматом при каком-либо событии, например, при событии "отобразить СП"...

А какой SW?

В SW2010-м можно использольвать таблицу СП непосредственно в сборке, думаю быстродействие (по всем входящим повысится-сортировка ИМХО будет происходить в момент открытия документа).

SW дествительно малова-то записывает в макрос(несколько обманвает), потому надо знать сам язык и его объектную модель для SW. И по чаще ползьоваться режимомом отладки (F8 для VB/VBA), контролировать какие функции с какими аргументами вызываются их значения. Примеры также почаще надо изучать в этом режиме. Т.е. надо понять логику работы программы! Иначе нам удачи не видать...

Ссылка на сообщение
Поделиться на других сайтах

Я сначала сортирую по "разделам" в свойствах "Раздел" = 1 - сборки, 2 - детали, 3 стандартные, 4 - прочие, 5 материалы, 6 - комплекты, 71 - сборки, 72,.... соответственно "переменные данные для исполнений"

потом сортировка по свойству "Стандарт". Свойство состоит из группы (болты, винты, .... шайбы) и номера ГОСТ, ОСТ для стандартных или номера документа на поставку для прочих.

И последняя сортировка по свойству "Сортировка". В это свойство копируется "Обозначение" для сборок, деталей, комплектов или "наименование" для стандартных, прочих, материалов.

В итоге все получается по ГОСТ.

Я что то не очень понял, Вы в ручную чтоли сортировку по разделам и прочему производите?

Ссылка на сообщение
Поделиться на других сайтах
  • 2 месяца спустя...

Разбираюсь с API, а точнее с методом AddCustomInfo

Работа метода

Dim instance As IModelDoc

Dim FieldName As String

Dim FieldType As String

Dim FieldValue As String

Dim value As Boolean

 

value = instance.AddCustomInfo(FieldName, FieldType, FieldValue)
Создал форму с текстбоксами

присвоил такие значения

Dim instance As IModelDoc2

Dim FieldName As String

Dim FieldType As String

Dim FieldValue As String

Dim value As Boolean

Private Sub CommandButton1_Click()

FieldName = "TextBox1.Text"

FieldType = "TextBox2.Text"

FieldValue = "TextBox3.Text"

value = instance.AddCustomInfo(FieldName, FieldType, FieldValue)

End Sub

подсвечивает value и если курсор подставить то пишет value = false

Где и как объявить AddCustomInfo?

И как вставить текущее значение во ВСЕ конфигурации? Где-то проверка должна быть?

Ссылка на сообщение
Поделиться на других сайтах

instance.AddCustomInfo(FieldName, FieldType, FieldValue)

а разве сюда надо не конкрентные значения уже подставлять??
Ссылка на сообщение
Поделиться на других сайтах

На всякий случай уточню, что перед использованием instanse его надо установить(а то по вашему коду не видно где вы это делаете)

Dim swApp As SldWorks.SldWorks

Set swApp = Application.SldWorks

Set instanse= swApp.ActiveDoc <-Вот тут вы его устанавливаете

Попробуйте пользоваться AddCustomInfo2, только там второй параметр уже integer, так что вам надо будет еще тип преобразовывать.

Хорошо бы конечно целиком на программу посмотреть, а то так тяжело говорить, где может быть ошибка.

Ссылка на сообщение
Поделиться на других сайтах

Я только только начинаю вспоминать VB, поэтому все объявления подзабыл. И, кстати, как узнать из какой библиотеки берется функция? Там где reference нужно галки ставить... В хелпе не пишут что за библиотеки.

Вот сам макрос, только начал.

Еще раз, instanse пихается в general всего проекта или куда))?

Ссылка на сообщение
Поделиться на других сайтах

Я вот тут поправил ваш макрос, только я из него выкинул работу с библиотекой, т.к. это отдельная тема.

В основном ошибка заключалась в том что вы "TextBox1.Text" - заключили в кавычки, и поэтому у вас получился просто текст, а не ссылка на текст в окне TextBox

Macro1.rar

Ссылка на сообщение
Поделиться на других сайтах

не аллё))

Работает только если ничего не вводить в текстбоксы а оставить только текст, который в компоненте прописан

Ссылка на сообщение
Поделиться на других сайтах

Кстати, еще вопрос, toolbox с элементами сильно ограничен, это максимум что можно использовать в VBA? Всяких "open file dialog" и т.п. хотел бы увидеть? Или это только для VB такие возможности?

Ссылка на сообщение
Поделиться на других сайтах

Всяких "open file dialog" и т.п. хотел бы увидеть? Или это только для VB такие возможности?

Ну почему же? В VBA SW Tools->References подключаете comdlg32.ocx (обычно в System32 для XP) в коде вызываете примерно так:

Dim commonDlg As New CommonDialog

	commonDlg.ShowOpen ' эта функция вызывает диалоговое окно открытия файла

	

	'commonDlg.ShowSave ' эта функция вызывает диалоговое окно сохранения файла

	'commonDlg.ShowColor ' эта функция вызывает диалоговое окно цвета
также компонент можно бросить и на форму.
Ссылка на сообщение
Поделиться на других сайтах

При подключении ocx и добавлении на toolbar :smile: кидаю на форму:

Дома попробовал, такая же ошибка как и в посте #13. Если ничего не вбивать нового в текстбоксы, то создает, если вбить - то вылетает.

Ссылка на сообщение
Поделиться на других сайтах

При подключении ocx и добавлении на toolbar :smile: кидаю на форму:

Дома попробовал, такая же ошибка как и в посте #13. Если ничего не вбивать нового в текстбоксы, то создает, если вбить - то вылетает.

Насчет добавления comdlg32.ocx. На XP никакой лицензии не спрашивает. У вас, похоже, или Виста или семерка. В них не работаю, сказать ничего не могу.

Теперь насчет макроса. В форме Setting, на мой взгляд, для FieldType лучше выбрать комбобох, так как этой переменной лучше иметь тип Long, потому что лучше применять функцию AddCustomInfo3 вместо AddCustomInfo

Код вашего модуля Setting

Option Explicit



Dim swApp As SldWorks.SldWorks

Dim swModel As SldWorks.ModelDoc2

Dim FieldName As String

Dim FieldType As Long

Dim FieldValue As String

Dim value As Boolean



Private Sub CommandButton1_Click()



	On Error GoTo LineError

	Dim indexType As Long

	FieldName = TextBox1.Text

	indexType = cmbType.ListIndex

	FieldValue = TextBox3.Text

	

	If Trim(FieldName) = "" Then Exit Sub

	If Trim(FieldValue) = "" Then Exit Sub

	

	Select Case indexType

		Case 0

			FieldType = swCustomInfoType_e.swCustomInfoText

		Case 1

			FieldType = swCustomInfoType_e.swCustomInfoDate

		Case 2

			FieldType = swCustomInfoType_e.swCustomInfoNumber

		Case 3

			FieldType = swCustomInfoType_e.swCustomInfoYesOrNo

		

	End Select

	

	'Желательно ввести проверку на соответствие значения в TextBox3 типу в выбранном cmbType

	'========================================================

	

	Set swApp = GetObject("", "SldWorks.Application")

	Set swModel = swApp.ActiveDoc

	

	If swModel Is Nothing Then

		swApp.SendMsgToUser ("Откройте модель или сборку")

		Exit Sub

	End If



	If swModel.GetType <> swDocASSEMBLY And swModel.GetType <> swDocPART Then

		swApp.SendMsgToUser ("Откройте модель или сборку")

		Exit Sub

	End If



	value = swModel.AddCustomInfo3("", FieldName, FieldType, FieldValue) ' в закладку Custom

	

	Exit Sub

	

LineError:

	

End Sub



Private Sub UserForm_Initialize()

	cmbType.AddItem ("Text")

	cmbType.AddItem ("Date")

	cmbType.AddItem ("Number")

	cmbType.AddItem ("Yes or no")

	

	cmbType.ListIndex = 0



End Sub

cmbType - это комбобокс, вместо TextBox2

Ссылка на сообщение
Поделиться на других сайтах

Вот он чё михалыч..)) Тип то должен быть только из списка!! Спасибо.

Ааа, а тип поля может быть variant ну или типа того?

И если форм куча, где и как в VBA объявить какую первую грузить?

Ссылка на сообщение
Поделиться на других сайтах

И, перефразирую старый вопрос, могу ли я создать Собственный тип в файле solidworks?

Ссылка на сообщение
Поделиться на других сайтах

И если форм куча, где и как в VBA объявить какую первую грузить?

В модуле.

Ааа, а тип поля может быть variant ну или типа того?

А чем вам текстовый тип не нравится, в него и дату и да\нет записать можно, просто оно будет восприниматься как текст и надо будет при дальнейшем использовании преобразовывать тип. Так же можно поступить и для использования "Своего" типа данных.
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...