У меня есть макрос для размещения фигур в области печати моего файла Excel. Коротко говоря, для этого я использую ширину выделенных фигур (Application.Selection) и удалите его из ширины области печати, затем разделите его на общее количество выделенных фигур.

Это работает 97% времени. 3%, это не работает, потому что Excel, кажется, не получает правильное измерение формы. Ширина примерно на 50%.

Вот и мне интересно, как и почему это происходит? Это кажется случайным, хотя когда это происходит, это происходит только тогда, когда выбрано более одной фигуры. Если я запускаю скрипт, выбирая только проблемную форму, размеры в порядке.

Это случилось с кем-то еще и как это можно исправить?

- Вот размер фигуры в Excel:

Размер формы от Excel

Исходя из этих размеров и зная, что размеры в Excel vba указаны в точках, они будут переведены в высоту ≈ 92,41 и ширину ≈ 191,91.

- Вот размер, который я получаю из vba, когда выбраны две фигуры (хранятся в коллекции collShp):

Выбор двух форм

- Вот когда выбираются только проблемные фигуры:

Выбор только проблемной формы

+++ Отредактировано для добавления некоторого кода: +++ Вот часть кода, смешивающаяся с фигурами. Похоже, это случайно, потому что я только что открыл тот же файл и размеры в порядке сейчас ... Формы представляют собой простые снимки экрана, такие как "отпечатанный экран" и вставленные прямо в файл Excel.

Sub centerShapeCompressed()

    If VarType(Application.Selection) <> 9 Then Exit Sub 'Type "9" is type "Object"

    Dim shp As Object

    Dim xlapp As Application
    Set xlapp = Excel.Application

    On Error Resume Next
    Debug.Print Application.Selection.Count 'if "Selection" contains less than 2 -> throws an error

    If Err.Number = 0 Then 'If Selection.Count > 1

        On Error GoTo 0

        Dim collShp As Collection
        Set collShp = New Collection
        For Each shp In Application.Selection
           collShp.Add shp, shp.Name
        Next shp

    Else

        Set shp = Application.Selection

    End If

End Sub

0