속성 표에 height = 246 및 width = 462 (단위를 지정하지 않음)에 따라 기존 차트를 표시하는 이미지가 userform에 있습니다. . 차트의 .GIF가 저장되고 사용자 폼 이미지에로드 될 때 크기와 일치하도록 차트 크기를 조정해야합니다. 차트 속성에서 치수를 변경할 수 있지만 인치에 대한 옵션 만 있습니다. 이 치수를 어떻게 일치시킬 수 있습니까?Excel VBA 사용자 폼 - 차트를 사용자 폼 이미지와 동일한 크기로 설정
답변
차트를 표시하기 위해 이미지 컨트롤을 사용하는 경우 요구 사항에 따라 사용자 정의 폼에 맞게 이미지 컨트롤의 크기를 지정한 다음 이미지 컨트롤의 "PictureSizeMode"속성을 "fmPictureSizeModeStretch"로 설정하십시오.
찾고있는 변환 요소는 72입니다. (이미지 ctl 높이/72) 인치 (이미지 ctl 너비/72) 인치로 차트의 크기를 조정하십시오. 귀하의 경우에는 3.42 x 6.42 인치를 줄 것입니다. 이것을 Clip Mode의 Image ctl에로드하면 완벽하게 맞습니다. PictureAlignment를 사용하여 이미지의 가운데에 그림을 배치하도록 선택한 경우 클립과 스트레치간에 앞뒤로 전환하면 흔들림이 거의 생성되지 않습니다.
이1) 디자인 타임에 양식 편집기에서 다음 클립 보드에 그것을 얻기 위해 시트의 크기를 조정 차트를 CopyPicture, 수하는 선택
다음은 이미지로 차트를 얻을 수있는 3 가지 방법 귀하의 이미지 ctl을 누른 다음 속성 창에서 이미지 ctl의 그림 속성을 선택하고 붙여 넣기하십시오. 당신은 JPG로 크기가 조정 된 차트를 절약 할 수 있습니다
2), (그것은 또한 BMP로 저장하기 위해 작동하지만 파일 크기가 큰 수) 및 사용하여 파일에서 이미지 CTL에 차트를로드
myImageCtl.picture = loadPicture("C:\whatever")
3) 크기 조정 차트의 그림을 시트에 유지하고 파일로 저장하는 대신 이미지 CCL에 삽입하려는 경우 차트를 복사하여 시트에 다시 붙여 넣을 수 있습니다 . 그림을 원래 차트 (다른 시트에있을 수 있음)의 실시간 업데이트 복사본으로 만들려면 PastePicture를 사용하여 시트에 다시 배치하십시오. 새로 붙여 넣은 그림을 선택하고 이름 상자 (왼쪽 위 모서리)에 이름 (myResizedChart)을 입력하고 Return 키를 누릅니다.
여기에서 modPastePicture를 다운로드하고 http://www.oaltd.co.uk을 다운로드하여 설치하십시오 (그리고 OLE 자동화에 대한 참조를 설정하십시오).
그런 다음 코드에서 당신은 말할 수있다 : ("그림 서식을"원래 CopyPicture를했다 가정)shapes("myResizedChart").CopyPicture
myImage.picture = pastePicture
마지막으로, 당신은 이미지 CTL의 투명 속성을 필요로하지 않는 많은 장점을가 이미지 대신 프레임을 사용하여 사진을 양식에 표시하십시오.
차트를 GIF로 저장하고 gif를 이미지 컨트롤에로드하는 방식을 사용하여 런타임에 모두 수행하십시오.
userform의 이름은 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
또한 GIF 대신에 BMP를 사용하고, 더 큰 파일 크기를 얻을 수 : 여기
는, 사용자 정의 폼을 호출하는 사용자 정의 폼에 현재 차트를 통과하는 코드입니다, 다음 양식을 보여줍니다. jpg도 작동하지만 일반적으로 차트를 멋지게 렌더링하지는 않습니다.
이 방법은 이미지 크기를 차트 크기에 맞추기 위해 작동하지만 이미지 컨트롤이 늘어나있어 이미지 컨트롤에서 텍스트를 읽기가 약간 어렵게 만듭니다. 차트 크기를 이미지 컨트롤의 동일한 크기로 설정하면 이미지가 더 선명 해집니다 (즉, 텍스트가 늘어나지 않음). 그래도 도와 줘서 고마워! – user1130306
이미지 컨트롤이 크기가 조정되지 않기 때문에 "이 메서드는 차트 크기를 이미지 컨트롤 크기에 맞추기 위해 작동합니다." 차트의 크기를 조정하는 것입니다 ... 차트 크기에 맞게 컨트롤의 크기를 조정 하시겠습니까? –
예, 올바른 차트 크기가 이미지 컨트롤에 맞게 늘어났습니다. 나는 이미지 컨트롤의 크기와 차트를 같은 치수로 수동으로 설정하는 것을 선호합니다.이 방법은 스트레칭이 없습니다. 이미지 컨트롤의 크기는 요구 사항에 따라 설정되므로 차트 크기를 이미지 컨트롤 크기와 같게 설정하는 것이 좋습니다. – user1130306