首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从工作表生成的数据标签值有时不会显示

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

Stack Overflow用户
提问于 2013-07-18 17:13:07
回答 1查看 890关注 0票数 1

我在Excel 2010中生成值,最初将它们放入数组中,然后将它们复制到工作表中作为对数混合x轴的数据标记(实际上调用图表标记器来实现这一点,但当我通过Excel手动应用时也会发生这种情况)。在大多数情况下,这是很好的工作,没有问题。但是,在某些情况下,即使工作表中的数据存在,也有一些(但不是全部)数据标签不可见,但手动选择数据标签会显示选定的不可见标签。

我所发现的,我认为这可能是Excel中的一个错误,当我转到工作表,然后重新键入没有显示在图表上的值,它就会显示在图表上。

这是我的昏暗的数组:

代码语言:javascript
复制
Dim chart_labeler_info_x()

下面是如何填充数组:

代码语言:javascript
复制
'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

下面是如何初始化工作表上的范围:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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值.(如果有帮助的话,我可以附上工作表。)

下面是我所说的一幅图片:

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

我可以将1k数据标签显示为两种方式之一:

  1. 将系列的最大值扩展到10,000 (10k),在这种情况下,1k标签显示。
  2. 手动转到工作表,选择具有1000个值的单元格,重新输入值1000并按返回,然后数据标签显示为1k。

其他一些有趣的异常,当最大值为100时,100的数据标签也会消失。当最大值超过1000时,数据标签似乎不存在任何问题。

我试着把数字的格式,这一般,数字,用两个小数位,没有运气。换到短信然后再回来,没有运气。

我认为这是一个错误,但还没有在信息中发现,有任何专家能照亮这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-19 14:31:33

我找到了一个解决方案,虽然有点麻烦,但我认为它强调了问题的实质,也许有人可以提出一个更优雅的解决方案。

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

代码语言:javascript
复制
    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)

如前所述,我们发现手动更新单元格中的值会导致标签可见。我们尝试将圆形函数应用于单元格中的值,这起了作用,因此我将其作为代码中的检查,其值为1或更高。

看起来,即使显示的单元格值是1000,在内部,它也不能是。(我查过.value和.value2,他们都报告了1000。)我认为这种错误有时会发生。如果增加了系列的最大值,就会出现1k标签,尽管它与生成值所用的数学相同。

也许有人可以解释为什么会发生这种情况,并提供一个更优雅的解决方案!

谢谢,

拉斯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17729937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档