2013-06-27 3 views
1

내 코드는 코드가 버블 차트에서 거품으로 사용되는 연속 파이 차트의 색상 테마를 변경하는 것을 의미한다런타임 오류가

Sub PieMarkers() 

Dim chtMarker As Chart 
Dim chtMain As Chart 
Dim intPoint As Integer 
Dim rngRow As Range 
Dim lngPointIndex As Long 
Dim thmColor As Long 
Dim myTheme As String 


Application.ScreenUpdating = False 
Set chtMarker = ActiveSheet.ChartObjects("chtMarker").Chart 
Set chtMain = ActiveSheet.ChartObjects("chtMain").Chart 

Set chtMain = ActiveSheet.ChartObjects("chtMain").Chart 
Set rngRow = Range(ThisWorkbook.Names("PieChartValues").RefersTo) 

For Each rngRow In Range("PieChartValues").Rows 
    chtMarker.SeriesCollection(1).Values = rngRow 
    ThisWorkbook.Theme.ThemeColorScheme.Load GetColorScheme(thmColor) 
    chtMarker.Parent.CopyPicture xlScreen, xlPicture 
    lngPointIndex = lngPointIndex + 1 
    chtMain.SeriesCollection(1).Points(lngPointIndex).Paste 
    thmColor = thmColor + 1 
Next 

lngPointIndex = 0 

Application.ScreenUpdating = True 
End Sub 

Function GetColorScheme(i As Long) As String 
Const thmColor1 As String = "C:\Program Files\Microsoft Office\Document Themes 15\Theme Colors\Blue Green.xml" 
Const thmColor2 As String = "C:\Program Files\Microsoft Office\Document Themes 15\Theme Colors\Orange Red.xml" 
    Select Case i 
     Case 0 
      GetColorScheme = thmColor1 
     Case 1 
      GetColorScheme = thmColor2 
    End Select 
End Function 

입니다. 그래서이 함수는 이전에 문자열로 저장 한 색 구성표를 선택하고 스크립트 실행에 따라 색 구성표를 변경하여 첫 번째 원형이 다음 원형 차트보다 다른 색을 갖도록합니다. I do 오류 메시지가 런타임 오류 2147024809 여기에 문제를 것으로 보이는 도와 표시된 값이 range..can 누구를 벗어 말하고 라인

ThisWorkbook.Theme.ThemeColorScheme.Load GetColorScheme(thmColor) 

에서 코드를 디버깅 할 때 오류 메시지가?

+0

OP의 원래 질문에 답변하기위한 코드를 제공해 드리며,이 질문은 @Timon이 (가) 발생하는 오류에 대한 쿼리에 응답하고 있습니다. 이 오류는 GetColorScheme 함수가 '0'또는 '1'이 아닌 'i'값을 받으면 발생합니다. 이 함수는 오류를 발생시키는'False'를 반환합니다. 원본 스레드에서 두 개 이상의 경우에 대해이 코드를 업데이트하는 방법에 대한 정보를 제공했습니다. –

답변

1

원래 스레드의 주석에서 언급했듯이 ... 이 런트의

using VBA for a pie bubble chart in excel

원인 당신은 세 번째로이 함수를 호출하려고, 그래서 만약

  • 이 매크로 & 기능은 현재 두 색 구성표를 사용하도록 설정되어 IME이 오류가 발생할 수 있습니다이 명백한 가지가 있습니다

    오류 이 오류가 발생합니다. 0 또는 1이 아닌 thmColor 색인 값을 전달하면이 함수는 유효한 문자열 대신 False을 반환합니다.

  • 반환 된 문자열 값이 이 아닌 경우 유효한 경로 & 사용자 컴퓨터에 설치된 테마의 경우에도 매크로가 실패합니다. 함수 내에 thmColor1thmColor2 변수의 유효한 파일 경로를 제공했는지 다시 확인하십시오.

두 가지 지정된 색 구성표간에 회전 할 수 있도록 원래 답변이 업데이트되었습니다. thusly 히는 Select Case 문에서 MOD 기능을 사용

Function GetColorScheme(i as Long) as String '## Returns the path of a color scheme to load 
    '## Currently set up to ROTATE between only two color schemes. 
    ' You can add more, but you will also need to change the 
    ' Select Case i Mod 2, to i Mod n; where n = the number 
    ' of schemes you will rotate through. 
    Const thmColor1 as String = "C:\Program Files (x86)\Microsoft Office\Document Themes 14\Theme Colors\Apex.xml" 
    Const thmColor2 as String = "C:\Program Files (x86)\Microsoft Office\Document Themes 14\Theme Colors\Essential.xml" 


    Select Case i Mod 2 '## i Mod n; where n = the number of Color Schemes. 
     case 0 
      GetColorScheme = thmColor1 
     case 1 
      GetColorScheme = thmColor2 
     'Case n '## You should have an additional case for each 1 to n. 
     ' 
    End Select 
End Function 

추가 색상의 경우, 추가 테마 파일을 나타내는 추가 변수를 초기화해야하고, 그에 따라 Select Case 블록을 수정합니다.

당신은 그보다 더 복잡 할 수 있습니다. 그러나 이들 중 얼마나 많은 부분을 적용해야할지 모른 채, 나는 실용적이고 확장 가능한 솔루션을 제공합니다. 차트가 너무 많고 사용 가능한 테마를 반복하려는 경우에도이 작업을 수행 할 수 있습니다. 변경 사항의 복잡도는 원하는 분산 정도에 따라 다르지만 배열을 선언하고 ALL 테마 폴더에 테마를 설치 한 다음 순차적으로 반복하면됩니다.

+1

네, David이 여기에와 있습니다. 'thmColor'를 증가시키는 루프를 놓친 것입니다. 그래서'2'에 도달하면이 함수는 빈 문자열을 반환 할 것이고,'ThisWorkbook.Theme.ThemeColorScheme.Load "를 실행하면"will will give 너 오류 야. +1 – CuberChase

+0

@TimonHeinomann 이것을 ** 수락 ** 답변으로 표시하고 다른 질문에 대한 이전 답변을 수락 한 것으로 표시하십시오. 다른 사람들이 당신이 문제를 해결하도록 도울 때,이 사이트가 작동하는 방법입니다. :) 나는 나중에 다른 질문을하려고 노력할 것입니다. –

1

자신이 만든 사용자 지정 테마 (2013 년판이 설치되어 있지는 않지만 2007 년 또는 2010 년판에 파란색 또는 오렌지색 테마가 있음)을 사용하는 것이 좋습니다. XML 파일.

thmColor 변수는 VBA에 숫자가 있기 때문에 0으로 초기화되며 코드가 Microsoft의 XML 파일 경로로 바뀌면 코드가 제대로 작동합니다. (항상 thmColor1을 골라도)

또한 이러한 파일 중 하나에서 XML이 손상되면 "런타임 오류 '-2147024809 (80070057) 오류가 발생합니다. 내용에 문제가있어서 파일을 열 수 없습니다. 범위 초과 값이있는 동일한 오류 번호를 얻고 있기 때문에 잘못된 16 진 값으로 잘못 정의 된 색상이 있다고 생각합니다

관련 문제