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

Сделай свою работу в Solidworks эффективнее


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

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

я пишу код:

 

Dim boolstatus As Boolean
Dim lErrors As Integer
Dim lWarnings As Integer
Dim instance As IModelDocExtension
Dim Version As Integer
Dim Options As Integer
Dim ExportData As Object

..........................................

boolstatus = instance.SaveAs(oNameView, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings)

 

получаю это - post-22221-0-25158800-1479113931.png

 

где затык?

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


где затык?
Если это весь ваш код, то много чего не хватает.
Ссылка на сообщение
Поделиться на других сайтах

где затык?

 

Ну вероятно вот этого не хватает

Dim boolstatus As Boolean

Dim lErrors As Integer

Dim lWarnings As Integer

Dim instance As IModelDocExtension

Dim Version As Integer

Dim Options As Integer

Dim ExportData As Object

..........................................

Set App = Application.SldWorks

Set instance = App.ActiveDoc

boolstatus = instance.SaveAs(oNameView, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, lErrors, lWarnings)

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

камрады, это все там есть

имя файла тоже задано

ошибка именно в этой строке

 

может надо присвоить какие-то значения переменным lErrors, lWarnings?

или это необязательно?

или что-то еще?

Изменено пользователем ttiot
Ссылка на сообщение
Поделиться на других сайтах

изначально код был таким:

---------------------------------------

Sub ShowDialog()
 
Erclose = 0
TestLbl = 1
NullMass = 0
 
Dim boolstatus As Boolean
 
Set swApp = CreateObject("SldWorks.Application")
Set oDoc = swApp.ActiveDoc
FileTyp = oDoc.GetType
If FileTyp = swDocDRAWING Then
If oDoc.GetPathName = "" Then
 
SheetFormat
Dim oNameView
oNameView = oDoc.GetTitle
 
Dim tmpNameF
Dim intNameF
 
    intNameF = InStr(1, oNameView, "-")
        If intNameF <> 0 Then
            tmpNameF = Left(oNameView, intNameF - 2)
        End If
 
oNameView = tmpNameF & oSizeFormatTemp
 
boolstatus = oDoc.SaveAs(oNameView)
 
oNameView = ""
'Else
'oDoc.Save
'End If
'Lerror:
'Exit Sub
End If
'If Erclose = 0 Then
'oDoc.Save
End If
TestDoc
End Sub

----------------------------------------------------
на закомментированные строки не обращайте внимание
отрабатывает, но диалоговое окно сохранения файла не появляется и файл не сохраняется
Ссылка на сообщение
Поделиться на других сайтах

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

если тебе вот прям вот такое вот вындоусовское диалоговое окошко сохранения файла

af21b106964c67daba805c7188374f3f.png

и при этом всенепременно на VBA, тогда копай в сторону элемента ActiveX - Microsoft Common Dialog Control. что и как с этим элементом делать можно глянуть тут:

http://vbzero.narod.ru/chapter1/page_15.htm

https://msdn.microsoft.com/en-us/library/aa259317(v=vs.60).aspx

https://msdn.microsoft.com/ru-ru/library/256tssz7(v=vs.90).aspx

https://www.microsoft.com/en-us/download/details.aspx?id=10019

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

если тебе вот прям вот такое вот вындоусовское диалоговое окошко сохранения файла

 

и при этом всенепременно на VBA, тогда копай в сторону элемента ActiveX - Microsoft Common Dialog Control. что и как с этим элементом делать можно глянуть тут:

http://vbzero.narod.ru/chapter1/page_15.htm

https://msdn.microsoft.com/en-us/library/aa259317(v=vs.60).aspx

https://msdn.microsoft.com/ru-ru/library/256tssz7(v=vs.90).aspx

https://www.microsoft.com/en-us/download/details.aspx?id=10019

 

спасибо, но мне не нужен виндовский проводник

когда я вместо:

boolstatus = oDoc.SaveAs(oNameView)

пишу:

oDoc.Save

появляется это окно

post-22221-0-10041600-1479119503.png

с названием файла, соответствующим размещенной на листе модели

мне нужно это же окно, но со своим, другим названием файла

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

по-моему вот это:

мне не нужен виндовский проводник
 

противоречит вот этому:

мне нужно это же окно

 

это окошко появляется потому что чертеж не сохранен. в API SOLIDWORKS такие диалоговые окна не предусмотрены.

Ссылка на сообщение
Поделиться на других сайтах
с названием файла, соответствующим размещенной на листе модели мне нужно это же окно, но со своим, другим названием файла
Поменяйте имя (заголовок) окна и будет нужное имя в появляющемся окне: 

...

oDoc.SetTitle2 oNameView

oDoc.Save

...

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

Поменяйте имя (заголовок) окна и будет нужное имя в появляющемся окне: 

...

oDoc.SetTitle2 oNameView

oDoc.Save

...

спасибо, именно то, что надо

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

Во вложении макрос для быстрого создания в сборке новой детали.   В два клика создаёт в сборке виртуальную деталь с сопряжением по исходным точкам (выровнено по осям). Там же задаётся имя новой детали. Третьим кликом можно отменить виртуализацию (сохранив в каталоге с самой сборкой) либо сделать деталь свободной от сопряжений.   Подключать стандартно (main.main)

Исправил ошибки в макросе для создания новой детали "NewPart2Asm".

Кому он показался интересным - пристёгиваю:

 

Куда-то отвалился свежий файл. Выкидываю заново: NewPart2Asm_v2.rar

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

У меня вопрос про материалы. 

Есть макрос, переписывающий свойства пользователя материала в свойства детали.

Вопрос: как можно автоматом запускать этот макрос после назначения нового материала?

Сейчас я жму кнопку макроса.

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

А можно проще: сравнивать во время перестроения имена материалов, и если изменилось, то переназначить.

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

А можно поподробнее как это сделать? Просто в справке есть пример, как написано в модели выбирается эскиз в дереве и запускается макрос (иконка обозначенная иконка имеется), запускается процедура CreateSampleFeature, но функция не создаётся и останавливается с ошибкой 91 на строке (в самом низу):

boolstatus = feat.MakeSubFeature(selFeat)

 

Текст примера из справки:


'Create Macro Feature Subfeature Example (VBA)

'This example shows how to create a macro feature subfeature.

 

'------------------------------------------------

'

' Preconditions: Model document is open and a sketch is selected.

'

' Postconditions: The sketch becomes a subfeature of the newly

'                 created macro feature named EmptyFeature.

'

' NOTE: A bitmap named FeatureIcon.bmp for the macro feature must exist.

'

'-------------------------------------------------

'Macro feature Rebuild routine

Function swmRebuild(varApp As Variant, varDoc As Variant, varFeat As Variant) As Variant

    Dim App As SldWorks.SldWorks

    Dim Doc As SldWorks.ModelDoc2

    Dim feat As SldWorks.Feature

    Dim FeatData As SldWorks.MacroFeatureData

    Dim Rebuild As Boolean

    

    Set App = varApp

    Set Doc = varDoc

    Set feat = varFeat

    

    'MsgBox "Rebuild called"

    

    Rebuild = True

    'If an error occurs

    'Rebuild = "Error message"

End Function

 

'Macro feature Edit definition routine

Function swmEditDefinition(varApp As Variant, varDoc As Variant, varFeat As Variant) As Variant

    Dim App As SldWorks.SldWorks

    Dim Doc As SldWorks.ModelDoc2

    Dim feat As SldWorks.Feature

    Dim FeatData As SldWorks.MacroFeatureData

    

    Set App = varApp

    Set Doc = varDoc

    Set feat = varFeat

    

    MsgBox "Edit Definition called"

    

    Set FeatData = varFeat.GetDefinition

    varFeat.ModifyDefinition FeatData, varDoc, Nothing

    EditDefinition = True

End Function

 

'Macro feature Security routine

Function swmSecurity(varApp As Variant, varDoc As Variant, varFeat As Variant) As Variant

    Dim App As SldWorks.SldWorks

    Dim Doc As SldWorks.ModelDoc2

    Dim feat As SldWorks.Feature

    Dim FeatData As SldWorks.MacroFeatureData

    

    Set App = varApp

    Set Doc = varDoc

    Set feat = varFeat

    

    swmSecutity = SwConst.swMacroFeatureSecurityOptions_e.swMacroFeatureSecurityByDefault

End Function

 

'Base routine to create the macro feature

Sub CreateSampleFeature()

    Dim swApp As SldWorks.SldWorks

    Dim Doc As SldWorks.ModelDoc2

    Dim feat As Feature

    Dim SelMan As SelectionMgr

    

    Set swApp = Application.SldWorks

    Set Doc = swApp.ActiveDoc

    Set SelMan = Doc.SelectionManager

    

    Dim ThisFile As String

    Dim Methods(8) As String

    Dim Names As Variant

    Dim Types As Variant

    Dim Values As Variant

    Dim vEditBodies As Variant

    Dim options As Long

    Dim dimTypes As Variant

    Dim dimValue As Variant

    Dim icons(2) As String

    

    'Define the routines to call

    ThisFile = swApp.GetCurrentMacroPathName

    Methods(0) = ThisFile: Methods(1) = "FeatureModule": Methods(2) = "swmRebuild"

    Methods(3) = ThisFile: Methods(4) = "FeatureModule": Methods(5) = "swmEditDefinition"

    Methods(6) = "": Methods(7) = "": Methods(8) = ""  'A security routine is optional

    

    Dim pathname As String

    pathname = swApp.GetCurrentMacroPathFolder

    icons(0) = pathname + "\FeatureIcon.bmp"

    icons(1) = pathname + "\FeatureIcon.bmp"

    icons(2) = pathname + "\FeatureIcon.bmp"

    

    Names = Empty

    Types = Empty

    Values = Empty

    

    options = swMacroFeatureByDefault

    

    Dim selFeat As Feature

    Dim swFeatMgr As SldWorks.FeatureManager

    Set selFeat = SelMan.GetSelectedObject(1)

    Set swFeatMgr = Doc.FeatureManager

 

    Set feat = swFeatMgr.InsertMacroFeature3("EmptyFeature", "", (Methods), Names, Types, Values, dimTypes, dimValue, vEditBodies, (icons), options)

    

    Dim boolstatus As Boolean

    boolstatus = feat.MakeSubFeature(selFeat)

End Sub

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах

@@Kelny, так как это связано именно с VBA (ибо в дерево (невизуально) можно запихнуть только макрос) то в этом направлении я никогда не работал. С этим мог бы помочь Shvg  :smile: 

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

О, есть же макро. Как раз с такой фичей CenterOfGravity

Изменено пользователем streamdown
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

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




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