2012-01-10 86 views
3

根据属性菜单height = 246和width = 462(它不指定单位),我在用户窗体中显示图像,该窗体显示预先存在的图表, 。我希望我的图表具有一定的大小,以便当图表的.GIF保存并加载到用户图像时与尺寸匹配。在图表属性中,我可以更改尺寸,但只有英寸的选项。我怎样才能得到这些尺寸匹配?Excel VBA用户窗体 - 设置与用户窗体大小相同的图表

回答

2

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

+0

此方法适用于将图像控件大小适合图表大小,但是由于图像控件被拉伸,它使图像控件上的文本难以阅读。我相信将图表尺寸设置为与图像控件完全相同的尺寸会产生更好看的图像(即文本不会被拉伸)。感谢您的帮助! – user1130306 2012-01-10 18:00:22

+0

我想你的意思是“这种方法适用于图表大小与图像控件大小相适应”,因为图像控件不会重新调整大小。这是图表,重新调整大小......你是否想重新调整控件的大小以适应图表的尺寸? – 2012-01-10 18:08:42

+0

是的,你是正确的图表大小正在拉伸,以适应图像控制。我宁愿手动将图像控件和图表的大小设置为相同的尺寸,这样就没有拉伸。由于图像控件的大小由需求设置,因此我希望将图表大小设置为与图像控件大小相同。 – user1130306 2012-01-10 18:17:46

1

您正在查找的转换因子是72.通过(图像ctl宽度/ 72)英寸将图表大小调整为(图像ctl高度/ 72)英寸。在你的情况下,会给你3.42×6.42英寸。当你将它加载到剪辑模式下的Image ctl中时,它将完美匹配。如果您选择将图片置于带有图片对齐的图片中央,则在剪辑和拉伸之间来回切换几乎不会产生摆动。

这里有3种方式就可以得到图表到图像:

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

2) 您可以调整大小的图表保存为JPG格式,(它也将努力保存为BMP,但文件尺寸变得庞大),并使用图表从文件加载到图片CTL:

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

3) 如果您希望在图纸上保留一张调整大小的图表的图片,并将图片从此处插入图像ctl中,而不是先将其保存到文件中,则可以将图表复制并粘贴回图表。如果您希望图片是原始图表(可能在其他图纸上)的实时更新副本,请使用PastePicture将其放回到图纸上。选择新粘贴的图片,在名称框(左上角)中输入名称(myResizedChart)并点击返回。

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

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

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

最后,除非你需要一个图像CTL的透明特性,也有很多的优势,使用框架而不是图像在窗体上显示您的图片。

0

在运行时使用将图表保存为GIF并将gif加载到图像控件中的方法来完成所有操作。

userform被命名为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也可以工作,但它通常不会很好地渲染图表。