Excel VBA Userform - Настройка диаграммы того же размера, что и изображение пользовательской формы. - PullRequest
3 голосов
/ 10 января 2012

У меня есть изображение в пользовательской форме, которое отображает уже существующую диаграмму, согласно меню свойств высота = 246 и ширина = 462 (в ней не указываются единицы измерения).Я хочу, чтобы размер моей диаграммы был таким, чтобы при сохранении и загрузке .GIF диаграммы изображение пользователя соответствовало размерам.В свойствах диаграммы я могу изменить размеры, но есть опция только для дюймов.Как я могу получить эти размеры, чтобы соответствовать?

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Если вы используете элемент управления Image для отображения диаграммы, измените размер элемента управления изображением в соответствии с пользовательской формой в соответствии с вашими требованиями, а затем установите для свойства PictureSizeMode элемента управления изображения значение «fmPictureSizeModeStretch».

1 голос
/ 11 января 2012

Коэффициент конверсии, который вы ищете, составляет 72. Измените размер диаграммы до (Высота изображения ctl / 72) дюйма (Ширина изображения ctl / 72) дюйма. В вашем случае это даст вам 3,42 х 6,42 дюйма. Когда вы загрузите это в Image ctl в режиме Clip, оно будет идеально вписываться. Если вы выбрали центрирование изображения в изображении с помощью PictureAlignment, то переключение между клипом и растяжкой едва приведет к покачиванию.

Вот 3 способа, которыми вы можете вставить график в изображение:

1) Вы можете CopyPicture измененного размера диаграммы на листе, чтобы получить его в буфере обмена, а затем в редакторе форм во время разработки выберите ваш ctl изображения, затем выберите свойство изображения для вашего ctl изображения в окне свойств и вставьте.

2) Вы можете сохранить диаграмму с измененным размером в формате jpg (она также будет работать для сохранения в формате bmp, но размеры файлов будут огромными) и загрузить диаграмму в файл Image ctl из файла, используя:

myImageCtl.picture = loadPicture("C:\whatever")

3) Если вы хотите сохранить изображение листа с измененным размером на листе и вставить его в свой файл Image ctl оттуда, вместо того, чтобы сначала сохранить его в файл, вы можете скопировать рисунок диаграммы и вставить его обратно на лист. Если вы хотите, чтобы изображение было действующей обновляющей копией исходной диаграммы (которая может быть на каком-то другом листе), используйте PastePicture, чтобы вернуть ее на лист. Выберите только что вставленное изображение, введите для него имя (myResizedChart) в поле для имени (верхний левый угол) и нажмите «Return».

Загрузите modPastePicture отсюда http://www.oaltd.co.uk и установите его (и установите ссылку на OLE Automation).

Тогда в вашем коде вы можете сказать: (при условии, что ваш оригинальный CopyPicture был «Формат изображения»)

shapes("myResizedChart").CopyPicture
myImage.picture = pastePicture

Наконец, если вам не нужно прозрачное свойство изображения ctl, есть много преимуществ использования Рамок вместо Изображений для отображения ваших Картин в Форме.

0 голосов
/ 25 июля 2015

Делайте все это во время выполнения, используя подход, который сохраняет диаграмму как GIF и загружает GIF в элемент управления изображением.

Форма пользователя называется F_DisplayChart.Он содержит элемент управления изображения с именем imgChart и кнопку с именем btnClose.Вот код в модуле кода пользовательской формы:

Private Sub btnClose_Click()
  Unload Me
End Sub

Public Property Set Chart(cht As Chart)
  ' pass chart from calling code to userform
  Dim dHeight As Double, dWidth As Double
  Dim sPath As String

  dHeight = cht.Parent.Height
  dWidth = cht.Parent.Width

  cht.Parent.Height = Me.imgChart.Height
  cht.Parent.Width = Me.imgChart.Width

  sPath = ThisWorkbook.Path & "\temp1.gif"
  cht.Export Filename:=sPath, FilterName:="gif"

  cht.Export sPath

  Me.imgChart.Picture = LoadPicture(sPath)

  cht.Parent.Height = dHeight
  cht.Parent.Width = dWidth

End Property

В коде свойства размер диаграммы соответствует размеру элемента управления изображением, экспортируется, загружается в элемент управления изображением, затем размер диаграммы сбрасывается наоригинальный размер.

Вот код, который вызывает пользовательскую форму, передает активную диаграмму в пользовательскую форму, а затем показывает форму:

Sub ShowFormWithChart()
  Dim chrt As Chart

  If ActiveChart Is Nothing Then Exit Sub

  Set chrt = ActiveChart

  With F_DisplayChart
    Set .Chart = chrt
    .Show
  End With

End Sub

Вы также можете использовать bmp вместо gif,и получить больший размер файла.jpg также работает, но обычно не отображает диаграмму так хорошо.

...