根据使用vba填充的新数据更新excelgraphics

Sub Macro1() Dim wb1 As Excel.Workbook Dim lastcolumn As Integer Dim EndColumnname As String Dim StartColumnname As String Set wb1 = ActiveWorkbook wb1.Sheets("Sheet1").Activate lastcolumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column EndColumnname = ConvertToLetter(lastcolumn) StartColumnname = ConvertToLetter(lastcolumn - 4) ActiveSheet.ChartObjects("Chart 6").Activate 'ActiveChart.SetSourceData Source:=Range("A1,C1:H1,A3:A4,C3:H4") ActiveChart.SetSourceData Source:=Range("A1", StartColumnname & 1 & ":" & EndColumnname & 1, "A3:A4", StartColumnname & 3 & ":" & EndColumnname & 4) End Sub Function ConvertToLetter(iCol As Integer) As String Dim iAlpha As Integer Dim iRemainder As Integer iAlpha = Int(iCol / 27) iRemainder = iCol - (iAlpha * 26) If iAlpha > 0 Then ConvertToLetter = Chr(iAlpha + 64) End If If iRemainder > 0 Then ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64) End If End Function 

我得到这一行中的错误

 ActiveChart.SetSourceData Source:=Range("A1", StartColumnname & 1 & ":" & EndColumnname & 1, "A3:A4", StartColumnname & 3 & ":" & EndColumnname & 4) 

错误是 – 编译错误—错误没有。 的论据或无效财产分配

第3个参数 – 系列标签第2个参数 – x轴标签的date范围第4个参数 – 数据范围

它工作正常,当我硬编码像

 ActiveChart.SetSourceData Source:=Range("A1,C1:H1,A3:A4,C3:H4") 

我希望当数据填充在“我”列上面的行成为如下所示的代码的帮助

 ActiveChart.SetSourceData Source:=Range("A1,D1:I1,A3:A4,D3:I4") 

你可能想借用R3uK的ConvertToLetter例程,但是如果你愿意,你可以在一行中设置你的源数据,你只需要修改格式和连接。

更改

 ActiveChart.SetSourceData Source:=Range("A1", StartColumnname & 1 & ":" & _ EndColumnname & 1, "A3:A4", StartColumnname & 3 & ":" & EndColumnname & 4) 

 ActiveChart.SetSourceData Source:=Range("A1," & StartColumnname & "1:" & _ EndColumnname & "1, A3:A4," & StartColumnname & "3:" & EndColumnname & "4") 

当你需要在里面的时候,你只是设法把自己和引用的string之外的逗号混淆起来。 例如,在原始行中,您有"A1",其中引号之外的逗号是参数分隔符,而不是范围之间的分隔符。

你过于复杂的生活。 我个人倾向于将我的数据加载到表中 ,并将图表部署到指定的表格。 当数据集扩展时,表格也会展开,并且您的图表将自行刷新。 可能不适用于你的情况(共享wb或这样的),但对我来说,它通常是诀窍。

最好是创build一个中间string,我用更高效的方式改变了你的ConvertToLetter(我之前也使用了相同的algorithm)

尝试这个 :

 Sub Macro1() Dim Wb1 As Excel.Workbook Dim Ws1 As Worksheet Dim LastColumn As Integer Dim EndColumnname As String Dim StartColumnname As String Dim RgSrc1 As String Dim RgSrc2 As String 'Set wb1 = ActiveWorkbook Set Ws1 = ActiveWorkbook.Sheets("Sheet1") LastColumn = Ws1.Cells(1, Columns.Count).End(xlToLeft).Column EndColumnname = ConvertToLetter(LastColumn) StartColumnname = ConvertToLetter(LastColumn - 4) 'ActiveChart.SetSourceData Source:=Range("A1,C1:H1,A3:A4,C3:H4") RgSrc1 = StartColumnname & 1 & ":" & EndColumnname & 1 RgSrc2 = StartColumnname & 3 & ":" & EndColumnname & 4 ActiveSheet.ChartObjects("Chart 6").SetSourceData Source:=Range("A1", RgSrc1, "A3:A4", RgSrc2) Set Wb1 = Nothing Set Ws1 = Nothing End Sub Public Function ConvertToLetter(iCol As Integer) As String With ActiveSheet.Columns(iCol) ConvertToLetter = Left(.Address(False, False), InStr(.Address(False, False), ":") - 1) End With End Function