Vba 宏在轴图上添加线/轴图中的原点位置

Vba 宏在轴图上添加线/轴图中的原点位置,vba,excel,charts,pivot-table,Vba,Excel,Charts,Pivot Table,Excel2007,VB6.3 我创建了一个透视图(透视表中的图表),类型为xlCylinderColStacked。y轴刻度:最小0%,最大2%。 我想在0.7%的目标级别添加一条水平线(目标不是固定的,但应从另一张表中的另一个单元格中获取:target=Sheets(“equalenti”)。范围(“N6”)。值) 命令应该类似于 .Shapes.AddLine(60, vertical_position, 940, vertical_position).Line 我试图创建一个公式来计

Excel2007,VB6.3

我创建了一个透视图(透视表中的图表),类型为xlCylinderColStacked。y轴刻度:最小0%,最大2%。 我想在0.7%的目标级别添加一条水平线(目标不是固定的,但应从另一张表中的另一个单元格中获取:target=Sheets(“equalenti”)。范围(“N6”)。值) 命令应该类似于

 .Shapes.AddLine(60, vertical_position, 940, vertical_position).Line
我试图创建一个公式来计算给定的垂直位置。轴(xlValue)。最大刻度。轴(xlValue)。最小刻度。ChartArea.Top。PlotArea.Height,但我找不到解决方案。有什么想法吗

基本上,如果我知道原点(y轴上的0%)从左上角的准确位置,那么放置水平线是很容易的,左上角作为图表区域上的.top和.left度量的参考

我在下面报告四分之二图表的完整代码(一种情况下更正为8,另一种情况下更正为27——我只关心垂直位置)

要创建行(在模块中),请执行以下操作:

根据C8中存储的值(在表内)进行更改:


单元格C9和C10是两个校正值(值=4),我找不到存储位置(属性)。如果更改大小或值,则线将更新位置。如果调整图表的大小,则不会。

我没有找到它存储的值的位置,但我们可以使用此宏(仅在第一次启动时)以友好方式获取每个图表的值:

此宏在获取左侧和顶部并向后移动绘图区域后,无法将绘图区域移动到一个区域(-12,-12)。
Left和Top get的值等于disallignment。。。尝试使用不同的图表。如果可行,我们有一个可能的解决方案。我搜索了很多,但没有找到存储的此值。
两个值应在以下行中替换:

x = Selection.Left + ActiveChart.PlotArea.InsideLeft + DisY
y = Selection.Top + ActiveChart.PlotArea.InsideTop + DisX

太好了,我只是不明白纠正的价值是什么,它是如何工作的。它的固定值是4吗?为什么?为什么使用“+Range(“C10”).Value”和“+Range(“C9”).Value”而不是“+4”?我找不到excel存储此值的位置,而是从两个单元格C9和C10中获取这些值来更改和校准。。。我想可以在分辨率和Excel版本的基础上进行更改…这一定取决于其他方面。因为它不能正常工作!!!总的来说,它可以在四个图表中的两个图表中工作(当它不能正常工作时,这是因为连接器的垂直位置略高于实际目标值)。在我测试解决方案的四个图表中,DisX和DisY变量都等于4。然而,连接器的垂直位置仅在两种情况下正确计算。我会继续做这件事…但是用手动调整,你需要增加什么值?图表是不同类型的,如果是,区别在哪里?
Public NameLine As String

Sub LinePt()
    ActiveSheet.ChartObjects("Chart 14").Activate
    x = Selection.Left + ActiveChart.PlotArea.InsideLeft + Range("C10").Value
    y = Selection.Top + ActiveChart.PlotArea.InsideTop + Range("C9").Value
    x1 = x + ActiveChart.PlotArea.InsideWidth
    step = ActiveChart.Axes(xlValue).Height / (ActiveChart.Axes(xlValue).MaximumScale - ActiveChart.Axes(xlValue).MinimumScale)
    y1 = step * (ActiveChart.Axes(xlValue).MaximumScale - ActiveChart.Axes(xlValue).MinimumScale - (Range("C8").Value - ActiveChart.Axes(xlValue).MinimumScale))

    ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x, y + y1, x1, y + y1).Select
    NameLine = Selection.Name
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    xx = ActiveCell.Address

    ActiveSheet.ChartObjects("Chart 14").Activate
    x = Selection.Left + ActiveChart.PlotArea.InsideLeft + Range("C10").Value
    y = Selection.Top + ActiveChart.PlotArea.InsideTop + Range("C9").Value
    x1 = x + ActiveChart.PlotArea.InsideWidth
    step = ActiveChart.Axes(xlValue).Height / (ActiveChart.Axes(xlValue).MaximumScale - ActiveChart.Axes(xlValue).MinimumScale)
    y1 = step * (ActiveChart.Axes(xlValue).MaximumScale - ActiveChart.Axes(xlValue).MinimumScale - (Range("C8").Value - ActiveChart.Axes(xlValue).MinimumScale))

    ActiveSheet.Shapes.Range(Array(NameLine)).Select
    Selection.Top = y + y1
    Selection.Left = x
    Selection.Width = x1 - x

    Range(xx).Select
End Sub
Public NameLine As String
Public DisX, DisY As Double

Sub FindDisXY()
    Dim TmpX, TmpY As Double

    ActiveSheet.ChartObjects("Chart 14").Activate
    TmpX = ActiveChart.PlotArea.Left
    TmpY = ActiveChart.PlotArea.Top
    ActiveChart.PlotArea.Left = -12
    ActiveChart.PlotArea.Top = -12

    DisX = -ActiveChart.PlotArea.Left
    DisY = -ActiveChart.PlotArea.Top
    ActiveChart.PlotArea.Left = TmpX
    ActiveChart.PlotArea.Top = TmpY
End Sub
x = Selection.Left + ActiveChart.PlotArea.InsideLeft + DisY
y = Selection.Top + ActiveChart.PlotArea.InsideTop + DisX