VBA – 不正确的graphics代码

首先,感谢过去所有的帮助,这个网站是一个祝福,你们都是圣人。 现在到业务

我遇到了一组testing数据,其他graphics正确,但是,这组数据导致我的graphics看起来错误。 我想我发现了这个问题,但我不确定如何解决这个问题。 当我的代码创build的范围graphics,由于math错误,它不抓住正确的范围。 作为参考, DataLength = 102 ,这就是graphics和一部分数据的样子。 图形 我需要绘制到"CZ"但它只是去D因为fRemainder = 0这里是fRemainder = 0代码。

  Dim iAlpha As Integer, fAlpha As Integer Dim iRemainder As Integer, fRemainder As Integer Dim ConvertToLetter As String Dim fConvertToLetter As String iAlpha = Int((DataLength) / 26) '26 for the letters fAlpha = Int((DataLength + 2) / 26) 'for the average and sd functions, since they start at C not A iRemainder = DataLength - (iAlpha * 26) fRemainder = DataLength + 2 - (fAlpha * 26) If iAlpha > 0 Then ConvertToLetter = Chr(iAlpha + 64) End If If iRemainder > 0 Then ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) End If If fAlpha > 0 Then fConvertToLetter = Chr(fAlpha + 64) End If If fRemainder > 0 Then fConvertToLetter = fConvertToLetter & Chr(fRemainder + 64) End If 

而另外的参考,这是实际的graphics代码是。 第一行从"C13"偏移,但是单元随着每个分组而改变,即, "C13" "C49" "C85"

 ActiveCell.Offset(-7, -2).Select ActiveCell.Range("A1:" & fConvertToLetter & "4").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveCell.Activate Range(Selection, Selection.End(xlToRight)).Select ActiveSheet.Shapes.AddChart.Select With ActiveChart .ChartType = xlLine .Axes(xlCategory).Select .HasTitle = True .ChartTitle.Text = Range("B" & (12 * x - 5)).Value End With With ActiveChart.Parent .Top = 153 * x + 12.75 * 2 ' reposition cells are 12.75 high and there are 36 cells between .Left = 50 ' reposition End With 

有不同的方法来定义图表的范围。 在下面的例子中,我显示了两种方法,一种是制作初始图表,另一种是基于在图表中添加新的系列。 最好删除selectionselectionmacroslogging器使用的语句,而是定义范围variables。 这些范围variables可以根据需要使用.offset函数进行微调。 按照我在animation.gif中显示的代码步骤来帮助理解它是如何工作的,然后根据需要为您的应用程序进行调整。

在这里输入图像说明

 Option Explicit Sub chartRange() Dim r As Range, chObj As ChartObject, ser As Series Set r = ActiveSheet.Range("A1:B5") Set chObj = ActiveSheet.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225) With chObj .chart.ChartType = xlXYScatterLines .chart.SetSourceData Source:=r End With If MsgBox("Plot y2 also?", vbYesNo) Then Set ser = chObj.chart.SeriesCollection.NewSeries Set r = ActiveSheet.Range("A1:A5") ser.XValues = r ser.Values = r.Offset(0, 2) ser.Name = "y2" End If End Sub