我在用户窗体中有一个图像,它显示一个预先存在的图表,根据属性菜单,高度 = 246 和宽度 = 462(它没有指定单位)。我希望调整图表的大小,以便在保存图表的 .GIF 并将其加载到用户表单图像时与尺寸匹配。在图表属性中,我可以更改尺寸,但只有英寸选项。我怎样才能让这些尺寸匹配?
3 回答
如果您使用图像控件来显示图表,则根据您的要求调整图像控件的大小以适合用户窗体,然后将图像控件的“PictureSizeMode”属性设置为“fmPictureSizeModeStretch”。
您正在寻找的转换因子是 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 的透明属性,否则使用框架而不是图像在表单上显示您的图片有很多优点。
在运行时完成这一切,使用将图表保存为 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 也可以,但它通常不能很好地呈现图表。