2012-07-12 6 views
2

vba를 이미지로 사용하여 Excel 다이어그램을 저장하려고합니다. 전체 코드에서 여러 통합 문서를 호출하고 모든 워크 시트를 찾아 모든 다이어그램을 저장합니다. 다음 코드는 Excel 2007 및 2010에서 작동합니다 (단, + 4로 인해 수평선 및 수직선이 표시됨). Round (shp.Width + 4, 0)를 Round (shp.Width, 0)로 변경하면 2010 년에 다음 오류가 발생합니다 (2007 년은 아니지만).VBA Excel : 지정된 차원이 현재 차트 유형에 유효하지 않습니다.

런타임 오류 '-2147467259 80004005) ': 지정한 차원이 현재 차트 종류에 유효하지 않습니다.

Dim shp As Shape 
Dim sht As Worksheet 

Set sht = Application.ActiveWorkbook.Sheets(shtName) 
Set shp = sht.Shapes(chrtName) 

shp.CopyPicture xlScreen, xlBitmap 

Dim objChart As ChartObject 
Set objChart = sht.ChartObjects.Add(200, 200, Round(shp.Width + 4, 0), Round(shp.Height + 4, 0)) 
objChart.Activate 
ActiveChart.Paste 
ActiveChart.Export Filename:=fullPath, Filtername:=Right(fullPath, 3) 
objChart.Delete 

누군가 내가 +4 사용을 피할 수 있음을 알고 있습니까?

내가 찾은 다음.

"문제는 기본 차트 유형을 만들려고하는 것보다 다른 차트 종류로 설정 될 때마다 발생하는 예를 들어, 라인 차트를 만들려고 할 경우 경우 Excel의 기본 차트가 OHLC (촛대 주식 차트)이면 Excel에서 "지정된 차트 유형에 대해 지정된 차원이 유효하지 않습니다"라는 오류가 빠르게 발생합니다 .VB.NET에서 차트를 만들려고해도 같은 결과가 발생하므로, 먼저 기본 차트 유형을 꺾은 선형 차트와 같은 일부 기본 차트 유형으로 변경합니다. 문제가 해결됩니다. " http://www.excelbanter.com/showthread.php?t=204071

그러나 VBA로이 작업을 수행하는 방법을 알지 못합니다.

답변

1

장시간 무 응답.

두 가지 작업을 수행해야합니다. 먼저 데이터가 선택되지 않았는지 확인하십시오. 그렇지 않으면 Excel에서 차트를 작성하려고 시도 할 수 있습니다.

삽입 라인

Set objChart = sht.ChartObjects.Add(...) 

하고 데이터를 추가하지 않는 경우,

ObjChart.Chart.ChartType = xlLine ' or another "safe" chart type 
If Not rngTmp is Nothing then 
    rngTmp.select 
End If 

는 엄밀히 말하면 위의 행 다음에 다음을 삽입하기 전에이 블록

Dim rngTmp as range 
If Typename(Selection) = "Range" then 
    Set rngTmp = selection 
End If 
With ActiveSheet 
    .Range("A1").Offset(.Rows.Count - 1).Select 
End With 

차트에서는 차트 유형을 변경할 필요가 없지만 OCD를 위해 완료하는 것이 좋습니다.

+0

의도하지 않은 투표 ... 죄송합니다. – Hoakie

+0

@jon, 존재하지 않는 셀을 "선택"할 수있는 방법은 무엇입니까? 행 .Range ("A1"). Offset (.Rows.Count + 1) .Select는 테스트에서 예외를 throw하는데, 행 .Rows.Count + 1이 없기 때문에 의미가 있습니다. – OfficeAddinDev

+0

좋은 지적. 나는 그것을 '-1'로 바꿨다. –

1

사용

Set objChart = Worksheet.Shapes.AddChart2().Chart.Parent

대신

Set objChart = Worksheet.ChartObjects.Add()

의 전 기능을 사용하면 두 번째 인수의 기본 차트 유형을 지정할 수 있습니다.

+0

Excel 2007 및 2010과의 호환성을 위해'AddChart2()'대신'AddChart()'를 사용하십시오. –

관련 문제