2012-01-10 156 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也可以工作,但它通常不會很好地渲染圖表。