0

我想将数字(0)添加到值中并发现一些麻烦。Excels 宏将此记录为

Sub Makro2()
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).XValues = _
        "='Sheet'!$C$221;'Sheet'!$C$223;'Sheet'!$C$225"
    ActiveChart.SeriesCollection(2).Values = _
        "='Sheet'!$B$222;'Sheet'!$B$224;'Sheet'!$B$226"
End Sub

但是当我对我的代码尝试同样的操作时,我得到了错误。

Dim lineSeries1 As Range
Dim lineSeries2 As Range
With ActiveChart.SeriesCollection.NewSeries
    .Values = "={0;100}" 'It works 
    .Name = ""
    .XValues = "={0;100}" 'It works 
End With

With ActiveChart.SeriesCollection.NewSeries
    .Values = lineSeries1 ' + {0} or & SomeCellWithZero.Address
    .Name = ""
    .XValues = lineSeries2  ' + {0} or & SomeCellWithZero.Address
End With

所以问题是如何将零添加到值?

4

1 回答 1

2

就我个人而言,我会将我的范围扩大一个单元格并添加一个恒定的零值。如果由于某种原因无法做到这一点,那么以下内容可能会有所帮助;-)

这是到达那里的稍微迂回的方式。可能可以用更少的步骤来完成,但我还看不出怎么做。

我将使用 VBA 函数从包含零的原始范围构建一个新数组。我将零放在数组的开头,将代码更改为不同的东西。这是VBA函数:

Public Function PrependZero(rng As range)    
Dim val As Variant, res As Variant
Dim idx As Long
    val = Application.Transpose(rng.Columns(1).Value) ' get range values as a 1-dimensional array, assumes values are in a column
    ReDim res(LBound(val) To UBound(val) + 1) ' array to hold the extended values
    res(LBound(res)) = 0 ' add the fixed value        
    For idx = LBound(val) To UBound(val)
        res(idx + 1) = val(idx) ' copy the other values
    Next        
    PrependZero = res        
End Function

Excel 似乎不喜欢我们在系列定义中使用 VBA 函数,所以我们需要添加一些间接来欺骗它。创建一个新的命名公式(公式...定义名称)。我打电话给我YSeries并将“引用”值设置为=PrependZero(Sheet1!$A$2:$A$6),使用我的 Y 值范围作为函数的输入。

该命名公式用于图表系列定义:将“系列 Y 值”设置为[YourWorkbookNameHere]!YSeries(使用您在上面创建的任何名称)。

如果您想对 X 值执行相同的操作,则应该使用相同的方法。

于 2012-05-22T09:12:00.927 回答