Макрос Word — получить исходный размер без изменения размера

#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 при его вставке.