Выравнивание рисунка в ячейке; её пропорции и ед. измерения.

Программирование на Visual Basic for Applications
qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Выравнивание рисунка в ячейке; её пропорции и ед. измерения.

Сообщение qwertyhp » 20.12.2009 (Вс) 18:49

Проблема в следующем: надо отцентровать рисунок в ячейке (по горизонтали).
Макросом вставляю рисунки из файла в ячейки листа. По ходу каждый рисунок надо центровать в своей ячейке. Центровать текст - легко. А вот с рисунком - никак. Выставлять по центру ячейки рассчётным путём тоже не выходит- проблема в том, что размер рисунка может отражаться Excel'ем как в сантиметрах, так и в пикселях, так и в минутах/секундах, и ещё, наверное, в чём-то ещё. От чего зависят единицы измерения размера рисунка - не знаю. И каковы соотношения между, например, размером рисунка в сантиметрах и в секундах - тоже не знаю. Поэтому ничего рассчитать не могу. Подскажите, если кто знает. Работаю в MS Excel 2003 SP3. Очень надеюсь. Спасибо.
Последний раз редактировалось qwertyhp 27.12.2009 (Вс) 0:33, всего редактировалось 3 раз(а).
Пятачок Forever! :)

alex77755
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 97
Зарегистрирован: 24.03.2009 (Вт) 11:40

Re: Выравнивание рисунка в ячейке

Сообщение alex77755 » 26.12.2009 (Сб) 14:06

что то я не увидел в макросе разных единиц измерения?
Код: Выделить всё
Dim s As Object
Dim T0, L0
Dim H0, W0, H1, W1

ActiveSheet.Cells(2, 2).Select
T0 = Selection.Top
L0 = Selection.Left
H0 = Selection.Height
W0 = Selection.Width
    ActiveSheet.Pictures.Insert("G:\C\Мои документы\По пиву3.JPG").Select
Set s = Selection
H1 = Selection.Height
W1 = Selection.Width

s.Top = T0 + (H0 - H1) / 2
s.Left = L0 + (W0 - W1) / 2

qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Выравнивание рисунка в ячейке

Сообщение qwertyhp » 26.12.2009 (Сб) 20:12

To alex77755: ОГРОМНОЕ СПАСИБО!
Ваш алгоритм работает, и проблема почти устранена. А различные единицы измерения размера рисунков возникают вот где: вставляю рисунок из файла (ВСТАВКА --> РИСУНОК --> ИЗ ФАЙЛА), после чего на рисунке жму правую кнопку мыша и выбираю ФОРМАТ РИСУНКА --> РАЗМЕР --> Высота: и вот там-то высота рисунка и отражается то в сантиметрах, то в минутах/секундах, то ещё в чём-то. Причина этих метаморфоз совершенно непонятна. Буквально - как повезёт. Лазил по настройкам - бестолку. Вот ничего не меняю - а размеры в окошке отражаются: при одном обращении к опции ФОРМАТ РИСУНКА - в сантиметрах, а вот при другом - уже в минутах/сек. Мистика.
Нерешена ещё одна проблемка: как соотнести (имеется ввиду - грамотно) известную ширину рисунка (в пикселях) - и ширину столбца/ячейки, в которую этот рисунок вставлен.
Например: выставляю мышем ширину столбца (Excel пишет : "Ширина: 13.57 (100 пиксел)"). Ширина вставленного рисунка- тоже 100 пикселей, всё вроде нормально: но когда я пытаюсь получить ширину этого столбца ПРОГРАММНЫМ путём, выполняя макрос
MsgBox (Columns("A:A").Width) - вылетает значение "75",
а выполняю макрос
MsgBox (Columns("A:A").ColumnWidth) - вылетает значение "13.57".
Где искомое значение "100" и как его получить??? С высотой - аналогично:
выставляю мышем высоту строки (Excel пишет : "Высота: 75 (100 пиксел)")
MsgBox (Rows("2:2").Height) - вылетает значение "75",
и выполняю макрос
MsgBox (Rows("2:2").RowHeight) - вылетает значение "75".
И снова вопрос по существу: где искомое значение "100" и как его получить???
Ещё раз спасибо за помощь. С наступающим!
Пятачок Forever! :)

qwertyhp
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 156
Зарегистрирован: 07.10.2009 (Ср) 15:02
Откуда: Москва

Re: Выравнивание рисунка в ячейке

Сообщение qwertyhp » 26.12.2009 (Сб) 23:22

Всё, нашел. Выкладываю, кому-то наверняка пригодится.

' Пример получения квадратной ячейки с помощью кода:
(источник находится по адресу:
http://www.sql.ru/forum/actualthread.aspx?tid=555543

Код: Выделить всё
Sub test()
With Rows("1:1")
    .RowHeight = 150
    Columns("A:A").ColumnWidth = (.RowHeight + Int(.RowHeight / 3) - 5) / 7
End With
End Sub

Excel пишет: Высота: 150,00 (200 пиксел)
Причём =150 - это НЕ пиксели! Это пункты.
В таблице ниже содержатся примерные значения преобразований пунктов и пикселов в сантиметры (т.е. - пропорции между ними):

Пункты | Пикселы | Сантиметры
18 | 24 | 0,63
36 | 48 | 1,25
72 | 96 | 2,5
108 | 144 | 3,75
144 | 192 | 5

(источник находится по адресу:
http://office.microsoft.com/ru-ru/excel ... 41049.aspx

To alex77755: ещё раз спасибо.
Пятачок Forever! :)


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41

    TopList