2012-07-02 5 views
0

워크 시트에서 VBA를 사용하여 만들려는 차트 목록을 저장합니다.문자열을 VBA의 XlChartType으로 변환

Dim chartType    As XlChartType 

나중에 같은 루틴에서 다음과 같이 나는 XlChartType 변수를 정의 내 VBA 루틴에서

  • xl3DArea
  • xlLine

을 : 예를 들어이 열에 포함됩니다 워크 시트에서 차트 유형을 읽고 다음 코드 (블록 제거 된 다른 코드 줄)를 사용하여 chartType 변수에 할당하려고합니다.

그러나 워크 시트에서 읽은 값이 문자열로 취급되므로 코드가 실패합니다 (놀랄 일은 아닙니다). 나는 온라인에서 답을 찾고자했지만 ...
다른 언어들처럼,이 문제를 빨리 해결할 수있는 타입 변환을 할 수 있었다. 하지만 지금까지 찾은 모든 것은 문자열 값을 XlChartType 값으로 변환하는 사용자 지정 함수를 작성하는 사이트입니다.

이 방법으로 처리 할 수 ​​있습니까?

답변

0

하지 마십시오.

시트에 값 하나를 숨기고 하나는 보이는 두 열에 값을 저장하십시오.
숨겨진 열에 열거 형 멤버의 숫자 값을 입력합니다. 표시되는 열에는 설명이 포함 된 이름을 입력하십시오 (xlLine은 사용자를 설명하는 이름이 아닙니다). 그런 다음 숨겨진 열을 읽으십시오.

+0

안녕하세요, 초기 답변에 많은 감사하지만 혼란이 조금 있다고 생각합니다. "xlLine"은이 경우 사용자 이름이 아닙니다 (좋은 사용자 이름이 아닐 것이라는 것에 동의합니다). 사실 xlChartType의 열거 형 값입니다. 기본 선 차트를 나타냅니다. 그러나 나는 당신이 의미하는 것을 얻습니다 ... –

+0

@ DarkLord_109 "사용자 이름"은 "사용자 이름"이 아니라 "사용자 이름"을 의미합니다. 나는 'xlLine'(4라는 숫자)의 수치를 셀에 넣고, 인접한 셀에 "Line chart"와 같은 것을 넣는다. 이 줄을 따라 – GSerg

+0

을 참조하면 http://msdn.microsoft.com/en-us/library/bb241008 (v = office.12) .aspx XlChartType 용 – datatoo

1

문자열 상수 이름을 해당 값으로 변환 할 때 사용할 수 있습니다. 당신이해야하는지 여부는 다른 질문입니다.

Function WhatIsTheValue(s As String) As Variant 

     Dim VBProj As VBIDE.VBProject 
     Dim VBComp As VBIDE.VBComponent 
     Dim CodeMod As VBIDE.CodeModule 
     Set VBProj = ActiveWorkbook.VBProject 
     Set VBComp = VBProj.VBComponents("modTemp") 
     Set CodeMod = VBComp.CodeModule 

     With CodeMod 
      .DeleteLines 1, .CountOfLines 
      .InsertLines 1, "Public Function GetTheValue()" 
      .InsertLines 2, "GetTheValue = (" & s & ")" 
      .InsertLines 3, "End Function" 
     End With 
     WhatIsTheValue = Application.Run("GetTheValue") 

End Function 
+0

더 나은 appraoch : http://stackoverflow.com/questions/27230772/is-there-a-way-to-test-if -a-chart-in-excel-has-its-series-stacked-or-not/27234857 # 27234857 –

0

나는 사용자 정의 기능에 대한 예약을 표명했지만, 솔직히 오히려 실수 등. 어느 사용자 개입 또는 코드// 조작 삭제 될 수 있습니다 숨겨진 열보다, 내가 걸릴 경로 이해 실행.

이 서브 루틴은 Cells (2,2)에서 문자열 값을 가져 와서 아래 함수를 통해 전달하여 xlChartType으로 변환합니다. 여기

Sub ChartTypes() 
Dim cht As Chart 
Dim ws As Worksheet 
Dim stringType As String 
Dim chartType As XlChartType 

Set ws = Sheets(1) 

stringType = CStr(Cells(2, 2).Value) 

'Use the function to return the correct xlChartType in the AddChart: 
Set cht = ws.Shapes.AddChart(_ 
     GetChartTypeConstant(stringType), _ 
     50, 50, 300, 200).Chart 
End Sub 

그리고

Set cObj... 내에서 호출되는 함수입니다.

Private Function GetChartTypeConstant(myString As String) As XlChartType 
'This function returns an xlCharType constant value from a descriptive string 
' which you will need to define or modify for your needs; 
' using select case also means you can use more descriptive/user-friendly 
' names on your worksheet. 

    Select Case myString 
    Case "xlBarClustered", "Clustered Bars", "Horizontal Bars" 
     GetChartTypeConstant = xlBarClustered 
    Case "xlColumnClustered", "Clustered Columns", "Vertical Columns" 
     GetChartTypeConstant = xlColumnClustered 
    Case "xlLine", "Lines Only" 
     GetChartTypeConstant = xlLine 

    'Additional cases can be added for 
    ' additional chart types. 
End Select 


End Function 

에는 오류 -이없는주의 등, "xlBarClustered는"당신이 "수평 바"를 부를 수있는 대신, 선택 케이스 기능을 사용하여 더 많은 사용자에게 친숙한 이름을 사용할 수 있도록한다고합니다 하위 또는 기능 중 하나에서 처리.