Генерируйте диаграмму Excel, только если данные доступны в таблице. - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть 12 динамических таблиц (таблиц на основе комбинаций) в таблице Excel, которые извлекают данные из других листов по формулеТаким образом, за раз, только одна таблица будет иметь данные за раз, поэтому только один график будет создан на основе этих данных.Это макрос создания диаграммы, который я записал, и я добавил в него оператор if, если в ячейке есть это конкретное значение, он создаст график, иначе он не будет создавать график

Так что, если ячейка C1в комбинированном графическом листе в качестве значения указано «Vub», он сгенерирует график, иначе не будет.

`Sub Chart_1()
If Target.Address = "$C$1" Then 
If Target.Value = "Vub" Then
Range("I2").Select
ActiveSheet.Shapes.AddChart2(227, xlLine).Select
ActiveChart.SetSourceData Source:=Range("'Combination Graphs'!$A$1:$CF$1402")
ActiveChart.ChartTitle.Select
ActiveChart.ChartArea.Select
Application.CutCopyMode = False
Application.CutCopyMode = False
Application.CutCopyMode = False
Application.CutCopyMode = False
Application.CutCopyMode = False
ActiveChart.FullSeriesCollection(1).Delete
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "='Combination Graphs'!$J$1"
ActiveChart.FullSeriesCollection(1).Values = "==UAT_17.12.2018.xlsx!Vub_c2"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(2).Name = "='Combination Graphs'!$K$1"
ActiveChart.FullSeriesCollection(2).Values = "==UAT_17.12.2018.xlsx!Aub_c2"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(3).Name = "='Combination Graphs'!$L$1"
ActiveChart.FullSeriesCollection(3).Values = "==UAT_17.12.2018.xlsx!Vne_c2"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(4).Name = "='Combination Graphs'!$M$1"
ActiveChart.FullSeriesCollection(4).Values = "==UAT_17.12.2018.xlsx!Isig_c2"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(5).Name = "='Combination Graphs'!$N$1"
ActiveChart.FullSeriesCollection(5).Values = "==UAT_17.12.2018.xlsx!Ipe_c2"
ActiveChart.FullSeriesCollection(5).XValues = "==UAT_17.12.2018.xlsx!Date_c2"
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).CategoryType = xlCategoryScale
ActiveChart.PlotArea.Select
ActiveChart.SetElement (msoElementLegendRight)
Application.CommandBars("Format Object").Visible = False
ActiveChart.Legend.Select
ActiveChart.Legend.Select
Selection.Position = xlBottom
Application.CommandBars("Format Object").Visible = False
ActiveChart.ChartArea.Select
ActiveSheet.Shapes("Chart 7").ScaleWidth 0.9563952318, msoFalse, _
    msoScaleFromTopLeft
ActiveSheet.Shapes("Chart 7").ScaleHeight 1.1266149023, msoFalse, _
    msoScaleFromTopLeft
Range("O26").Select
ActiveSheet.ChartObjects("Chart 7").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.SetElement (msoElementChartTitleAboveChart)
ActiveChart.ChartTitle.Text = "Steady State Occurence 2"
Selection.Format.TextFrame2.TextRange.Characters.Text = _
    "Steady State Occurence 2"
With Selection.Format.TextFrame2.TextRange.Characters(1, 24).ParagraphFormat
    .TextDirection = msoTextDirectionLeftToRight
    .Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 12).Font
    .BaselineOffset = 0
    .Bold = msoFalse
    .NameComplexScript = "+mn-cs"
    .NameFarEast = "+mn-ea"
    .Fill.Visible = msoTrue
    .Fill.ForeColor.RGB = RGB(89, 89, 89)
    .Fill.Transparency = 0
    .Fill.Solid
    .Size = 14
    .Italic = msoFalse
    .Kerning = 12
    .Name = "+mn-lt"
    .UnderlineStyle = msoNoUnderline
    .Spacing = 0
    .Strike = msoNoStrike
End With
With Selection.Format.TextFrame2.TextRange.Characters(13, 12).Font
    .BaselineOffset = 0
    .Bold = msoFalse
    .NameComplexScript = "+mn-cs"
    .NameFarEast = "+mn-ea"
    .Fill.Visible = msoTrue
    .Fill.ForeColor.RGB = RGB(89, 89, 89)
    .Fill.Transparency = 0
    .Fill.Solid
    .Size = 14
    .Italic = msoFalse
    .Kerning = 12
    .Name = "+mn-lt"
    .UnderlineStyle = msoNoUnderline
    .Spacing = 0
    .Strike = msoNoStrike
End With
ActiveChart.ChartArea.Select
ActiveChart.SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
ActiveChart.SetElement (msoElementPrimaryValueAxisTitleAdjacentToAxis)
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Magnitude"
Selection.Format.TextFrame2.TextRange.Characters.Text = "Magnitude"
With Selection.Format.TextFrame2.TextRange.Characters(1, 9).ParagraphFormat
    .TextDirection = msoTextDirectionLeftToRight
    .Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 9).Font
    .BaselineOffset = 0
    .Bold = msoFalse
    .NameComplexScript = "+mn-cs"
    .NameFarEast = "+mn-ea"
    .Fill.Visible = msoTrue
    .Fill.ForeColor.RGB = RGB(89, 89, 89)
    .Fill.Transparency = 0
    .Fill.Solid
    .Size = 10
    .Italic = msoFalse
    .Kerning = 12
    .Name = "+mn-lt"
    .UnderlineStyle = msoNoUnderline
    .Strike = msoNoStrike
End With
ActiveChart.Axes(xlCategory).AxisTitle.Select
Selection.Left = 166.053
Selection.Top = 195.268
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Date/Time"
Selection.Format.TextFrame2.TextRange.Characters.Text = "Date/Time"
With Selection.Format.TextFrame2.TextRange.Characters(1, 9).ParagraphFormat
    .TextDirection = msoTextDirectionLeftToRight
    .Alignment = msoAlignCenter
End With
With Selection.Format.TextFrame2.TextRange.Characters(1, 9).Font
    .BaselineOffset = 0
    .Bold = msoFalse
    .NameComplexScript = "+mn-cs"
    .NameFarEast = "+mn-ea"
    .Fill.Visible = msoTrue
    .Fill.ForeColor.RGB = RGB(89, 89, 89)
    .Fill.Transparency = 0
    .Fill.Solid
    .Size = 10
    .Italic = msoFalse
    .Kerning = 12
    .Name = "+mn-lt"
    .UnderlineStyle = msoNoUnderline
    .Strike = msoNoStrike
End With
End if
End if
ActiveChart.ChartArea.Select
End Sub`

Это вывод, который мне нужен

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Этот код должен направлять вас в правильном направлении (работает для Excel 2013 +):

Sub add_chart()
Dim wsCG As Worksheet

'Defines your worksheet
Set wsCG = Worksheets("Combination Graphs")

'Checks for Vub in cell C1
If wsCG.Cells(1, 3) = "Vub" Then
    'Creates your graph
    wsCG.Shapes.AddChart2(227, xlLine).Select

    With ActiveChart
        'Set Data
        .SetSourceData Source:=Range("'Combination Graphs'!$A$1:$CF$1402")
        'Put all your other graph setting in here...

    End With
End If

End Sub
0 голосов
/ 27 декабря 2018

Приведенный ниже код проверяет, является ли таблица с именем «tblTest» в «Sheet1» пустой. Измените имя таблицы и листа и выполните следующий код:

Option Explicit

 Sub Rows_Counts()

    Dim tbl As ListObject

    Set tbl = Sheet1.ListObjects("tblTest")

    With tbl

        If .DataBodyRange Is Nothing Then

            MsgBox "Empty Table"

        End If

        Set tbl = Nothing

    End With

 End Sub
...