Как я могу построить диаграммы в Excel в предопределенном месте, каждый раз, когда я запускаю макрос для построения диаграмм? - PullRequest
0 голосов
/ 17 марта 2019

Мне нужно строить диаграммы в предопределенной позиции на рабочем листе, когда я запускаю макрос для построения диаграмм. Проблема в том, что графики автоматически отображаются странным образом, и мне это не нравится. Я хочу убедиться, что могу заранее определить точные позиции, в которых я хочу, чтобы графики были построены при запуске макроса. Я приложил 2 изображения здесь, 1 изображение показывает, как оно в настоящее время строится, а другое показывает, как я хочу построить графики. Любая помощь будет принята с благодарностью.

Вот как я хочу, чтобы графики отображались на листе: This is how I want the charts to be shown on the sheet

Вот как он отображается в данный момент: одна круговая диаграмма перекрывает другую, а линейный график скрывает кнопки макросов. This is how it's currently showing up, with one pie chart overlapping the other and the line chart obscuring the macro buttons as well

Это код, который я использовал, начиная с линейной диаграммы, за которой следуют круговые диаграммы. Я новичок в VBA и кодировании, поэтому, пожалуйста, извините структуру кода.

' CHART Code

Dim chart As chart

Dim k As Integer
Dim p As Integer
Dim j As Integer

Dim arrDEM() As Long

Dim arrDATE() As Integer

ReDim arrDEM(1 To 65) As Long

ReDim arrDATE(1 To 65) As Integer


            Dim DEM As Integer

            j = findcell.Select

            ActiveCell.Offset(0, 1).Select

             For DEM = 1 To 65
             arrDEM(DEM) = ActiveCell.Value
             ActiveCell.Offset(0, 1).Select

             Next DEM


             Debug.Print arrDEM(65)


             Range("B1").Activate

            For p = 1 To 65


            arrDATE(p) = ActiveCell.Value


            ActiveCell.Offset(0, 1).Select
            Next p


            Debug.Print arrDATE(65)


            Range("B31:B031") = arrDEM

            Range("B31:B031").Select


Set cht1 = ActiveSheet.ChartObjects.Add(Left:=200, Width:=4500, Top:=200, Height:=4000)

ActiveSheet.Shapes.AddChart.Select
Set chart = ActiveChart
chart.ChartType = 4





chart.SeriesCollection(1).Name = x
chart.SeriesCollection(1).XValues = arrDATE
chart.SeriesCollection(1).Values = arrDEM





 With ActiveChart

  'chart name
 .HasTitle = True
 .ChartTitle.Characters.Text = "Demand Distribution"


 'X axis name
 .Axes(xlCategory, xlPrimary).HasTitle = True
 .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Weeks"
    'y-axis name
 .Axes(xlValue, xlPrimary).HasTitle = True
 .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Demand"





 'Copy chart from Original file
  ActiveChart.ChartArea.Copy

 'Paste chart in destination file
   Worksheets("Model Calculations").Paste

  'Deleting Charts
Worksheets("Sheet1").ChartObjects.Delete


  'Activating destination chart
   Worksheets("Model Calculations").Activate

 Application.DisplayAlerts = False
End With

' PieC Macro

Range("C10:D11").Select
ActiveSheet.Shapes.AddChart2(262, xl3DPie).Select
ActiveChart.SetSourceData Source:=Range("'Model Calculations'!$C$10:$D$11")

With ActiveChart

  'chart name
 .HasTitle = True
 .ChartTitle.Characters.Text = "Continuous Review"
 '  .Name = "Continuous Chart"


 End With



 '    PieP Macro
 '


Range("C10,D10,C12,D12").Select

ActiveSheet.Shapes.AddChart2(262, xl3DPie).Select
ActiveChart.SetSourceData Source:=Range("'Model Calculations'!$C$10,'Model Calculations'!$D$10,'Model Calculations'!$C$12,'Model Calculations'!$D$12")



With ActiveChart

  'chart name
 .HasTitle = True
 .ChartTitle.Characters.Text = "Periodic Review"
 '.Name = "Periodic Chart"
 End With


End Sub

1 Ответ

0 голосов
/ 28 марта 2019

Ваш код может использовать некоторую помощь разными способами. Чтобы ответить на ваш вопрос, я проигнорирую все это и исправлю один кусок кода. Вот что я заменяю:

' PieC Macro

Range("C10:D11").Select
ActiveSheet.Shapes.AddChart2(262, xl3DPie).Select
ActiveChart.SetSourceData Source:=Range("'Model Calculations'!$C$10:$D$11")

With ActiveChart
  'chart name
  .HasTitle = True
  .ChartTitle.Characters.Text = "Continuous Review"
  '  .Name = "Continuous Chart"
End With

Я начну с объявления и присвоения нескольких переменных, затем создам, заполню и расположу диаграмму.

Dim WkSht As Worksheet
Set WkSht = Worksheets("Model Calculations")
WkSht.Activate

Dim rChartData As Range
Set rChartData = WkSht.Range("C10:D11")

Dim rChartCover As Range
Set rChartCover = WkSht.Range("F10:K18")

Dim NewChart As Chart
Set NewChart = WkSht.Shapes.AddChart2(262, xl3DPie).Chart

With NewChart
  .SetSourceData rChartData

  With .Parent
    .Left = rChartCover.Left
    .Top = rChartCover.Top
    .Width = rChartCover.Width
    .Height = rChartCover.Height
  End With
End With

Вы можете заменить это:

Set WkSht = Worksheets("Model Calculations")
WkSht.Activate

с этим:

Set WkSht = ActiveSheet

, чтобы сделать его более общим, и если вы знаете положение и размер полученного графика, вы можете подключить их вместо использования положения и размера данного диапазона (как я использовал rChartCover выше).

...