Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Длина линии на листе - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Длина линии на листе (Макросы/Sub)
Длина линии на листе
combat Дата: Понедельник, 19.10.2015, 21:55 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Возможно ли управлять линией вставленной из автофигур на лист, программно
длина линии будет зависит от условия применения необходимого бланка
пример: заполнить простое Свидетельство о поверке или Свидетельство на эталон

Средство измерения ___________________________________

Эталон (средство измерения) ___________________________

над линией ложится текст который должен быть подчеркнут, простое подчеркивание не подходит, только линией
[moder]Вы бы примерчик приложили, так проще будет.


Сообщение отредактировал _Boroda_ - Понедельник, 19.10.2015, 22:26
 
Ответить
СообщениеВозможно ли управлять линией вставленной из автофигур на лист, программно
длина линии будет зависит от условия применения необходимого бланка
пример: заполнить простое Свидетельство о поверке или Свидетельство на эталон

Средство измерения ___________________________________

Эталон (средство измерения) ___________________________

над линией ложится текст который должен быть подчеркнут, простое подчеркивание не подходит, только линией
[moder]Вы бы примерчик приложили, так проще будет.

Автор - combat
Дата добавления - 19.10.2015 в 21:55
combat Дата: Понедельник, 19.10.2015, 22:40 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
пример приложил
лист "РСИ" заполняется посредством формы как бланк "Средство измерения"
задача усложняется существует еще и бланк "Эталон" отличия
строка 15 средство измерения по условию меняется на "Эталон (средство измерения)" + текст
строка 37 поменяется на "с применением эталонов единиц величин" = текст

наверное будет понятно, линия должна меняться....
К сообщению приложен файл: _4___97-2003_.rar (96.8 Kb)


Сообщение отредактировал combat - Понедельник, 19.10.2015, 22:42
 
Ответить
Сообщениепример приложил
лист "РСИ" заполняется посредством формы как бланк "Средство измерения"
задача усложняется существует еще и бланк "Эталон" отличия
строка 15 средство измерения по условию меняется на "Эталон (средство измерения)" + текст
строка 37 поменяется на "с применением эталонов единиц величин" = текст

наверное будет понятно, линия должна меняться....

Автор - combat
Дата добавления - 19.10.2015 в 22:40
Serge_007 Дата: Понедельник, 19.10.2015, 23:24 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
управлять линией вставленной из автофигур на лист, программно
длина линии будет зависит от условия применения необходимого бланка
Записал макрорекордером:[vba]
Код
Sub combat()
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 49.5, 45, 288, 45.75). _
        Select ' добавляем линию
    Selection.ShapeRange.ScaleWidth 1.3962264151, msoFalse, msoScaleFromTopLeft 'удлинняем её
End Sub
[/vba]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
управлять линией вставленной из автофигур на лист, программно
длина линии будет зависит от условия применения необходимого бланка
Записал макрорекордером:[vba]
Код
Sub combat()
    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 49.5, 45, 288, 45.75). _
        Select ' добавляем линию
    Selection.ShapeRange.ScaleWidth 1.3962264151, msoFalse, msoScaleFromTopLeft 'удлинняем её
End Sub
[/vba]

Автор - Serge_007
Дата добавления - 19.10.2015 в 23:24
combat Дата: Понедельник, 19.10.2015, 23:50 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
в модуль1 вставил вашу процедуру и еще одну с combat1()
в ней пытаюсь менять цифры и посмотреть изменения

а этот код в форме2
[vba]
Код
Private Sub OptionButton1_Change()
If OptionButton1.Value = True Then
Call combat
Else: Call combat1
End If

End Sub
[/vba]

рисуется линия и не меняется при переключении


Сообщение отредактировал combat - Понедельник, 19.10.2015, 23:58
 
Ответить
Сообщениев модуль1 вставил вашу процедуру и еще одну с combat1()
в ней пытаюсь менять цифры и посмотреть изменения

а этот код в форме2
[vba]
Код
Private Sub OptionButton1_Change()
If OptionButton1.Value = True Then
Call combat
Else: Call combat1
End If

End Sub
[/vba]

рисуется линия и не меняется при переключении

Автор - combat
Дата добавления - 19.10.2015 в 23:50
Serge_007 Дата: Вторник, 20.10.2015, 00:05 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Предлагаете нам догадаться о причине происходящего телепатически?
Первая и единственная попытка (потом буду банить за нарушение правил): Вы не выделяете линию при попытке её изменения


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеПредлагаете нам догадаться о причине происходящего телепатически?
Первая и единственная попытка (потом буду банить за нарушение правил): Вы не выделяете линию при попытке её изменения

Автор - Serge_007
Дата добавления - 20.10.2015 в 00:05
combat Дата: Вторник, 20.10.2015, 00:26 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
по моему разобрался...
завтра покажу, но код кажется корявый...
 
Ответить
Сообщениепо моему разобрался...
завтра покажу, но код кажется корявый...

Автор - combat
Дата добавления - 20.10.2015 в 00:26
combat Дата: Вторник, 20.10.2015, 20:48 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Линия стала меняться (её отступ слева) по условию, но не происходит замена слов по переменной 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]

мне кажется уже, что не по тому пути надо было идти здесь, но мыслей пока нет...
К сообщению приложен файл: 1_4___97-2003_.rar (99.7 Kb)


Сообщение отредактировал combat - Вторник, 20.10.2015, 21:36
 
Ответить
СообщениеЛиния стала меняться (её отступ слева) по условию, но не происходит замена слов по переменной 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
Дата добавления - 20.10.2015 в 20:48
Roman777 Дата: Среда, 21.10.2015, 14:06 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
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
[/vba]
а насчёт:
но не происходит замена слов по переменной TIP которая объявлена Dim TIP As String
только после повторного выделения прибора из списка в общем ерунда какая то
тут я не понял всё-таки сути проблемы, у меня вродебы всё корректно работает.
К сообщению приложен файл: 1_4___97-2003_.7z (92.9 Kb)


Много чего не знаю!!!!
 
Ответить
Сообщение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
[/vba]
а насчёт:
но не происходит замена слов по переменной TIP которая объявлена Dim TIP As String
только после повторного выделения прибора из списка в общем ерунда какая то
тут я не понял всё-таки сути проблемы, у меня вродебы всё корректно работает.

Автор - Roman777
Дата добавления - 21.10.2015 в 14:06
Roman777 Дата: Среда, 21.10.2015, 14:19 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat, Только щас понял, что макрос не будет работать нормально, поскольку переменная Top1 будет хранить информацию, если не ошибаюсь, только пока открыта Userform2. Тогда проще записывать в какой-нибудь лист информацию о положении созданного Shape1.top. Или прописывать его численно, если оно всегда будет одно и то же).


Много чего не знаю!!!!
 
Ответить
Сообщениеcombat, Только щас понял, что макрос не будет работать нормально, поскольку переменная Top1 будет хранить информацию, если не ошибаюсь, только пока открыта Userform2. Тогда проще записывать в какой-нибудь лист информацию о положении созданного Shape1.top. Или прописывать его численно, если оно всегда будет одно и то же).

Автор - Roman777
Дата добавления - 21.10.2015 в 14:19
combat Дата: Среда, 21.10.2015, 20:54 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
То что, поправили, код, еще раз большое спасибо, я уже подумывал, что надо делать отдельный лист для "Эталона"

процедура завязана на OptionButton1_Change(), нет реакции если клацается OptionButton2 сначала - выбирается "Эталон ..."
вот здесь происходит ерунда
линия не рисуется, заглавия строки нет, при выборе прибора из списка, название отображается без "Эталон..."
но если клацнуть OptionButton1 а потом OptionButton2, все отображается все как надо, т.е событие не запускается..., и это у Вас также должно быть просто не по пробывали это

прописал через лайбел значение Top1 всегда 213


Сообщение отредактировал combat - Среда, 21.10.2015, 20:57
 
Ответить
СообщениеТо что, поправили, код, еще раз большое спасибо, я уже подумывал, что надо делать отдельный лист для "Эталона"

процедура завязана на OptionButton1_Change(), нет реакции если клацается OptionButton2 сначала - выбирается "Эталон ..."
вот здесь происходит ерунда
линия не рисуется, заглавия строки нет, при выборе прибора из списка, название отображается без "Эталон..."
но если клацнуть OptionButton1 а потом OptionButton2, все отображается все как надо, т.е событие не запускается..., и это у Вас также должно быть просто не по пробывали это

прописал через лайбел значение Top1 всегда 213

Автор - combat
Дата добавления - 21.10.2015 в 20:54
combat Дата: Среда, 21.10.2015, 21:47 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
как прописать 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]


Сообщение отредактировал combat - Среда, 21.10.2015, 21:49
 
Ответить
Сообщениекак прописать 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]

Автор - combat
Дата добавления - 21.10.2015 в 21:47
Roman777 Дата: Четверг, 22.10.2015, 10:08 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
combat, если вы хотели делать по типу запоминания положения линии в переменные Top1 и Top2 правильно было бы так:
[vba]
Код
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select '
Top1 = Selection.Top 'запоминаем вертикальную координату для выделенного шейпа
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 120, 453, 496, 453).Select
Top2 = Selection.Top 'запоминаем вертикальную координату для выделенного шейпа
[/vba]
Но поскольку у Вас положение высоты уже есть в выражении "ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select "
Поэтому лучше сделать вообще по-другому:

Я в отдельную процедуру выделил повторяющийся код, чтобы не писать его по несколько раз. И добавил тоже самое для события OptionButton2_Change(), чтобы линия менялась при выделении сначала Button2.
К сообщению приложен файл: 1_4___97-2003-2.7z (86.0 Kb)


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Четверг, 22.10.2015, 10:10
 
Ответить
Сообщениеcombat, если вы хотели делать по типу запоминания положения линии в переменные Top1 и Top2 правильно было бы так:
[vba]
Код
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select '
Top1 = Selection.Top 'запоминаем вертикальную координату для выделенного шейпа
ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 120, 453, 496, 453).Select
Top2 = Selection.Top 'запоминаем вертикальную координату для выделенного шейпа
[/vba]
Но поскольку у Вас положение высоты уже есть в выражении "ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 140, 213, 496, 213).Select "
Поэтому лучше сделать вообще по-другому:

Я в отдельную процедуру выделил повторяющийся код, чтобы не писать его по несколько раз. И добавил тоже самое для события OptionButton2_Change(), чтобы линия менялась при выделении сначала Button2.

Автор - Roman777
Дата добавления - 22.10.2015 в 10:08
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Длина линии на листе (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!