3

我在用户窗体中有一个图像,它显示一个预先存在的图表,根据属性菜单,高度 = 246 和宽度 = 462(它没有指定单位)。我希望调整图表的大小,以便在保存图表的 .GIF 并将其加载到用户表单图像时与尺寸匹配。在图表属性中,我可以更改尺寸,但只有英寸选项。我怎样才能让这些尺寸匹配?

4

3 回答 3

2

如果您使用图像控件来显示图表,则根据您的要求调整图像控件的大小以适合用户窗体,然后将图像控件的“PictureSizeMode”属性设置为“fmPictureSizeModeStretch”。

于 2012-01-10T17:41:45.123 回答
1

您正在寻找的转换因子是 72。将图表的大小调整为 (Image ctl height / 72) 英寸 x (Image ctl width / 72) 英寸。在你的情况下,这会给你 3.42 x 6.42 英寸。当您在剪辑模式下将其加载到 Image ctl 中时,它将完美契合。如果您选择使用 PictureAlignment 在图像中居中图片,则在 Clip 和 Stretch 之间来回切换几乎不会产生摆动。

您可以通过以下 3 种方法将图表放入图像中:

1)您可以将工作表上调整大小的图表复制到剪贴板上,然后在设计时在表单编辑器中选择您的图像ctl,然后在属性窗口中为您的图像ctl选择图片属性,然后粘贴。

2)您可以将调整大小的图表保存为 jpg,(它也可以保存为 bmp,但文件大小会变得很大)并使用以下文件将图表加载到 Image ctl 中:

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

3)如果您想在工作表上保留调整大小图表的图片并将其从那里插入到 Image ctl 中,而不是先将其保存到文件中,您可以复制图表并将其粘贴回工作表上。如果您希望图片成为原始图表的实时更新副本(可能在其他工作表上),则使用 PastePicture 将其放回工作表上。选择新粘贴的图片,在名称框(左上角)中输入它的名称(myResizedChart),然后按回车键。

从这里http://www.oaltd.co.uk下载 modPastePicture并安装它,(并设置对 OLE 自动化的引用)。

然后在你的代码中你可以说:(假设你原来的 CopyPicture 是“格式图片”)

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

最后,除非您需要图像 ctl 的透明属性,否则使用框架而不是图像在表单上显示您的图片有很多优点。

于 2012-01-11T17:41:22.920 回答
0

在运行时完成这一切,使用将图表保存为 GIF 并将 gif 加载到图像控件中的方法。

用户窗体名为 F_DisplayChart。它包含一个名为 imgChart 的 Image 控件和一个名为 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 也可以,但它通常不能很好地呈现图表。

于 2015-07-25T17:33:48.547 回答