工作表中生成的数据标签值有时不显示

时间:2013-07-18 17:13:08

标签: excel-vba charts vba excel

我在Excel 2010中生成值,最初将它们放入一个数组中,然后将它们复制到工作表中以用作logarithmix x轴的数据标签(实际上调用Chart Labeller来做到这一点,但这也发生在我手动通过Excel申请)。在大多数情况下,这没有问题。但是,在某些情况下,某些(但不是全部)数据标签不可见,即使工作表中的数据存在,手动选择数据标签也会显示一个不可见的标签。

我发现了,我认为这可能是Excel中的一个错误,当我转到工作表并重新输入未在图表上显示的值时,它会显示在图表上。

这是我对阵列的朦胧:

Dim chart_labeler_info_x()

以下是我填充数组的方法:

'Assuming we are going to do the x-axis

ReDim chart_labeler_info_x(1 To x_axis_interval_num, 1 To 3)
For k = 1 To x_axis_interval_num
    'Column 1 is the new chart label value, column 2 is the y value of the new series , column 3 is the x value(equivalent to 111...)

    '--------------------------------------------------------
    chart_labeler_info_x(k, 1) = suf_ize(10 ^ (Log(x_axis.MinimumScale) / Log(10#) + (k - 1)))
    chart_labeler_info_x(k, 2) = y_axis.MinimumScale
    chart_labeler_info_x(k, 3) = 10 ^ (Log(x_axis.MinimumScale) / Log(10#) + (k - 1))
    '--------------------------------------------------------
Next k

以下是我在工作表上初始化范围的方法:

Set new_labeler_ws_x_axis = Sheets.Add
new_labeler_ws_x_axis.Name = Chart_for_series & "Eng_Labels_X_Axis"

new_labeler_ws_x_axis.Range("a1:c" & x_axis_interval_num).Value = chart_labeler_info_x
new_labeler_ws_x_axis.Range("a1:c" & x_axis_interval_num).Font.Name = "Arial"
new_labeler_ws_x_axis.Range("a1:c" & x_axis_interval_num).Font.Size = 7

我还创建了一个附加到此范围的新系列:

With ActiveChart.SeriesCollection.NewSeries
    .XValues = Sheets(new_labeler_ws_x_axis.Name).Range("C1:C" & x_axis_interval_num)
    .Values = Sheets(new_labeler_ws_x_axis.Name).Range("B1:B" & x_axis_interval_num)
    .Name = "=""Labeller_x"""
    .Border.Color = RGB(0, 0, 0)
    .Format.line.Visible = True
End With

工作表中生成的数据如下所示:

1m          100 0.001
10m         100 0.01
100m        100 0.1
1           100 1
10          100 10
100         100 100
1k          100 1000

第1列具有将用作新数据标签的值。第2列是y值,第3列是实际的x值。 (如果有帮助,我可以附上工作表。)

以下是我所说的图片:

Chart labels

您注意到应该存在的1k数据标签不可见。

我可以使1k数据标签出现以下两种方式之一:

  1. 扩展系列的最大值,在本例中为10,000(10k),在这种情况下,1k标签显示。
  2. 手动转到工作表,选择具有1000值的单元格,重新输入值1000并按回车键,然后数据标签显示为1k。
  3. 其他一些有趣的异常,当最大值为100时,100的数据标签也会消失。随着最大值增加到1000以上,数据标签似乎都没有出现问题。

    我已经尝试将数字格式(一般情况下)更改为数字,小数点后两位,没有运气。改为文字和背面,没有运气。

    我认为这是一个错误,但是没有在信息中找到,那里的任何专家能否对此有所启发?

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,虽然有些黑客,我认为它强调了问题的实际可能性,也许有人可以提出更优雅的解决方案。

我添加了此代码块的最后一行:

    chart_labeler_info_x(k, 1) = suf_ize(10 ^ (Log(x_axis.MinimumScale) / Log(10#) + (k - 1)))
    chart_labeler_info_x(k, 2) = y_axis.MinimumScale
    chart_labeler_info_x(k, 3) = 10# ^ (Log(x_axis.MinimumScale) / Log(10#) + (k - 1#))
    'This line did the trick
    If chart_labeler_info_x(k, 3) >= 1 Then chart_labeler_info_x(k, 3) = Round(chart_labeler_info_x(k, 3), 0)

正如我之前所说,我们发现手动更新单元格中的值会导致标签可见。我们尝试将Round函数应用于单元格中的值,这是有效的,所以我把它作为代码的检查,值为1和更高。

看来,即使所显示的单元格值为1000,内部也不一定如此。 (我检查了.value和.value2,他们都报告了1000.)我认为这个错误就在于这种情况。如果系列的最大值增加,则会出现1k标签,即使它与用于生成值的数学相同。

也许有人可以解释为什么会这样,并提供更优雅的解决方案!

谢谢,

拉​​斯

相关问题