#vba #ms-word #resize
#vba #ms-word #изменение размера
Вопрос:
Мне нужен макрос, который проверяет размер встроенных OLEObjects на соответствие их исходным размерам. Когда вы пытаетесь получить свойства масштаба фигур или линейных фигур, вы получаете бессмысленные числа (например, 0), поэтому обходной путь, к которому я пришел, — проверить их размер, затем изменить размер до 100% от исходного размера, затем проверить этот размер и сравнить. Есть ли лучший способ?
For Each shp In ActiveDocument.Shapes
If shp.Type = msoEmbeddedOLEObject Then
sW = shp.Width
sH = shp.Height
shp.ScaleWidth 1#, msoTrue
shp.ScaleHeight 1#, msoTrue
sW = sW / shp.Width
sH = sH / shp.Height
shp.ScaleWidth sW, msoTrue
shp.ScaleHeight sH, msoTrue
End If
Next
For Each ishp In ActiveDocument.InlineShapes
If ishp.Type = wdInlineShapeEmbeddedOLEObject Then
sW = ishp.Width
sH = ishp.Height
ishp.ScaleWidth = 100
ishp.ScaleHeight = 100
sW = sW / ishp.Width
sH = sH / ishp.Height
ishp.ScaleWidth = sW * 100
ishp.ScaleHeight = sH * 100
End If
Next
Комментарии:
1. Насколько мне известно, нет. Нет свойства, которое дает вам исходный размер, поэтому все, что вы можете сделать, это изменить его на 100%, как есть.
2. Я не знаю, сводит ли меня с ума или бесит то, что вы можете щелкнуть правой кнопкой мыши свойства, и Word отобразит красивое маленькое окошко с исходными размерами и текущим масштабом, но вы не можете получить эти цифры, не изменив их размер!
3. Значения ScaleHeight и ScaleWidth будут точными до тех пор, пока никто не снял флажок «Относительно исходного размера изображения», а затем не изменил размер изображения. Но с учетом сказанного, любой объект, размер которого превышает область между полями страницы, будет автоматически изменен Word при его вставке.