Charts Excel VBA Userform-设置与Userform图像大小相同的图表
我有一个用户表单中的图像,它显示一个预先存在的图表,根据属性菜单,高度=246,宽度=462(它不指定单位)。我希望调整图表的大小,以便在保存图表的.GIF并将其加载到userform图像时,与尺寸匹配。在图表属性中,我可以更改尺寸,但只能选择英寸。如何使这些尺寸匹配?如果使用图像控件显示图表,请根据需要调整图像控件的大小以适合用户窗体,然后将图像控件的“PictureSizeMode”属性设置为“fmPictureSizeModeStretch”。您要查找的转换系数为72。将图表调整为(图像控制高度/72)英寸乘以(图像控制宽度/72)英寸。在你的情况下,这将给你3.42 x 6.42英寸。当您在剪辑模式下将其加载到图像ctl中时,它将非常适合。如果已选择使用PictureAignment将图片居中,则在剪辑和拉伸之间来回切换几乎不会产生晃动 以下是将图表放入图像的3种方法: (一) 您可以在工作表上复制已调整大小的图表以将其放到剪贴板上,然后在设计时在表单编辑器中选择图像ctl,然后在“属性”窗口中选择图像ctl的“图片”属性,然后粘贴 (二) 您可以将调整大小的图表另存为jpg(也可以另存为bmp,但文件大小会变大),并使用以下方法将图表从文件加载到图像ctl中:Charts Excel VBA Userform-设置与Userform图像大小相同的图表,charts,excel,userform,vba,Charts,Excel,Userform,Vba,我有一个用户表单中的图像,它显示一个预先存在的图表,根据属性菜单,高度=246,宽度=462(它不指定单位)。我希望调整图表的大小,以便在保存图表的.GIF并将其加载到userform图像时,与尺寸匹配。在图表属性中,我可以更改尺寸,但只能选择英寸。如何使这些尺寸匹配?如果使用图像控件显示图表,请根据需要调整图像控件的大小以适合用户窗体,然后将图像控件的“PictureSizeMode”属性设置为“fmPictureSizeModeStretch”。您要查找的转换系数为72。将图表调整为(图像控
myImageCtl.picture = loadPicture("C:\whatever")
(三)
如果要在工作表上保留已调整大小的图表的图片,并将其插入到图像ctl中,而不是先将其保存到文件中,则可以复制图表的图片并将其粘贴回工作表上。如果希望图片是原始图表的实时更新副本(可能在其他工作表上),则使用PastePicture将其放回工作表。选择新粘贴的图片,在名称框(左上角)中键入其名称(myResizedChart),然后单击返回
从这里下载modPastePicture并安装它(并设置对OLE Automation的引用)
然后在你的代码中你可以说:(假设你的原始图片是“格式化图片”)
最后,除非您需要图像ctl的透明属性,否则使用帧而不是图像在表单上显示图片有很多好处。在运行时使用将图表保存为GIF并将GIF加载到图像控件的方法来完成所有操作 用户表单名为F_DisplayChart。它包含一个名为imgChart的图像控件和一个名为btnClose的按钮。以下是UserForm的代码模块中的代码:
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
在属性代码中,图表的大小将调整为适合图像控件,并将其导出、加载到图像控件中,然后图表的大小将重置为原始大小
下面是调用UserForm的代码,将活动图表传递到UserForm,然后显示表单:
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也可以工作,但它通常不能很好地渲染图表。此方法可以使图像控件大小与图表大小相匹配,但是由于图像控件被拉伸,因此在图像控件上读取文本有点困难。我相信,将图表尺寸设置为与图像控件完全相同的尺寸将产生更好看的图像(即文本不会被拉伸)。谢谢你的帮助!我猜您的意思是“此方法可以使图表大小与图像控件大小相匹配”,因为图像控件不会重新调整大小。是图表重新调整了大小。。。是否要重新调整控件本身的大小以适应图表尺寸?是的,您确认的是,正在拉伸图表大小以适应图像控件。我更愿意手动将图像控件和图表的大小设置为相同的尺寸,这样就没有拉伸。由于图像控件的大小是根据要求设置的,所以我更愿意将图表大小设置为与图像控件大小相同。快速提问。在这种情况下,如果图表大小大于表单大小,您会怎么做?您必须将其拉伸以适应图像控件。如果图表大小较小,则可以将图像边框设置为透明,并将图像控件“PictureSizeMode”属性设置为“fmPictureSizeModeClip”,以便显示实际大小。图表大小永远不会发生变化。我已经通过拖动角手动调整了图表的大小,并通过图像控件获得了相当好的拟合/纵横比(不完美,但比我拥有的要好)。谢谢你的帮助,Siddharth,你教了我一些新的图像控制功能。
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