Страницы: 1
RSS
Влияние DPI (масштаба) винды на расчет координат в VBA
 
Добрый день, форумчане!
Проблема следующая: при изменении масштаба в винде со 100% на какое-либо другое, координаты считаются неверно(по всей видимости есть какая-то формула для перерасчета).
Покажу на коротеньком примере:

a = ActiveSheet.Cells(currentRow + qntCurrency - 1, 1).Top
b = ActiveSheet.Cells(currentRow + qntCurrency - 1, 1).Height
с = Application.CentimetersToPoints(paperHeight) _
 - ActiveSheet.PageSetup.BottomMargin _
 - ActiveSheet.PageSetup.Top

Для 100 %:
  • a = 281.25
  • b = 28.5
  • c = 566.9291

Для 125%:
  • a = 284.4
  • b = 28.2
  • c = 566.9291
Как видите при использовании команды TOP или HEIGHT мы получаем разные значение, причем для команды TOP значение a при 100% меньше чем при 125%, а для команды HEIGHT наоборот: значение b при 100% больше чем при 125%. При всем при этом координата с рассчитывается одинаково при любом масштабе. Собственно в этом и проблема. Здесь либо TOP и HEIGHT надо на что-то домножать, либо изменять формулу для расчета с или тоже на что-то домножать.
Не подскажите как согласовать эти расчеты. Может быть есть какая либо пропорция? Я не смогла подобрать такого коэффициента. Заранее большое спасибо
Изменено: Assa_13 - 06.07.2016 15:33:51
 
Assa_13, а что вы хотите получить то? Для чего все эти цифры?
Лучше с файлом примером, чтобы не гадать дальше, что это за переменные, которые безусловно влияют на данные: currentRow, qntCurrency, paperHeight
Изменено: StepanWolkoff - 06.07.2016 15:47:28
 
Видимо, надо activewindow.Zoom тоже учитывать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
StepanWolkoff, попробую объяснить на коротком примере (см. Вложение).
У меня есть некий документ. Документ условно разделен на 4 части:
  1. заголовок документа (строки 1-2)
  2. заголовок таблицы (строка 3)
  3. содержимое таблицы (строки 4-22)
  4. подвал документа (строки 23-24)
Мне необходимо анализировать вмещается ли все содержимое табличной части вместе с подвалом на одном печатном листе, и если  не вмещается, то ставить бряк после строки которая поместилась, и далее скопировать заголовок после бряка. Таким образом, у меня на первом листе получается заголовок документа + заголовок таблицы + содержимое таблицы без последней строки, а на втором листе: скопированный заголовок таблицы + последняя строка + подвал документа.
Так вот в чем проблема: Допустим я анализирую 19-ю строку таблицы и она не помещается вместе с подвалом на одном печатном листе. Мне надо после 18 строки вставить бряк и скопировать после него заголовок. Таким образом на втором печатном листе у меня будет заголовок таблицы + последняя строка таблицы + подвал. Для 100 % все работает корректно. А например для 125% бывает так, что currentCoordinate например не для 19, а уже для 18 строки становится больше (из-за неправильного расчета) чем currentSheetEnd, хотя на самом деле 18-я строка все ещё помещается на печатном листе, не помещается только 19-я. То есть на первом листе получается меньше строк, чем на самом деле влезает.
 
Так Вам надо в сторону PageSetup.PageBreaks и PageSetup.Zoom двигаться, а не границы видимой области листа вычислять.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, ActiveWindow.Zoom меняет масштаб в самом Excel, а я говорю про изменение масштаба в винде: Разрешение экрана -> Изменение размера текста и других элементов
 
The_Prist, а где я учитываю видимую область? У меня расчеты ведутся относительно PageBreaks. То есть координата конца каждой следующей страницы - это PageBreak + высота листа
 
Assa_13, столкнулся с подобной проблемой, и никак не могу найти ее решение. Может у вас появились какие-либо? Буду очень признателен!!!
Страницы: 1
Наверх