【问题标题】:Chart displaying the same number on all y axis ticks在所有 y 轴刻度上显示相同数字的图表
【发布时间】:2019-11-06 08:15:19
【问题描述】:

我对 VBA 还很陌生,所以我提供的代码可能远未优化。 不过,我很乐意听到可以改进的地方!

我有一张包含两列数据的工作表、一个用于条目的单元格、一个散点图和三个按钮。 该图表应该简单地绘制两列并将输入单元格的值添加为垂直线。 一个按钮应该刷新图表(例如调整轴)。 另一个应该通过将存储在另一个隐藏表中的一些数据插入到两列以及输入单元格中来显示一个示例,然后刷新图表。 最后一个按钮应该只是简单地重置工作表,以便数据列以及输入单元格为空,并且应该隐藏图表。

问题: 但是刷新按钮不起作用。 它似乎根据新输入的数据调整图表的查看字段的大小。但 y 轴上显示的数字始终为 0.05。 我提供了一张图片来向您展示我的意思:

当我按下示例按钮时,y 轴显示正确的值。我尝试先将列中的数据复制到不同的工作表,然后刷新图表,然后将数据粘贴回列中,但没有成功。

我注意到当图表仅显示 0.05 并且我单击图表以“选择数据”并简单地选择第二个系列时,y 值会更改为应有的值,我可以关闭窗口并保持原样应该直到我再次按下刷新按钮。

也许我的代码存在我不知道的缺陷?也许我需要,而不是刷新图表,每次都删除旧的并创建一个新的?但是,我已经尝试过,结果相同。也许代码必须以不同的顺序编写?

示例按钮:

Private Sub ExampleBtn_Click()

Call RefreshBtn_Click

Range("C5:D27").ClearContents 'data columns

Range("C5:D14").Value = Sheets("ExampleSheet").Range("A1:B10").Value
Range("O3").Value = 3.5 'entry cell

End Sub

重置按钮:

Private Sub ResetBtn_Click()

ActiveSheet.ChartObjects(1).Visible = False

Range("C5:D27").ClearContents 'data columns
Range("O3").ClearContents 'entry cell
Range("C5").Select

End Sub

刷新按钮:

Private Sub RefreshBtn_Click()

ActiveSheet.Unprotect
Application.ScreenUpdating = False


ActiveSheet.ChartObjects(1).Visible = True

'range of Nachdruckzeit
Set zeit = Range("C5:C27")

'range of Masse
Set masse = Range("D5:D27")

yMax = Application.WorksheetFunction.max(Range("D5:D27")) + 0.02
yMin = Application.WorksheetFunction.min(Range("D5:D27")) - 0.02

'refresh the chart
With ActiveSheet.ChartObjects(1)
    .Width = Range("F5:P30").Width
    .Height = Range("F5:P30").Height

    If .Chart.SeriesCollection.Count = 1 Then
        .Chart.SeriesCollection(1).Delete
    ElseIf .Chart.SeriesCollection.Count = 2 Then
        .Chart.SeriesCollection(2).Delete
        .Chart.SeriesCollection(1).Delete
    End If

    With .Chart.SeriesCollection.NewSeries
        .XValues = zeit
        .Values = masse
        .Name = "Siegelpunktermittlung"
        .HasDataLabels = False
    End With

    t = Range("O3").Value 'entry cell
    With .Chart.SeriesCollection.NewSeries
        .Name = "gewaehlt"
        .XValues = Array(t, t)
        .Values = Array(0, yMax)
        .MarkerStyle = xlMarkerStyleNone
        .Border.Color = vbWhite
    End With
End With

'Cosmetics
With ActiveSheet.ChartObjects(1).Chart
  .HasLegend = False
  .ChartArea.Format.Fill.Visible = msoFalse
  .PlotArea.Format.Fill.Visible = msoFalse
  .SeriesCollection(1).MarkerStyle = xlMarkerStyleCircle
  .SeriesCollection(1).Format.Fill.ForeColor.RGB = RGB(251, 243, 223)
  .SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 140, 0)
  .SeriesCollection(1).MarkerForegroundColorIndex = -4142

  'x-axis
  With .Axes(xlCategory)
    .HasTitle = True
    .TickLabels.Font.Color = vbWhite
    .AxisTitle.Font.Size = 12
    .AxisTitle.Font.Color = vbWhite
    .AxisTitle.Caption = "Nachdruckzeit [s]"
  End With

  'y-axis
  With .Axes(xlValue)
    .HasTitle = True
    .MinimumScale = yMin
    .MaximumScale = yMax
    .TickLabels.Font.Color = vbWhite
    .AxisTitle.Font.Size = 12
    .AxisTitle.Font.Color = vbWhite
    .AxisTitle.Caption = "Masse [g]"
  End With
End With


Application.ScreenUpdating = True
ActiveSheet.Protect

End Sub


【问题讨论】:

  • 能否请您添加您的 excelsheet 的屏幕截图。

标签: excel vba charts axis


【解决方案1】:

我找到了解决问题的方法:

问题在于图表的数据单元格具有数字格式,无论出于何种原因,它都会弄乱图表。将格式更改为标准即可解决问题。

如果有人知道更改单元格格式时为什么会出现此问题,请告诉我。

【讨论】:

  • 导致出现不良轴标签的格式是什么。
  • 我将它设置为默认的“数字”格式,因为它们是只包含数字的列。
  • 默认为“General”,但不会那样做。工作表的格式是否为 0.000 数字格式?这会将 0.0045 和 0.0054999 之间的所有数字格式化为 0.005。
猜你喜欢
  • 2021-08-13
  • 1970-01-01
  • 2014-01-18
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2013-01-22
相关资源
最近更新 更多