Donnii

Macro_Присвоение для 1 переменной n-значений

6 posts in this topic

Добрый день, помогите пожалуйста разобрать  и сделать макрос.

Макрос и профиль в 2д ниже. Макрос был скачан и изменен.

1 ошибка я так понимаю в Private Sub UserForm_Activate() - он не должен повторяться

2 курьез это в  Part.ClearSelection2 True
                        Part.DeleteAllRelations

Т.е. каждый раз он удаляет все значения всех переменных, возможно ли обойти это как то при помощи Part.Recordset... или как то иначе

3. стоит ли задавать саму переменную к примеру Dim D As String?

Сам макрос:

 

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Private Sub ComboBox1_Change()
End Sub

Private Sub ComboBox2_Change()
End Sub

Private Sub ComboBox3_Change()
End Sub

Private Sub CommandButton1_Click()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Part.ClearSelection2 True
Part.DeleteAllRelations
Part.AddRelation """D""= " & ComboBox1.Value
End Sub

Private Sub CommandButton2_Click()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Part.ClearSelection2 True
Part.DeleteAllRelations
Part.AddRelation """A""= " & ComboBox2.Value
End Sub

Private Sub CommandButton3_Click()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Part.ClearSelection2 True
Part.DeleteAllRelations
Part.AddRelation """B""= " & ComboBox3.Value
End Sub

Private Sub Label1_Click()
End Sub

Private Sub Label2_Click()
End Sub

Private Sub Label3_Click()
End Sub
'1=D
Private Sub UserForm_Initialize()
Me!ComboBox1.AddItem 253.2
Me!ComboBox1.AddItem 304
Me!ComboBox1.AddItem 329.4
End Sub

'2=A
Private Sub UserForm_Activate()
Me!ComboBox2.AddItem 76
Me!ComboBox2.AddItem 89
Me!ComboBox2.AddItem 101.5
Me!ComboBox2.AddItem 114.5
Me!ComboBox2.AddItem 127
End Sub

'3= B
Private Sub UserForm_Activate()
Me!ComboBox3.AddItem 10
Me!ComboBox3.AddItem 11
Me!ComboBox3.AddItem 12
End Sub

 

Заранее спасибо!

 

 

macric.rar

Share this post


Link to post
Share on other sites


ID: 2   Posted (edited)

1 ошибка я так понимаю в Private Sub UserForm_Activate() - он не должен повторяться

Объединить оба в один исключив строчки закрытия первого и началом второго.

 

2 курьез это в Part.ClearSelection2 True

Это снимает все выделения.

 

Part.DeleteAllRelations Т.е. каждый раз он удаляет все значения всех переменных, возможно ли обойти это как то при помощи Part.Recordset... или как то иначе

Ну если удаление не требуется, то удалить эту строчку или закомментить поставив одиночную кавычку в начале строки.

Если требуется удаление некоторых, то вероятно использовать DeleteRelation из SketchRelationManager.

Edited by Kelny
1 person likes this

Share this post


Link to post
Share on other sites

Объединить оба в один исключив строчки закрытия первого и началом второго.

 

Это снимает все выделения.

 

Ну если удаление не требуется, то удалить эту строчку или закомментить поставив одиночную кавычку в начале строки.

Если требуется удаление некоторых, то вероятно использовать DeleteRelation из SketchRelationManager.

Спасибо, на счет 1 пункта, исправил..

На счет второго c DeleteRelation нужна помощь в верху я  добавил:

 

Dim RelMgr As SketchRelationManager

Dim mySketch As Sketch

 

Private Sub CommandButton1_Click()

Set swApp = Application.SldWorks

'ниже

Set Part = swApp.ActiveDoc

Part.ClearSelection2 True

Set RelMgr = mySketch.RelationManager

RelMgr.DeleteRelation """D""= "

Part.AddRelation """D""= " & ComboBox1.Value

End Sub

Share this post


Link to post
Share on other sites
Как добавить
 для полноты понимания, я б всё же указывал ссылки на справку на интерфейсы, методы, свойства. Есть много разных мест, где есть Remark, который обязателен к прочтению перед применением.
1 person likes this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • MiLloeDelo
       Попробуйте все варианты в ShopMill , прмямоугольняа цаппфа или караман , можете менять направление траектории во внутрь и с наружу .     а если это не прямоугольник? ......покажите и уточните точно что если не прямоугольник , телепатических способностей у многих отсутствуют на этом форуме . Давай логические вопросы с подкрепленными точным фактами !
    • MiLloeDelo
      KISSsoft  не подходит ?  https://www.youtube.com/watch?v=d6cEjNk8ZAY    
    • FCLM
      Люди добрые, помогите разобраться в скрипте, буду благодарен любому комменту, совершенно не с кем поговорить на эту тему =(((    global mom_cycle_spindle_axis mom_sys_work_plane_change
         global traverse_axis1 traverse_axis2 mom_motion_event mom_machine_mode
         global mom_pos mom_prev_pos mom_from_pos mom_last_pos mom_sys_home_pos
         global mom_sys_tool_change_pos
         global spindle_first rapid_spindle_inhibit rapid_traverse_inhibit    if { ![info exists mom_from_pos($mom_cycle_spindle_axis)] &&\
               [info exists mom_sys_home_pos($mom_cycle_spindle_axis)] } {       set mom_from_pos(0) $mom_sys_home_pos(0)
            set mom_from_pos(1) $mom_sys_home_pos(1)
            set mom_from_pos(2) $mom_sys_home_pos(2)    } elseif { ![info exists mom_sys_home_pos($mom_cycle_spindle_axis)] &&\
                     [info exists mom_from_pos($mom_cycle_spindle_axis)] } {       set mom_sys_home_pos(0) $mom_from_pos(0)
            set mom_sys_home_pos(1) $mom_from_pos(1)
            set mom_sys_home_pos(2) $mom_from_pos(2)    } elseif { ![info exists mom_sys_home_pos($mom_cycle_spindle_axis)] &&\
                    ![info exists mom_from_pos($mom_cycle_spindle_axis)] } {       set mom_from_pos(0) 0.0 ; set mom_sys_home_pos(0) 0.0
            set mom_from_pos(1) 0.0 ; set mom_sys_home_pos(1) 0.0
            set mom_from_pos(2) 0.0 ; set mom_sys_home_pos(2) 0.0
         } Что имменно непонятно:
      1. вот этот фрагмент:
       { ![info exists mom_from_pos($mom_cycle_spindle_axis)] &&\  [info exists mom_sys_home_pos($mom_cycle_spindle_axis)] } 
       На сколько я понял порядок чтения примерно следующий: если условие [info exists mom_from_pos($mom_cycle_spindle_axis)] не выполняется а условие [info exists mom_sys_home_pos($mom_cycle_spindle_axis)] } выполняется то тогда мы присваиваем значения переменным. А если первое условие выполняется вместе со вторым то тогда мы пропускаем присвоение переменных. Или другими словами 
      если оба условия после обработки первого оператором ! (лог отрицание) равны нулю или единице то тогда мы выполняем присвоение значений переменным а если они не равны между собой то мы идём к elseif.     2. Не понятен формат записи [info exists mom_from_pos($mom_cycle_spindle_axis)], вроде бы как после оператора info exists должен следовать аргумент в данном случае mom_from_pos а тут дополнительно ещё один аргумент запилили причём без пробела и в 
      скобках в итоге мы имеем [info exists mom_sys_home_pos($mom_cycle_spindle_axis)].   3. При присваивании значений переменным также странный формат записи например выше объявляется переменная mom_from_pos, при присваивании ей значения она уже превращается в mom_from_pos(0), а значение ей присваивается из переменной mom_sys_home_pos(0) 
      которая выше объявлялась как mom_sys_home_pos.   4. Знак \ после оператора && означает простой перенос строки после объявления оператора?   5. В описании указано: info exists varName Возвращает 1, если переменная varName существует в текущем контексте как локальная или как глобальная переменная. В противном случае возвращает 0. Что понимается под понятием текущий контекст? Не он ли указан в скобках и тогда строка [info exists mom_from_pos($mom_cycle_spindle_axis)] расшифровывается как если значение переменной mom_from_pos равняется значению переменной mom_cycle_spindle_axis то тогда в квадратных скобках мы имеем "1" в противном случае "0"? Но в описании переменных они как то с друг дружкой не очень вяжутся mom_cycle_spindle_axis - это вроде как рабочая плоскость, а mom_from_pos это координаты исходной точки?
    • Ander
      Вытащите начальную точку из угла. (Вы сможете в ж-кодах пройти контур из угла? Вот и у шопа крыша едет)
    • konstantin2112@inbox.ru
      Ели кому интересно, то проблема оказалась в том что надо было указывать -360+360, тогда все корректно заработало, я просто этого не делал, чтобы удобнее было через код следить, а его стандартное поведение при аксис лимит виолейшен это просмотр достижения предела и возвращение к нулю, от нуля он вернуться не мог.   
    • pechkin624
      Как сменить язык?
    • Isten21
      Благодарю вас за столь скорый ответ, но к подобному результату я приходил используя поверхностное тело (после сдвига по траектории и ограничивающей плоскости), проблема после этого разделения - сложные кромки, которые имеют детали после раздела, прошу прощения за плохое качество изображения, в развертке получается боковая грань в виде кривой. Действия над разверткой не дают результата в согнутой детали как я понимаю, хотя было бы хорошо :( Фаски тем паче не сработают, я пытался взять даже эскиз по развертке с устраивающей меня части, а именно на 2 фото видно какой(что бы потом вручную согнуть), но начиная с ним работать там находится куча неисправимых ошибок, средств упрощения сплайнов я в Инвенторе не нашел, в Солиде много интересного функционала, типа функции сплющить (разварачивающей грани), потом можно упростить сплайны, но я плоховато понимаю, как потом согнуть развертку (
    • Ветерок
      Это и в шестом случается. Я чуть выше писал про такой баг.
    • AlexK76
      Видел. В шестом тоже получилось, а вот в четвертом... Хотя все закладки присутствуют, но не работают :(
    • Ветерок
      Перестань орать. Сними палец с клавиши Caps Lock.