Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Charts Excel VBA Userform-设置与Userform图像大小相同的图表_Charts_Excel_Userform_Vba - Fatal编程技术网

Charts Excel VBA Userform-设置与Userform图像大小相同的图表

Charts Excel VBA Userform-设置与Userform图像大小相同的图表,charts,excel,userform,vba,Charts,Excel,Userform,Vba,我有一个用户表单中的图像,它显示一个预先存在的图表,根据属性菜单,高度=246,宽度=462(它不指定单位)。我希望调整图表的大小,以便在保存图表的.GIF并将其加载到userform图像时,与尺寸匹配。在图表属性中,我可以更改尺寸,但只能选择英寸。如何使这些尺寸匹配?如果使用图像控件显示图表,请根据需要调整图像控件的大小以适合用户窗体,然后将图像控件的“PictureSizeMode”属性设置为“fmPictureSizeModeStretch”。您要查找的转换系数为72。将图表调整为(图像控

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

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

您要查找的转换系数为72。将图表调整为(图像控制高度/72)英寸乘以(图像控制宽度/72)英寸。在你的情况下,这将给你3.42 x 6.42英寸。当您在剪辑模式下将其加载到图像ctl中时,它将非常适合。如果已选择使用PictureAignment将图片居中,则在剪辑和拉伸之间来回切换几乎不会产生晃动

以下是将图表放入图像的3种方法:

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

(二) 您可以将调整大小的图表另存为jpg(也可以另存为bmp,但文件大小会变大),并使用以下方法将图表从文件加载到图像ctl中:

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