Excel VBA用户窗体 - 将图表设置为与用户窗体图像相同的大小

3

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

3个回答

2

如果您使用图像控件展示图表,那么根据您的需求调整图像控件的大小以适应用户窗体,然后将图像控件的 “PictureSizeMode” 属性设置为“fmPictureSizeModeStretch”。


这种方法可以使图像控件的大小适应图表的大小,但是由于图像控件被拉伸了,因此在图像控件上阅读文本有些困难。我认为将图表尺寸设置为与图像控件完全相同的尺寸会产生更好的效果(即文本不会被拉伸)。谢谢你的帮助! - user1130306
我猜你的意思是“这种方法适用于将图表大小调整为图像控件大小”,因为图像控件不会被重新调整大小。它是图表被重新调整大小...你想要调整控件本身的大小以适应图表尺寸吗? - Siddharth Rout
是的,你说得对,图表大小被拉伸以适应图像控件。我更喜欢手动设置图像控件和图表的尺寸为相同的尺寸,这样就不会有拉伸了。由于图像控件的大小是根据要求设置的,我更愿意将图表大小设置为与图像控件大小相同。 - user1130306
快速提问。在这种情况下,如果图表大小大于表单大小,您将不得不拉伸它以适应图像控件。如果图表大小较小,则可以将图像的边框设置为透明,并将图像控件的“PictureSizeMode”属性设置为“fmPictureSizeModeClip”,以便显示实际大小。 - Siddharth Rout
永远不会出现图表大小改变的情况。我已经通过拖动角落手动调整了图表大小,并且与图像控件具有相当好的适配/纵横比(不是完美的,但比我之前做得更好)。感谢你的帮助Siddharth,你教给了我一些新的图像控件功能。 - user1130306

1
你需要的转换系数是72。将图表调整为(Image ctl高度/72)英寸乘以(Image ctl宽度/72)英寸。在您的情况下,这会给您3.42 x 6.42英寸。当您将其加载到剪辑模式中的Image ctl中时,它将完美地适合。如果您选择使用PictureAlignment将图片居中,则在剪辑和拉伸之间来回切换几乎不会产生任何摆动。
以下是3种将图表放入Image的方法:
1) 您可以将工作表上调整大小后的图表复制到剪贴板上,然后在设计时在表单编辑器中选择您的Image ctl,然后在属性窗口中选择Image ctl的Picture属性,再粘贴。
2) 您可以将调整大小的图表保存为jpg格式(也可以保存为bmp格式,但文件大小会变得很大),并使用以下代码从文件加载图表到Image ctl中:
myImageCtl.picture = loadPicture("C:\whatever")

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

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

然后在您的代码中,您可以说:(假设您的原始CopyPicture是“Format Picture”)

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

最后,除非您需要图像控件的透明属性,否则使用框架来显示表单上的图片比使用图像具有更多优势。


0

在运行时完成所有操作,使用将图表保存为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也可以,但通常呈现的图表效果不如gif好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接