Возможно ли управлять линией вставленной из автофигур на лист, программно длина линии будет зависит от условия применения необходимого бланка пример: заполнить простое Свидетельство о поверке или Свидетельство на эталон
Средство измерения ___________________________________
над линией ложится текст который должен быть подчеркнут, простое подчеркивание не подходит, только линией [moder]Вы бы примерчик приложили, так проще будет.
Возможно ли управлять линией вставленной из автофигур на лист, программно длина линии будет зависит от условия применения необходимого бланка пример: заполнить простое Свидетельство о поверке или Свидетельство на эталон
Средство измерения ___________________________________
над линией ложится текст который должен быть подчеркнут, простое подчеркивание не подходит, только линией [moder]Вы бы примерчик приложили, так проще будет.combat
Сообщение отредактировал _Boroda_ - Понедельник, 19.10.2015, 22:26
пример приложил лист "РСИ" заполняется посредством формы как бланк "Средство измерения" задача усложняется существует еще и бланк "Эталон" отличия строка 15 средство измерения по условию меняется на "Эталон (средство измерения)" + текст строка 37 поменяется на "с применением эталонов единиц величин" = текст
наверное будет понятно, линия должна меняться....
пример приложил лист "РСИ" заполняется посредством формы как бланк "Средство измерения" задача усложняется существует еще и бланк "Эталон" отличия строка 15 средство измерения по условию меняется на "Эталон (средство измерения)" + текст строка 37 поменяется на "с применением эталонов единиц величин" = текст
наверное будет понятно, линия должна меняться....combat
управлять линией вставленной из автофигур на лист, программно длина линии будет зависит от условия применения необходимого бланка
Записал макрорекордером:[vba]
Код
Sub combat() ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 49.5, 45, 288, 45.75). _ Select ' добавляем линию Selection.ShapeRange.ScaleWidth 1.3962264151, msoFalse, msoScaleFromTopLeft 'удлинняем её End Sub
управлять линией вставленной из автофигур на лист, программно длина линии будет зависит от условия применения необходимого бланка
Записал макрорекордером:[vba]
Код
Sub combat() ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 49.5, 45, 288, 45.75). _ Select ' добавляем линию Selection.ShapeRange.ScaleWidth 1.3962264151, msoFalse, msoScaleFromTopLeft 'удлинняем её End Sub
Предлагаете нам догадаться о причине происходящего телепатически? Первая и единственная попытка (потом буду банить за нарушение правил): Вы не выделяете линию при попытке её изменения
Предлагаете нам догадаться о причине происходящего телепатически? Первая и единственная попытка (потом буду банить за нарушение правил): Вы не выделяете линию при попытке её измененияSerge_007
Линия стала меняться (её отступ слева) по условию, но не происходит замена слов по переменной TIP которая объявлена Dim TIP As String только после повторного выделения прибора из списка в общем ерунда какая то, как сделать правильно не хватает опыта и знаний и с удалением линии, что то, как то не так, удалится если она выделена, может ей имя дать? а как а ведь еще одну строку ниже так же надо будет менять
вроде правила сейчас не нарушил ни какие, или за баните?
[vba]
Код
Private Sub OptionButton1_Change() If OptionButton1.Value = True Then TIP = "Средство измерения " Selection.Delete ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 106, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха Else: TIP = "Эталон (средство измерения) " Selection.Delete ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха End If End Sub
Private Sub ListBox1_Change()
If F = 1 Then Exit Sub roww = Arrr(UserForm2.ListBox1.ListIndex) Worksheets("РСИ").Cells(15, 1) = TIP & Lbl.Caption ' ВОТ ЗДЕСЬ ПРОБЛЕМА
[/vba]
мне кажется уже, что не по тому пути надо было идти здесь, но мыслей пока нет...
Линия стала меняться (её отступ слева) по условию, но не происходит замена слов по переменной TIP которая объявлена Dim TIP As String только после повторного выделения прибора из списка в общем ерунда какая то, как сделать правильно не хватает опыта и знаний и с удалением линии, что то, как то не так, удалится если она выделена, может ей имя дать? а как а ведь еще одну строку ниже так же надо будет менять
вроде правила сейчас не нарушил ни какие, или за баните?
[vba]
Код
Private Sub OptionButton1_Change() If OptionButton1.Value = True Then TIP = "Средство измерения " Selection.Delete ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 106, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха Else: TIP = "Эталон (средство измерения) " Selection.Delete ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха End If End Sub
Private Sub ListBox1_Change()
If F = 1 Then Exit Sub roww = Arrr(UserForm2.ListBox1.ListIndex) Worksheets("РСИ").Cells(15, 1) = TIP & Lbl.Caption ' ВОТ ЗДЕСЬ ПРОБЛЕМА
[/vba]
мне кажется уже, что не по тому пути надо было идти здесь, но мыслей пока нет...combat
combat, Добрый день! Всё же, не стоит задавая вопрос, в качестве примера всегда прилагать целый проект, по которому другим людям сложно ориентироваться, это отнимает у них время, поэтому Вам не спешат отвечать). Лучше создать отдельный упрощённый пример. В Вашем случае, я добавил переменную Top1 в которую записывал положение созданного Shape по оси ординат. Потом пробегаясь циклом по всем объектам Shape в активной книге удаляю тот объект, у которого координата совпадёт с ранее записанным. Было бы проще, если можно было бы задать переменной Shape1 объект (ссылку на объект) на прямую, но я, честно говоря, в этом не силён и пока не нашёл такого способа, поэтому пока только вариант с перебором циклом. [vba]
Код
Private Sub OptionButton1_Change() If OptionButton1.Value = True Then TIP = "Средство измерения " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 106, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха Top1 = Selection.Top Else: TIP = "Эталон (средство измерения) " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха Top1 = Selection.Top End If End Sub
но не происходит замена слов по переменной TIP которая объявлена Dim TIP As String только после повторного выделения прибора из списка в общем ерунда какая то
тут я не понял всё-таки сути проблемы, у меня вродебы всё корректно работает.
combat, Добрый день! Всё же, не стоит задавая вопрос, в качестве примера всегда прилагать целый проект, по которому другим людям сложно ориентироваться, это отнимает у них время, поэтому Вам не спешат отвечать). Лучше создать отдельный упрощённый пример. В Вашем случае, я добавил переменную Top1 в которую записывал положение созданного Shape по оси ординат. Потом пробегаясь циклом по всем объектам Shape в активной книге удаляю тот объект, у которого координата совпадёт с ранее записанным. Было бы проще, если можно было бы задать переменной Shape1 объект (ссылку на объект) на прямую, но я, честно говоря, в этом не силён и пока не нашёл такого способа, поэтому пока только вариант с перебором циклом. [vba]
Код
Private Sub OptionButton1_Change() If OptionButton1.Value = True Then TIP = "Средство измерения " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 106, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха Top1 = Selection.Top Else: TIP = "Эталон (средство измерения) " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха Top1 = Selection.Top End If End Sub
но не происходит замена слов по переменной TIP которая объявлена Dim TIP As String только после повторного выделения прибора из списка в общем ерунда какая то
тут я не понял всё-таки сути проблемы, у меня вродебы всё корректно работает.Roman777
combat, Только щас понял, что макрос не будет работать нормально, поскольку переменная Top1 будет хранить информацию, если не ошибаюсь, только пока открыта Userform2. Тогда проще записывать в какой-нибудь лист информацию о положении созданного Shape1.top. Или прописывать его численно, если оно всегда будет одно и то же).
combat, Только щас понял, что макрос не будет работать нормально, поскольку переменная Top1 будет хранить информацию, если не ошибаюсь, только пока открыта Userform2. Тогда проще записывать в какой-нибудь лист информацию о положении созданного Shape1.top. Или прописывать его численно, если оно всегда будет одно и то же).Roman777
То что, поправили, код, еще раз большое спасибо, я уже подумывал, что надо делать отдельный лист для "Эталона"
процедура завязана на OptionButton1_Change(), нет реакции если клацается OptionButton2 сначала - выбирается "Эталон ..." вот здесь происходит ерунда линия не рисуется, заглавия строки нет, при выборе прибора из списка, название отображается без "Эталон..." но если клацнуть OptionButton1 а потом OptionButton2, все отображается все как надо, т.е событие не запускается..., и это у Вас также должно быть просто не по пробывали это
прописал через лайбел значение Top1 всегда 213
То что, поправили, код, еще раз большое спасибо, я уже подумывал, что надо делать отдельный лист для "Эталона"
процедура завязана на OptionButton1_Change(), нет реакции если клацается OptionButton2 сначала - выбирается "Эталон ..." вот здесь происходит ерунда линия не рисуется, заглавия строки нет, при выборе прибора из списка, название отображается без "Эталон..." но если клацнуть OptionButton1 а потом OptionButton2, все отображается все как надо, т.е событие не запускается..., и это у Вас также должно быть просто не по пробывали это
прописал через лайбел значение Top1 всегда 213combat
Сообщение отредактировал combat - Среда, 21.10.2015, 20:57
как прописать Top2 и Shape2. добавил еще изменяемую строку по условию
[vba]
Код
Private Sub OptionButton1_Change() If OptionButton1.Value = True Then TIP = "Средство измерения " ETL = "с применением эталонов: " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 106, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 120, 453, 496, 453).Select ' Top1 = Selection.Top
Else: TIP = "Эталон (средство измерения) " ETL = "с применением эталонов единиц величин: " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select ' ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 175, 453, 496, 453).Select ' Top1 = Selection.Top Label71.Caption = Top1 End If End Sub
[/vba]
в следующей процедуре [vba]
Код
Worksheets("РСИ").Cells(37, 1) = ETL & T1.Text '
[/vba]
как прописать Top2 и Shape2. добавил еще изменяемую строку по условию
[vba]
Код
Private Sub OptionButton1_Change() If OptionButton1.Value = True Then TIP = "Средство измерения " ETL = "с применением эталонов: " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 106, 213, 496, 213).Select ' отступ, начало от верха, длина, конец от верха ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 120, 453, 496, 453).Select ' Top1 = Selection.Top
Else: TIP = "Эталон (средство измерения) " ETL = "с применением эталонов единиц величин: " For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select ' ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 175, 453, 496, 453).Select ' Top1 = Selection.Top Label71.Caption = Top1 End If End Sub
[/vba] Но поскольку у Вас положение высоты уже есть в выражении "ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select " Поэтому лучше сделать вообще по-другому:
[vba]
Код
Private Sub OptionButton1_Change() Top1 = 213 Top2 = 453 If OptionButton1.Value = True Then TIP = "Средство измерения " toRight1 = 106 toRight2 = 120 Call ChangShapeLine1 Else: TIP = "Эталон (средство измерения) " toRight1 = 140 toRight2 = 175 Call ChangShapeLine1 End If End Sub
Private Sub OptionButton2_Change() Top1 = 213 Top2 = 453 If OptionButton2.Value = False Then TIP = "Средство измерения " toRight1 = 106 toRight2 = 120 Call ChangShapeLine1 Else: TIP = "Эталон (средство измерения) " toRight1 = 140 toRight2 = 175 Call ChangShapeLine1 End If End Sub
' отдельная процедура для повторяющегося кода (вызываем его в нужном место по команде call) Private Sub ChangShapeLine1() For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Or Top2 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, toRight1, Top1, 496, Top1).Select ' отступ, начало от верха, длина, конец от верха ActiveSheet.Shapes.AddConnector(msoConnectorStraight, toRight2, Top2, 496, Top2).Select ' отступ, начало от верха, длина, конец от верха End Sub
[/vba]
Я в отдельную процедуру выделил повторяющийся код, чтобы не писать его по несколько раз. И добавил тоже самое для события OptionButton2_Change(), чтобы линия менялась при выделении сначала Button2.
combat, если вы хотели делать по типу запоминания положения линии в переменные Top1 и Top2 правильно было бы так: [vba]
[/vba] Но поскольку у Вас положение высоты уже есть в выражении "ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select " Поэтому лучше сделать вообще по-другому:
[vba]
Код
Private Sub OptionButton1_Change() Top1 = 213 Top2 = 453 If OptionButton1.Value = True Then TIP = "Средство измерения " toRight1 = 106 toRight2 = 120 Call ChangShapeLine1 Else: TIP = "Эталон (средство измерения) " toRight1 = 140 toRight2 = 175 Call ChangShapeLine1 End If End Sub
Private Sub OptionButton2_Change() Top1 = 213 Top2 = 453 If OptionButton2.Value = False Then TIP = "Средство измерения " toRight1 = 106 toRight2 = 120 Call ChangShapeLine1 Else: TIP = "Эталон (средство измерения) " toRight1 = 140 toRight2 = 175 Call ChangShapeLine1 End If End Sub
' отдельная процедура для повторяющегося кода (вызываем его в нужном место по команде call) Private Sub ChangShapeLine1() For Each Shape1 In ActiveSheet.Shapes If Top1 = Shape1.Top Or Top2 = Shape1.Top Then Shape1.Delete End If Next Shape1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, toRight1, Top1, 496, Top1).Select ' отступ, начало от верха, длина, конец от верха ActiveSheet.Shapes.AddConnector(msoConnectorStraight, toRight2, Top2, 496, Top2).Select ' отступ, начало от верха, длина, конец от верха End Sub
[/vba]
Я в отдельную процедуру выделил повторяющийся код, чтобы не писать его по несколько раз. И добавил тоже самое для события OptionButton2_Change(), чтобы линия менялась при выделении сначала Button2.Roman777