Добрый день! Суть проблемы: нужно на большом количестве однотипных графиков расположить вертикальную красную линию.
Сделал следующий макрос: [vba]
Код
Sub PaintLine(Right As Integer) Dim ws As Integer For ws = 1 To Worksheets.Count Worksheets(ws).Activate Dim gr As Integer For gr = 1 To ActiveSheet.ChartObjects.Count ActiveSheet.ChartObjects(gr).Activate diagTop = ActiveChart.PlotArea.Top diagHg = ActiveChart.PlotArea.Height ActiveChart.Shapes.AddConnector(msoConnectorStraight, Right, diagTop, Right, diagTop + diagHg).Select With Selection.ShapeRange.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Weight = 2.5 End With Next gr Next ws End Sub
[/vba]
Линию рисует, но не тех размеров(как на рисунке ниже). Из каких параметров можно получить расстояния отмеченные на рисунке? Или можно сделать как-то по-другому?
Добрый день! Суть проблемы: нужно на большом количестве однотипных графиков расположить вертикальную красную линию.
Сделал следующий макрос: [vba]
Код
Sub PaintLine(Right As Integer) Dim ws As Integer For ws = 1 To Worksheets.Count Worksheets(ws).Activate Dim gr As Integer For gr = 1 To ActiveSheet.ChartObjects.Count ActiveSheet.ChartObjects(gr).Activate diagTop = ActiveChart.PlotArea.Top diagHg = ActiveChart.PlotArea.Height ActiveChart.Shapes.AddConnector(msoConnectorStraight, Right, diagTop, Right, diagTop + diagHg).Select With Selection.ShapeRange.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Weight = 2.5 End With Next gr Next ws End Sub
[/vba]
Линию рисует, но не тех размеров(как на рисунке ниже). Из каких параметров можно получить расстояния отмеченные на рисунке? Или можно сделать как-то по-другому?
Sub PaintLine(Right#) Dim gr As Long, ws As Long For ws = 1 To Worksheets.Count With Worksheets(ws) For gr = 1 To .ChartObjects.Count With .ChartObjects(gr).Chart With .Shapes.AddConnector(msoConnectorStraight, Right, .PlotArea.Top, Right, .Axes(xlCategory).Top) .Line.ForeColor.RGB = RGB(255, 0, 0) .Line.Weight = 2.5 End With End With Next gr End With Next ws End Sub
[/vba]
попробуйте так: [vba]
Код
Sub PaintLine(Right#) Dim gr As Long, ws As Long For ws = 1 To Worksheets.Count With Worksheets(ws) For gr = 1 To .ChartObjects.Count With .ChartObjects(gr).Chart With .Shapes.AddConnector(msoConnectorStraight, Right, .PlotArea.Top, Right, .Axes(xlCategory).Top) .Line.ForeColor.RGB = RGB(255, 0, 0) .Line.Weight = 2.5 End With End With Next gr End With Next ws End Sub
Sub PaintLine(Right#) Dim gr As Long, ws As Long For ws = 1 To Worksheets.Count With Worksheets(ws) For gr = 1 To .ChartObjects.Count With .ChartObjects(gr).Chart With .Shapes.AddConnector(msoConnectorStraight, Right, .Axes(xlValue).Top, Right, .Axes(xlCategory).Top) .Line.ForeColor.RGB = RGB(255, 0, 0) .Line.Weight = 2.5 End With End With Next gr End With Next ws End Sub
[/vba]
а так: [vba]
Код
Sub PaintLine(Right#) Dim gr As Long, ws As Long For ws = 1 To Worksheets.Count With Worksheets(ws) For gr = 1 To .ChartObjects.Count With .ChartObjects(gr).Chart With .Shapes.AddConnector(msoConnectorStraight, Right, .Axes(xlValue).Top, Right, .Axes(xlCategory).Top) .Line.ForeColor.RGB = RGB(255, 0, 0) .Line.Weight = 2.5 End With End With Next gr End With Next ws End Sub
Вот еще вопрос, я передаю смещение по оси X параметром (предварительно подобрав на глаз на каком-нибудь графике).
Хотелось бы сделать это через передачу значения с оси X, а не количеством точек от края документа, т.е. я передаю параметр "0:20", он находит это значение на графике(на горизонтальной оси) и рисует линию там.
Возможно ли это? Если да, то куда копать?)
nilem, спасибо, работает
Вот еще вопрос, я передаю смещение по оси X параметром (предварительно подобрав на глаз на каком-нибудь графике).
Хотелось бы сделать это через передачу значения с оси X, а не количеством точек от края документа, т.е. я передаю параметр "0:20", он находит это значение на графике(на горизонтальной оси) и рисует линию там.