我在Excel 2010中生成值,最初将它们放入数组中,然后将它们复制到工作表中作为对数混合x轴的数据标记(实际上调用图表标记器来实现这一点,但当我通过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值.(如果有帮助的话,我可以附上工作表。)
下面是我所说的一幅图片:

您注意到应该在那里的1k数据标签是不可见的。
我可以将1k数据标签显示为两种方式之一:
其他一些有趣的异常,当最大值为100时,100的数据标签也会消失。当最大值超过1000时,数据标签似乎不存在任何问题。
我试着把数字的格式,这一般,数字,用两个小数位,没有运气。换到短信然后再回来,没有运气。
我认为这是一个错误,但还没有在信息中发现,有任何专家能照亮这一点吗?
发布于 2013-07-19 14:31:33
我找到了一个解决方案,虽然有点麻烦,但我认为它强调了问题的实质,也许有人可以提出一个更优雅的解决方案。
我添加了这个代码块的最后一行:
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标签,尽管它与生成值所用的数学相同。
也许有人可以解释为什么会发生这种情况,并提供一个更优雅的解决方案!
谢谢,
拉斯
https://stackoverflow.com/questions/17729937
复制相似问题