1

ワークシートに、VBAを使用して作成したいグラフのリストを保存します。たとえば、次の列に含まれます。

  • xl3DArea
  • xlLine

私のVBAルーチンでは、XlChartType変数を次のように定義します。

Dim chartType               As XlChartType

同じルーチンの後半で、ワークシートからグラフの種類を読み取り、次のコードを使用してchartType変数に割り当てようとします(ブロックが削除された他のコード行)。

With Worksheets(chartDetailsWorksheet)

    'Variable initialisations
    chartType = Cells(2, 2).value

End With

ただし、ワークシートから読み取った値が文字列として扱われるため、コードは失敗します(当然のことです)。オンラインで答えを探してみましたが...
他の言語と同じように、型変換を行ってこの問題をすばやく修正できると考えていました。しかし、これまでに見つけたのは、文字列値をXlChartType値に変換するカスタム関数を作成することについて話しているサイトだけです。

これがこれを処理する唯一の方法ですか?

4

3 に答える 3

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
于 2012-07-02T15:42:45.850 に答える
0

そうしないでください。

シート上で、値を2つの列に格納します。1つは表示、もう1つは非表示です。
非表示の列に列挙型メンバーの数値を入力します。表示されている列に、わかりやすい名前を入力します(xlLineユーザーのわかりやすい名前ではありません)。次に、非表示の列を読みます。

于 2012-07-02T12:28:52.387 に答える
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...。ケース選択で関数を使用すると、「xlBarClustered」の代わりに「Horizo​​ntal Bars」などと呼ぶことができる、よりユーザーフレンドリーな名前を使用できることに注意してください。

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

サブルーチンまたは関数のいずれにもエラー処理がないことに注意してください。

于 2013-02-07T16:07:39.070 に答える