0

私は、テーブルシートから情報を取得し(これもプログラムされており、各テーブルの長さと位置を変更できる)、ボタンを押すと、見積もりシートと呼ばれる他のシートの各テーブルのグラフィックを生成するExcelアプリケーションをプログラミングしています。 。

最初のグラフィック(最初のテーブルに対応)でこのタスクを実行できましたが、2番目のグラフィックで同じ方法を使用しようとすると...機能しません。これは、最初のグラフィックを描画するために使用される方法です。

    Public Sub generateGraphicsC(RowResistiveC As Integer)

       Dim FirstRow As Integer, FirstColumn As Integer, LastRow As Integer, LastColumn As Integer,         GraphLocation As Integer
       Dim XelementsC As Integer, Yelements As Integer

       Dim myChtObj As ChartObject
       Dim rngChtData As Range
       Dim rngChtXVal As Range
       Dim i As Integer


       Dim WSD As Worksheet
       Set WSD = Worksheets(2)     'Data source

       Dim CSD As Worksheet
       Set CSD = Worksheets(3)     'ChartOutput

       'Dim chrt As ChartObject
       'Dim cw As Long
       'Dim rh As Long

       ' get the current charts so proper overwriting can happen Dim chtObjs As ChartObjects
       Set chtObjs = CSD.ChartObjects
       WSD.AutoFilterMode = False       ' Turn off autofilter mode
       'Dim finalRow As Long            ' Find the last row with data
       'finalRow = WSD.Cells(Application.Rows.Count, 1).End(xlUp).Row


       FirstRow = RowResistiveC
       FirstColumn = 5

       XelementsC = countXelementsC(FirstRow - 1, FirstColumn)                  'Count the x         Elements (amperes)
       Yelements = countYelements(FirstRow)                                      'Count the y Elements (Combinations)

       LastRow = FirstRow + Yelements - 1                                      'The last row and column I will read
       LastColumn = FirstColumn + XelementsC - 1

       '---------------------DRAW THE GRAPHIC----------------------------------------------'

       ' Delete any previous existing chart
        'Dim chtObj As ChartObject

       ' define the x axis values
       WSD.Activate
       Set rngChtXVal = WSD.Range(Cells(FirstRow - 1, FirstColumn), Cells(FirstRow - 1, LastColumn))

       ' add the chart
          Charts.Add

          With ActiveChart
          ' make a XY chart
             .ChartType = xlXYScatterLines
             ' remove extra series
             Do Until .SeriesCollection.Count = 0
                .SeriesCollection(1).Delete
             Loop

             .Location Where:=xlLocationAsObject, Name:="Estimation Sheets"
          End With

          '-----------------------------------------------------------------------------
          With ActiveChart
             .HasTitle = True
             .ChartTitle.Characters.Text = "Factor C"

             'To Interpolate between the ungiven values
             .DisplayBlanksAs = xlInterpolated


              'TITLE STYLE
             .ChartTitle.AutoScaleFont = False
             With .ChartTitle.Font
                .Name = "Calibri"
                .FontStyle = "Bold"
                .Size = 14
                .Strikethrough = False
                        .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = xlAutomatic
                .Background = xlAutomatic
             End With

             'AXIS STYLE-----------------------------------------------------------------------

             .Axes(xlCategory).TickLabels.AutoScaleFont = False
             With .Axes(xlCategory).TickLabels.Font
                .Name = "Arial"
                .FontStyle = "Regular"
                .Size = 10
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = xlAutomatic
                .Background = xlAutomatic
             With Selection.Border
                .ColorIndex = 15
                .LineStyle = xlContinuous
            End With


             End With
             .Axes(xlValue).TickLabels.AutoScaleFont = False
             With .Axes(xlValue).TickLabels.Font
                .Name = "Calibri"
                .FontStyle = "Regular"
                .Size = 8
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = xlAutomatic
                .Background = xlAutomatic
             End With

          End With
          '-----------------------------------------------------------------------------
          ' HEIGHT; WIDTH AND POSITION

          GraphLocation = CSD.Cells(Rows.Count, 2).End(xlUp).Row + 3

          Dim RngToCover As Range
          Set RngToCover = ActiveSheet.Range(Cells(GraphLocation, 2), Cells(GraphLocation + 20, 11))
          With ActiveChart.Parent
             .Height = RngToCover.Height ' resize
             .Width = RngToCover.Width   ' resize
             .Top = RngToCover.Top       ' reposition
             .Left = RngToCover.Left     ' reposition
          End With

       ' for each row in the sheet
       For i = FirstRow To LastRow
          Dim chartName As String
          ' define chart data range for the row (record)
           Set rngChtData = WSD.Range(WSD.Cells(i, FirstColumn), WSD.Cells(i, LastColumn))

          'To get the serie name that I´m going to add to the graph
          Dim serieName As String
          Dim varItemName As Variant
          WSD.Activate
          varItemName = WSD.Range(Cells(i, 1), Cells(i, 4))
          serieName = CStr(varItemName(1, 1) + " " + varItemName(1, 2) + " " + varItemName(1, 3) + " " + varItemName(1, 4))

          ' add series from selected range, column by column

             CSD.ChartObjects.Select


            With ActiveChart
                With .SeriesCollection.NewSeries
                .Values = rngChtData
                .XValues = rngChtXVal
                .Name = serieName
            End With
            End With

        Next i

         'We let as last view the page with all the info
         CSD.Select


    End Sub

私はこのサブを他のものから呼んでいます。次のステップは、他の種類のテーブルとグラフィックに対して、同様のメソッド(まったく同じですが、データといくつかの異なる形式のプロパティを取得するための他の開始点)を呼び出すことです。

    Public Sub printGraphics()

       Modul4.ClearGraphs

       Modul4.generateGraphicsC (RowResistiveC)

       Modul4.generateGraphicsT (RowResistiveT)

    End Sub

等々。CountXelementsおよびYelementsは、テーブルシートから要素の数をカウントし、たとえば、RowResistiveCはテーブルの位置を保持します。

GenerateGraphicsCは機能しますが、generateGraphicsT(まったく同じ)が次の行に押しつぶされます。

With .SeriesCollection.NewSeries

ホイットエラー91(私はドイツ語版のExcelを使用していますが、変数オブジェクトやブロックオブジェクトが指定されていないようなものです)。

4

1 に答える 1

0

私が疑ったように、エラーは以下から来ました:

CSD.ChartObjects.Select

シート上の単一のグラフィックを選択しているので、これは最初のグラフのソリューションでは機能しますが、さらに追加しても機能しません。

その行を次のように変更しました:

CSD.ChartObjects(1).Activate

等々。それは完璧に動作します。また、すべてのグラフが前のグラフの上にプロットされないように調整する必要がありましたが、うまく機能します。

于 2013-03-26T13:18:04.247 に答える