Что-то странное с биржевой диаграммой в Excel - PullRequest
1 голос
/ 09 марта 2012

У меня есть код VBA в Excel, который автоматически создает agraph и форматирует его, а затем вставляет в таблицу Excel для диаграмм. Код, кажется, работает нормально для всех графиков, кроме графов акций. Всякий раз, когда я запускаю макрос, я вижу создание диаграммы, но когда дело доходит до форматирования и специального вставления, график становится невидимым. Другими словами, я не могу видеть график, когда код завершает работу.

Я не знаю, что происходит с графиком акций? Может кто-нибудь объяснить и сказать мне решение, чтобы это исправить? Большое спасибо.

Вот мой код:

Sub CreateGraph()
Dim MyRng As Range
Dim LastCell As Long
LastCell = Worksheets(1).Range("E3").End(xlDown).Row
Set MyRng = Worksheets(1).Range("B3:E" & LastCell)
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=MyRng
    ActiveChart.ChartType = xlStockHLC
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart1"
End Sub

Sub FormatChart()
Let Title = Sheets("Sheet1").Cells(2, 1)
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.SeriesCollection(1).Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlCategory).Select
    ActiveChart.Axes(xlCategory).ReversePlotOrder = True
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.SetElement (msoElementChartTitleAboveChart)
    ActiveChart.ChartTitle.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.ChartTitle.Text = Title & "responses*"
    With ActiveChart.ChartTitle.Font
    .Name = "Arial"
    .FontStyle = "Bold"
    .Size = 8
    End With
    With ActiveChart.Axes(xlCategory).TickLabels.Font
    .Name = "Arial"
    .FontStyle = "Regular"
    .Size = 7
    End With
    With ActiveChart.Axes(xlValue).TickLabels.Font
    .Name = "Arial"
    .FontStyle = "Regular"
    .Size = 7
    End With
    With ActiveChart.PlotArea.Interior
    .ColorIndex = 2
    .PatternColorIndex = 1
    .Pattern = xlSolid
    End With
    Range("S4").Select
    ActiveWindow.SmallScroll Down:=48
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Legend.Select
    With ActiveChart.Legend.Font
    .Name = "Arial"
    .FontStyle = "Regular"
    .Size = 8
    End With
    ActiveWindow.SmallScroll Down:=45
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.PlotArea.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveWindow.SmallScroll Down:=-45
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveWindow.SmallScroll Down:=-54
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ChartArea.Width = 500
    ActiveChart.ChartArea.Height = 1000
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    ActiveChart.Axes(xlValue).MinimumScale = 0
    ActiveChart.Axes(xlValue).MaximumScale = 100
    ActiveChart.Axes(xlValue).MajorUnit = 20
    ActiveChart.Axes(xlValue).MajorUnit = 10
        With ActiveChart.SeriesCollection(1)
        .Interior.Color = RGB(0, 51, 153)
    End With
            With ActiveChart.SeriesCollection(2)
        .Interior.Color = RGB(80, 116, 77)
    End With
        ActiveSheet.ChartObjects("Chart 1").Activate
        ActiveSheet.ChartObjects("Chart 1").Activate
    Selection.Cut
    Sheets("Chart2").Select
    ActiveChart.Paste
End Sub

1 Ответ

0 голосов
/ 11 марта 2012

Нупур,

Попробуйте это ( ПРОВЕРЕНО И ИСПЫТАНО )

Замените код

ActiveSheet.ChartObjects("Chart 7").Activate
ActiveSheet.ChartObjects("Chart 7").Activate
Selection.Cut
Sheets("Chart2").Select
ActiveChart.Paste

на

ActiveSheet.ChartObjects("Chart 7").Activate
ActiveChart.Location Where:=xlLocationAsObject, Name:="Chart2"

ПРЕДЛОЖЕНИЕ : Полагаю, вы записали макрос?:) Эти два фрагмента кода делают одно и то же :) Excel, который довольно "скромен", вам просто нужно сказать это один раз;)

ActiveSheet.ChartObjects("Chart 1").Activate
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveSheet.ChartObjects("Chart 1").Activate

и это

ActiveSheet.ChartObjects("Chart 1").Activate

Вы можете безопасно удалить лишние строки.

HTH

Сид

...