Скорее всего такого сделать невозможно, но я все же спрошу.
Есть необходимость визуально показывать размер объекта. Объект является прямоугольной картинкой, размеры рассчитываются в таблице в сантиметрах (выделил красным).
Можно как-то привязать размер картинки к рассчитанным размерам? Или может как-то вписать картинку в ячейку и привязать размеры ячейки к рассчитанным размерам? Я уж не знаю как это все возможно
Скорее всего такого сделать невозможно, но я все же спрошу.
Есть необходимость визуально показывать размер объекта. Объект является прямоугольной картинкой, размеры рассчитываются в таблице в сантиметрах (выделил красным).
Можно как-то привязать размер картинки к рассчитанным размерам? Или может как-то вписать картинку в ячейку и привязать размеры ячейки к рассчитанным размерам? Я уж не знаю как это все возможно svobodniy
Пока ничего не понятно. Опишите задачу подробнее. Картинки на диске, их надо вставить в Excel, определить размеры, пересчитать и по расчету изменить размер картинок, потом сохранить?
Пока ничего не понятно. Опишите задачу подробнее. Картинки на диске, их надо вставить в Excel, определить размеры, пересчитать и по расчету изменить размер картинок, потом сохранить?AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Картинка либо на диске, либо в самом документе - не важно. Картинка всего одна. В таблице рассчитывается размер картинки и его надо применить к данной картинке, чтобы иметь визуальное представление на мониторе.
Картинка либо на диске, либо в самом документе - не важно. Картинка всего одна. В таблице рассчитывается размер картинки и его надо применить к данной картинке, чтобы иметь визуальное представление на мониторе.svobodniy
Sub Macros() Dim sha As Shape For Each sha In ActiveSheet.Shapes iName = sha.Name 'имя картинки iHeight = sha.Height 'Высота картинки в px iWidth = sha.Width 'Ширина картинки в px sha.Height = 468 'Изменить высоту sha.Width = 361 'Изменить ширину Next End Sub
[/vba] Вместо фиксированных значений размера в коде, можно брать его из ячеек.
Код в Module1 [vba]
Код
Sub Macros() Dim sha As Shape For Each sha In ActiveSheet.Shapes iName = sha.Name 'имя картинки iHeight = sha.Height 'Высота картинки в px iWidth = sha.Width 'Ширина картинки в px sha.Height = 468 'Изменить высоту sha.Width = 361 'Изменить ширину Next End Sub
[/vba] Вместо фиксированных значений размера в коде, можно брать его из ячеек.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Хм. Картинка реагирует на заданные размеры. Но почему-то отображается просто громадной. Т.е. не соответствует действительности... Как-то не ясно... какова зависимость между пикселями/сантиметрами в Экселе и реальными пикселями монитора... И как добиться адекватного результата.
Хм. Картинка реагирует на заданные размеры. Но почему-то отображается просто громадной. Т.е. не соответствует действительности... Как-то не ясно... какова зависимость между пикселями/сантиметрами в Экселе и реальными пикселями монитора... И как добиться адекватного результата.svobodniy
1 дюйм = 2,54 см Пиксел это точка. Его размер зависит от свойств оборудования. У мониторов и принтеров принято считать количество пиклелей на 1 дюйм Допустим, размер пиксела 1х1 мм картику в 100х100 px мы увидим некого размера Теперь размер пикселя 2х2 мм - картинка получится в 4 раза больше, хотя она будет так же 100х100 px PS. в вашем файле картинка перед изменением размеров была Н=351, W=270,75 Возможно, на вашем мониторе размеры определит другие. Надо проверить.
1 дюйм = 2,54 см Пиксел это точка. Его размер зависит от свойств оборудования. У мониторов и принтеров принято считать количество пиклелей на 1 дюйм Допустим, размер пиксела 1х1 мм картику в 100х100 px мы увидим некого размера Теперь размер пикселя 2х2 мм - картинка получится в 4 раза больше, хотя она будет так же 100х100 px PS. в вашем файле картинка перед изменением размеров была Н=351, W=270,75 Возможно, на вашем мониторе размеры определит другие. Надо проверить.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Сообщение отредактировал AlexM - Среда, 02.04.2014, 14:24
Я могу пересчитать дюймы в пиксели зная диагональ и разрешение монитора, что в принципе в таблице и делается. Если брать из таблицы, то у меня второй монитор на 19 дюймов. Картинка в графическом редакторе 361*468 пикселей, я ее копирую в Эксель - она такая же 361*468 пикселей. А вот когда применяю макрос с размерами 361*468, она становится раза в полтора больше...
Я могу пересчитать дюймы в пиксели зная диагональ и разрешение монитора, что в принципе в таблице и делается. Если брать из таблицы, то у меня второй монитор на 19 дюймов. Картинка в графическом редакторе 361*468 пикселей, я ее копирую в Эксель - она такая же 361*468 пикселей. А вот когда применяю макрос с размерами 361*468, она становится раза в полтора больше...svobodniy
Методом научного тыка подобрал коэффициент 0,75. Т.е. реальный размер картинки составляет только 75% от той, которая получается в Экселе при выставлении размеров по пикселям.
Теперь бы понять, как все это связано и как отображать реальные размеры на других мониторах, зная физический размер пикселя матрицы (в мм).
Методом научного тыка подобрал коэффициент 0,75. Т.е. реальный размер картинки составляет только 75% от той, которая получается в Экселе при выставлении размеров по пикселям.
Теперь бы понять, как все это связано и как отображать реальные размеры на других мониторах, зная физический размер пикселя матрицы (в мм).svobodniy
В макросе размеры определяются в пунктах Размер пикселя зависит от разрешения монитора, поэтому он переменный. 1дюйм=72,27 пункта(points)=2,54см 1 пункт=1/72 дюйма=0,35 мм 1мм=2,835 пункта
В макросе размеры определяются в пунктах Размер пикселя зависит от разрешения монитора, поэтому он переменный. 1дюйм=72,27 пункта(points)=2,54см 1 пункт=1/72 дюйма=0,35 мм 1мм=2,835 пунктаAlexM
Почитайте статью, мне кажется она о Вашем вопросе.
Это все мы знаем. Там всего 2 факта про 72 и 96... А дальше то что?
Итого, остается вопрос... Как спроецировать картинку на свой монитор такого размера, какой она будет на чужом мониторе с другой диагональю и другим разрешением. Вот моя задача...
Почитайте статью, мне кажется она о Вашем вопросе.
Это все мы знаем. Там всего 2 факта про 72 и 96... А дальше то что?
Итого, остается вопрос... Как спроецировать картинку на свой монитор такого размера, какой она будет на чужом мониторе с другой диагональю и другим разрешением. Вот моя задача...svobodniy
Сообщение отредактировал svobodniy - Среда, 02.04.2014, 16:40
Как спроецировать картинку на свой монитор такого размера, какой она будет на чужом мониторе с другой диагональю и другим разрешением. Вот моя задача...
Ощущение, что я что-то упускаю в своих рассуждениях.... НО! Я сейчас поменял разрешения на своем компе на отличные от разрешения по умолчанию, а картинка свой размер не меняет - 9,55 см по ширине (мерил линейкой). То есть, если в экселе выбрать размер объекта 10х10 см, масштаб листа 100%, то на (правильно настроенном) экране, этот объект будет отображаться с размерами 10х10 см. Давайте еще раз, что Вы хотите получить?
Как спроецировать картинку на свой монитор такого размера, какой она будет на чужом мониторе с другой диагональю и другим разрешением. Вот моя задача...
Ощущение, что я что-то упускаю в своих рассуждениях.... НО! Я сейчас поменял разрешения на своем компе на отличные от разрешения по умолчанию, а картинка свой размер не меняет - 9,55 см по ширине (мерил линейкой). То есть, если в экселе выбрать размер объекта 10х10 см, масштаб листа 100%, то на (правильно настроенном) экране, этот объект будет отображаться с размерами 10х10 см. Давайте еще раз, что Вы хотите получить?Russel
QIWI 9173973973
Сообщение отредактировал Russel - Среда, 02.04.2014, 17:59
У меня такое же ощущение. Может как-то использовать данные по разрешению конкретного монитора? Разрешение можно определить так [vba]
Код
Private Declare Function GetSystemMetrics _ Lib "user32.dll" (ByVal nIndex As Long) As Long Sub Get_System_Metrics() Dim iX As Long, iY As Long iX = GetSystemMetrics(1&) iY = GetSystemMetrics(0&) End Sub
[/vba] Если код вставить в модуль "Эта книга" на событие Workbook_Open, то можно использовать полученные данные для масштабирования или как-то по другому.
У меня такое же ощущение. Может как-то использовать данные по разрешению конкретного монитора? Разрешение можно определить так [vba]
Код
Private Declare Function GetSystemMetrics _ Lib "user32.dll" (ByVal nIndex As Long) As Long Sub Get_System_Metrics() Dim iX As Long, iY As Long iX = GetSystemMetrics(1&) iY = GetSystemMetrics(0&) End Sub
[/vba] Если код вставить в модуль "Эта книга" на событие Workbook_Open, то можно использовать полученные данные для масштабирования или как-то по другому.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Я кажется понял, что имеет в виду автор. Одна и та же картинка (размерами, пусть будет, 100*100 px) на разных мониторах не в excel'e будет иметь разные размеры в см, вот он и хочет понять, как они будут смотреться.
Я кажется понял, что имеет в виду автор. Одна и та же картинка (размерами, пусть будет, 100*100 px) на разных мониторах не в excel'e будет иметь разные размеры в см, вот он и хочет понять, как они будут смотреться.Russel
Я кажется понял, что имеет в виду автор. Одна и та же картинка (размерами, пусть будет, 100*100 px) на разных мониторах не в excel'e будет иметь разные размеры в см, вот он и хочет понять, как они будут смотреться.
Именно!!!
В приложенном вами файле ваш расчет точно совпадает с моим (выделенным красным). Вопрос остается, как сделать так, чтобы эксель показывал картинку нужного размера автоматически? Ну никак он не хочет показывать правильные размеры, ни через пиксели, ни через пункты... не получается...
Я кажется понял, что имеет в виду автор. Одна и та же картинка (размерами, пусть будет, 100*100 px) на разных мониторах не в excel'e будет иметь разные размеры в см, вот он и хочет понять, как они будут смотреться.
Именно!!!
В приложенном вами файле ваш расчет точно совпадает с моим (выделенным красным). Вопрос остается, как сделать так, чтобы эксель показывал картинку нужного размера автоматически? Ну никак он не хочет показывать правильные размеры, ни через пиксели, ни через пункты... не получается...svobodniy
Автоматику я сделаю. Но я же говорю. Проблема в пикселях/пунктах. Не выходит верного размера...
За два дня перечитал огромное количество всяких статей и форумов по этим пунктам/DPI/PPI/пикселям/дюймам. Вроде все ясно и фактически реальный размер получается перемножением размера пикселя матрицы на количество пикселей... Но Экселю никак не объяснить это... Что-то с Экселем все очень сложно...
Автоматику я сделаю. Но я же говорю. Проблема в пикселях/пунктах. Не выходит верного размера...
За два дня перечитал огромное количество всяких статей и форумов по этим пунктам/DPI/PPI/пикселям/дюймам. Вроде все ясно и фактически реальный размер получается перемножением размера пикселя матрицы на количество пикселей... Но Экселю никак не объяснить это... Что-то с Экселем все очень сложно...svobodniy
Сообщение отредактировал svobodniy - Четверг, 03.04.2014, 11:48
Думаю алгоритм должен быть такой Определяем размер картинки в пунктах кодом из сообщения №4. Эти данные записываем в переменную, которую не изменяем до конца работы макроса. Масштаб окна программы устанавливаем на 100% [vba]
Код
ActiveWindow.Zoom = 100 'масштаб окна 100%
[/vba] Затем определяем iX кодом из сообщения №14 установленное разрешение экрана. Устанавливаем размер картинки увеличенный/уменьшенный на эмпирически полученный коэффициент для каждого разрешения. Перед сохранением файла возвращаем размер картинки используя, сохраненные в начале, переменные.
Думаю алгоритм должен быть такой Определяем размер картинки в пунктах кодом из сообщения №4. Эти данные записываем в переменную, которую не изменяем до конца работы макроса. Масштаб окна программы устанавливаем на 100% [vba]
Код
ActiveWindow.Zoom = 100 'масштаб окна 100%
[/vba] Затем определяем iX кодом из сообщения №14 установленное разрешение экрана. Устанавливаем размер картинки увеличенный/уменьшенный на эмпирически полученный коэффициент для каждого разрешения. Перед сохранением файла возвращаем размер картинки используя, сохраненные в начале, переменные.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
AlexM, в сообщении 4 нет никакого кода для определения размеров в пунктах. Там только применение размера. Разрешение и размеры своего экрана можно задать вручную.
Вопрос только в пересчете на пункты. Я вчера часа 4 сидел выдумывал форумы начитавшись всяких ФАКов и форумов. Не получается соотнести пиксели и пункты. Что-то это магические какие-то размерности...
П.С. Ладно. Финт ушами не выходит. Будем подгонять ручками по линейке. Вся эта тема на смарку
AlexM, в сообщении 4 нет никакого кода для определения размеров в пунктах. Там только применение размера. Разрешение и размеры своего экрана можно задать вручную.
Вопрос только в пересчете на пункты. Я вчера часа 4 сидел выдумывал форумы начитавшись всяких ФАКов и форумов. Не получается соотнести пиксели и пункты. Что-то это магические какие-то размерности...
П.С. Ладно. Финт ушами не выходит. Будем подгонять ручками по линейке. Вся эта тема на смарку svobodniy
в сообщении 4 нет никакого кода для определения размеров в пунктах
мы же далее разобрались, что определяется размер не px, а в пунктах. Вот часть кода[vba]
Код
Sub Macros() Dim sha As Shape For Each sha In ActiveSheet.Shapes iHeight = sha.Height 'Высота картинки в пунктах iWidth = sha.Width 'Ширина картинки в пунктах Next End Sub
в сообщении 4 нет никакого кода для определения размеров в пунктах
мы же далее разобрались, что определяется размер не px, а в пунктах. Вот часть кода[vba]
Код
Sub Macros() Dim sha As Shape For Each sha In ActiveSheet.Shapes iHeight = sha.Height 'Высота картинки в пунктах iWidth = sha.Width 'Ширина картинки в пунктах Next End Sub