У меня есть макрос для размещения фигур в области печати моего файла Excel. Коротко говоря, для этого я использую ширину выделенных фигур (Application.Selection
) и удалите его из ширины области печати, затем разделите его на общее количество выделенных фигур.
Это работает 97% времени. 3%, это не работает, потому что Excel, кажется, не получает правильное измерение формы. Ширина примерно на 50%.
Вот и мне интересно, как и почему это происходит? Это кажется случайным, хотя когда это происходит, это происходит только тогда, когда выбрано более одной фигуры. Если я запускаю скрипт, выбирая только проблемную форму, размеры в порядке.
Это случилось с кем-то еще и как это можно исправить?
- Вот размер фигуры в 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