Подскажите по макросу в Word...

Обсуждение проблем с установкой и конфигурированием операционных систем.

Модератор: Gromak

Сообщение Gregory » Вс авг 14, 2005 2:12 pm

Люди!!! Если кто в макросах разбирается, подскажите плиз, как в Word’е сделать одинаковую ширину у вставленных рисунков, чтобы их высота при этом менялась пропорционально???
Пробовал записать макрос, но он дает фиксированные ширину и высоту:


Selection.InlineShapes(1).Height = 80.2
Selection.InlineShapes(1).Width = 164.4


Чем заменить «80,2», чтобы макрос высоту пропорционально рассчитывал?
Если первую строчку убрать совсем – он высоту вообще не меняет…

Что посоветуете??? Заранее спасибо.
Gregory

 

Сообщение danemon » Пн авг 15, 2005 1:04 am

Применять математику:
расчитать коэффициент K=(ширина начальная)/(ширина конечная), затем использовать этот коэффициент для определения высоты: (высота конечная)=(высота начальная)/К
Использовать что-то вроде такого.

А вообще, наверняка есть некая команда/параметр, указывающая на пропорциональность изменения рисунка.
danemon

 
Сообщения: 180
Зарегистрирован: Сб май 21, 2005 2:53 am
Откуда: Беларусь, Мозырь
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение Gregory » Пн авг 15, 2005 4:59 pm

Математика - это понятно, но вот в каких выражениях это забивается в сам макрос??? Просто я в VBA не силен совсем...
Или подскажите ссылочку на учебник по макросам/VBA...
Gregory

 

Сообщение savely » Пн авг 15, 2005 5:48 pm

Сие написано в хелпе по Word, IMHO. Кстати, "делить" будет "/", как ни странно...
Аватара пользователя
savely
HWBY Team
HWBY Team
 
Сообщения: 6876
Зарегистрирован: Вс мар 17, 2002 2:40 pm
Откуда: Моск. обл., г.Троицк
Благодарил (а): 2 раз.
Поблагодарили: 26 раз.

Сообщение Gregory » Ср авг 17, 2005 11:30 pm

Overtum, попробовал твой вариант, почему-то не работает. Пишет следующее:

Run time error '5941'
Запрашиваемый номер семейства не существует.

При этом ссылается на строку
Selection.InlineShapes(2).Width = Ratio * 123

Наверное, не нравится (2)...
Как это исправить?

Кстати, числа в первых двух строках заранее не известны, здесь я привел их уже из записанного (сработавшего) макроса, в котором задавал определенную ширину изображению, а высота рассчиталась автоматически и ее значение прописалось в макрос.
Так вот, основная проблема состоит в том, что если данный макрос применить к изображению с другими пропорциями, то задаются именно те ширина и высота, которые уже прописаны в макросе, что нарушает пропорции изображения.
Это все я к тому, что сначала в макрос надо передать РЕАЛЬНЫЕ размеры, на основе их вычислить коэффициент (Ratio), затем уже задать нужную ширину и, далее, расчитать уже высоту по ширине и коэффициенту...
А вот как это все проделать - это я представляю смутно...

Жду предложений...
Gregory

 

Сообщение Gregory » Чт авг 18, 2005 11:57 pm

Overtum, дорогой, спасибо!

Работает!!!

Даже в слегка упрощенном виде:

Sub Width()
Dim Ratio As Double
Dim H As Double
Dim W As Double
H = Selection.InlineShapes(1).Height
W = Selection.InlineShapes(1).Width
Ratio = W / H
Selection.InlineShapes(1).Width = 164.4
Selection.InlineShapes(1).Height = Selection.InlineShapes(1).Width / Ratio
End Sub

Но работает!!!

Но, как обычно, хочется большего... :smile:
Теперь созрели мысли о следующем:
1. Чтобы ширину вводить при выполнении макроса, в появляющемся окне... (кажется MsgBox?)
2. Чтобы после обработки одной картинки макрос приступал к следующей...
3. И чтобы выполнялось сие действие ровно столько раз, сколько мы сами ему зададим - опять же в отдельном окошке, т.е. - цикл (тут я пока пас... :dontknow:smile:

Вот такие нескромные мысли...
Извиняй, если сильно напрягаю, но помощь твоя неоценима. Жили б рядом - пили б пиво!!! :beer:

PS. Не попадались ли где в сеть материалы по VBA? Если да - поделись ссылочкой... А то я все время только на VB натыкаюсь, а это не совсем то...

PPS. СПАСИБО!
Gregory

 

Сообщение Gregory » Пт авг 19, 2005 3:26 pm

overturn, все работае, спасибо!!!
Добавил еще туда пересчет из миллиметров в пиксели, чтобы не париться при подборе ширины:

NewWidth = CDbl(InputBox("Введите число (в мм)", "Запрос":wink:)
For Each Picture In ActiveDocument.InlineShapes
Picture.Width = NewWidth * 2.835

В общем все замечательно! Классная штука эти макросы, буду разбираться дальше.

По поводу пива - я бы с радостью, но... далековат твой Могилев от моего Тамбова... Может чем другим смогу помочь?
Gregory

 


Вернуться в Операционные системы

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

cron