Тема: Вставка картинки
Как сделать так, чтобы при вставке картинка автоматически растягивалась по всему листу? или как все картинки сразу растянуть, а то их много и приходится каждую по отдельности растягивать.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как сделать так, чтобы при вставке картинка автоматически растягивалась по всему листу? или как все картинки сразу растянуть, а то их много и приходится каждую по отдельности растягивать.
Полезная функциональность! Мне тоже было бы интересно узнать, можно ли это сделать. Пока стандартной возможности выполнить расширение картинки на всю страницу я не нашел (даже и с помощью макроса).
Неужели такая возможность есть?
100 % процентов можно - из этой оперы
'на месте курсора вставить файл *.jpg, изменить его размеры
With Selection.InlineShapes.AddPicture(fileName:="C:\1.jpg", _
LinkToFile:=False, SaveWithDocument:=True)
'ширина
.Width = 200
'высота
.Height = 1200
End With
100 % процентов можно - из этой оперы
'на месте курсора вставить файл *.jpg, изменить его размеры
With Selection.InlineShapes.AddPicture(fileName:="C:\1.jpg", _
LinkToFile:=False, SaveWithDocument:=True)
'ширина
.Width = 200
'высота
.Height = 1200
End With
Эндрю, а нельзя ли поподробней?
Допустим, есть файл Word, в котором имеются некоторые рисунки (коллекция?)
Ширина страницы, допустим, 17,5 см.
Нужно пропорционально изменить все рисунки файла, чтобы ширина каждого рисунка была 17,5 см.
Пропорционально - то есть меняется ширина и во столько же раз должна измениться высота.
100 % процентов можно - из этой оперы
'на месте курсора вставить файл *.jpg, изменить его размеры
With Selection.InlineShapes.AddPicture(fileName:="C:\1.jpg", _
LinkToFile:=False, SaveWithDocument:=True)
'ширина
.Width = 200
'высота
.Height = 1200
End With
Тут возникают несколько принципиальных вопросов!!!
1. Для чего нужно делать размер картинки по размеру страницы:
а) для фона?
а-1) будет ли в колонтитуле, в котором находится картинка, еще объекты и текст?
а-1.1) если будут, то лучше воспользоваться методом вставки объектов Shapes, а не InlineShapes так как объект придется перемещать на задний план
Тут возникают несколько принципиальных вопросов!!!
1. Для чего нужно делать размер картинки по размеру страницы:
а) для фона?
а-1) будет ли в колонтитуле, в котором находится картинка, еще объекты и текст?
а-1.1) если будут, то лучше воспользоваться методом вставки объектов Shapes, а не InlineShapes так как объект придется перемещать на задний план
Александр, не знаю, как для автора вопроса, а мне, например, нужно не для фона, а в обычном тексте.
В обычном тексте? На всю страницу?
В обычном тексте? На всю страницу?
Ну да. Например, приходится делать это, когда я преобразую текст для "читалки".
Короче говоря, получается что-то такое:
Sub ShapeBrowser()
Dim wid, hig As Double
Dim objPaint As InlineShape
For Each objPaint In ActiveDocument.InlineShapes
'выделили картинку
objPaint.Select
'ширина и высота картинки
'для 17 см в ширину количество пунктов примерно равно 480
'MsgBox objPaint.Width & " " & objPaint.Height
If objPaint.Width <> 480 Then
wid = 480
hig = objPaint.Height * 480 / objPaint.Width
'MsgBox wid & " " & hig
objPaint.Width = wid
objPaint.Height = hig
End If
Next objPaint
End Sub
Коллеги, а в коллекцию InlineShape попадут только картинки? Никакие другие объекты туда не попадут?
Здесь (внешняя ссылка) пишут, что "Shape представляет объект, находящийся в слое векторной графики, например, автофигуру, OLE-объект, элемент управления на базе ActiveX или рисунок. "
Каким образом можно выделить только одни рисунки?
В текстах встречаются также мелкие картинки (изображения нестандартных символов, кнопок интерфейса и т.д.). Эти картинки обычно не нужно увеличивать на всю страницу. В следующем макросе мелкие картинки увеличиваются в два раза:
Sub ShapeBrowser()
Dim wid, hig As Double
Dim objPaint As InlineShape
For Each objPaint In ActiveDocument.InlineShapes
'выделили картинку
objPaint.Select
'ширина и высота картинки
'для 17 см в ширину количество пунктов примерно равно 480
'MsgBox objPaint.Width & " " & objPaint.Height
If objPaint.Width <> 480 Then
If objPaint.Width > 60 Then
'пересчет ширины и высоты картинки по ширине страницы
wid = 480
hig = objPaint.Height * 480 / objPaint.Width
'MsgBox wid & " " & hig
objPaint.Width = wid
objPaint.Height = hig
Else
'мелкая картинка – увеличение ширины и высоты картинки в два раза
objPaint.Width = objPaint.Width * 2
objPaint.Height = objPaint.Height * 2
MsgBox objPaint.Width & " " & objPaint.Height
End If
End If
Next objPaint
End Sub
Вот функция Public Function PictureCollection собирающа картинки
И тестирующий макрос
Public Function PictureCollection() As Collection ' Функция возвращает коллекцию картинок документа
Dim PCol As Collection ' Коллекция представляющая 1 куртинку документа и ее свойства
Dim Shp As Shape, InShp As InlineShape, i As Long
Set PictureCollection = New Collection ' Создаем новую коллекцию PictureCollection
For Each Shp In ActiveDocument.Shapes ' Перебираем все объекты Shape
If Shp.Type = msoLinkedPicture Or Shp.Type = msoPicture Then ' Если Shp связанная картинка или картинка, то
'Создаем коллекцию PCol
Set PCol = New Collection
i = i + 1
With PCol ' В коллекцию добавляем Элементы
.Add Shp, "Object" ' Добавляем объект Shape
.Add TypeName(Shp), "Type" ' Добавляем имя типа
.Add Shp.Type, "ObjType" ' Добавляем тип картинки
End With
PictureCollection.Add PCol, "Picture_" & i ' Добавляем PCol в PictureCollection
End If
Next Shp
' Аналогично поступаем с объектами InlineShape
For Each InShp In ActiveDocument.InlineShapes
If InShp.Type = wdInlineShapeLinkedPicture Or InShp.Type = wdInlineShapePicture Then
Set PCol = New Collection
i = i + 1
With PCol ' В коллекцию добавляем Элементы
.Add InShp, "Object" ' Добавляем объект InlineShape
.Add TypeName(InShp), "Type" ' Добавляем имя типа
.Add InShp.Type, "ObjType" ' Добавляем тип картинки
End With
PictureCollection.Add PCol, "Picture_" & i ' Добавляем PCol в PictureCollection
End If
Next InShp
End Function
Public Sub TestPicture() 'Макрос по очереди выделяет картинки документа
Dim Pictures As Collection, PCol As Collection
Dim Pic As Variant
Set Pictures = PictureCollection
If Pictures.Count = 0 Then Exit Sub
For i = 1 To Pictures.Count
Set PCol = Pictures(i)
Set Pic = PCol("Object")
Pic.Select
Next i
End Sub
Интересно также, что по умолчанию VBA изменяет картинку пропорционально (если изменяется ширина, то автоматически изменяется и высота). То есть, в общем случае, достаточно изменить, например, ширину, и пропорционально изменится высота.
Для отмены пропорциональности изменения можно изменить свойство LockAspectRatio:
objPaint.LockAspectRatio = msoFalse
В следующей программе крупные картинки растягиваются на всю страницу непропорционально:
Sub ShapeBrowserUnprop()
Dim wid, hig As Double
Dim objPaint As InlineShape
For Each objPaint In ActiveDocument.InlineShapes
'выделили картинку
objPaint.Select
'ширина и высота картинки
'для 17 см в ширину количество пунктов примерно равно 480
'для стандартной высоты страницы 25,5 см количество пунктов примерно равно 725
'для увеличенной высоты страницы 28 см количество пунктов примерно равно 780
'MsgBox objPaint.Width & " " & objPaint.Height
If objPaint.Width <> 480 Or objPaint.Height <> 780 Then
If objPaint.Width > 60 Then
'непропорциональный пересчет ширины и высоты картинки для страницы 480х780
objPaint.LockAspectRatio = msoFalse
objPaint.Width = 480
objPaint.Height = 780
Else
'мелкая картинка – увеличение ширины и высоты картинки в два раза
objPaint.Width = objPaint.Width * 2
objPaint.Height = objPaint.Height * 2
MsgBox objPaint.Width & " " & objPaint.Height
End If
End If
Next objPaint
End Sub
Marvin, вы удовлетворены полученными результатами?
Доброго времени суток.
при работе в Ворде 2010 возникла проблемка. Файлы формата jpg меняют свое масштабирование при вставке в документ. Файлы с размером 600х600 пикс.
остаются в оригинальном размере, а все остальные уменьшаются. При увеличении масштаба теряется качество рисунка.
Подскажите, пожалуйста, как вставить рисунок без изменения масштаба, если это возможно.
Заранее спасибо)
Доброго времени суток.
при работе в Ворде 2010 возникла проблемка. Файлы формата jpg меняют свое масштабирование при вставке в документ. Файлы с размером 600х600 пикс.
остаются в оригинальном размере, а все остальные уменьшаются. При увеличении масштаба теряется качество рисунка.
Подскажите, пожалуйста, как вставить рисунок без изменения масштаба, если это возможно.
Заранее спасибо)
Боюсь, что это "фича". Если рисунок шире текстового поля, то Word автоматически уменьшает его пропорционально до ширины текстового поля.
Степень уменьшения вы можете увидеть в окне Разметка: выделить рисунок - Работа с рисунками - группа Размер - кнопка вызова диалогового окна - область Масштаб.
К сожалению, как добиться вставки рисунка "в оригинальном размере" стандартными средствами, я пока не знаю.
В принципе, можно изменить масштаб рисунка в упомянутом окне или предложить макрос для изменения масштаба конкретного рисунка или всех рисунков документа, но я не уверен, что вас удовлетворит такое решение.
Буду рад услышать иные мнения экспертов.
'для стандартной высоты страницы 25,5 см количество пунктов примерно равно 725
А разве нельзя получить точное значение ширины для конкретной страницы?
'для стандартной высоты страницы 25,5 см количество пунктов примерно равно 725
А разве нельзя получить точное значение ширины для конкретной страницы?
Можно
With ActiveDocument.PageSetup
Debug.Print (.PageWidth & " x " & .PageHeight)
End With
Данный код для листа формата А4 (210мм*297мм) дает 595,3 x 841,9
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться