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个参数- is系列标签第2个参数-x轴标签的日期范围第4个参数-数据范围
当我像这样硬编码它时,它工作得很好。
ActiveChart.SetSourceData Source:=Range("A1,C1:H1,A3:A4,C3:H4")
我希望当数据在"I“列中填充时,在代码的帮助下,上面的行将变成如下所示
ActiveChart.SetSourceData Source:=Range("A1,D1:I1,A3:A4,D3:I4")
发布于 2015-04-03 20:14:11
您可能想借用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")
您只是设法混淆了引号字符串之外的逗号位置,而这些逗号需要放在其中。例如,在您的原始行中,您有"A1",
,其中引号外的逗号是参数分隔符,而不是范围之间的分隔符。
发布于 2015-04-03 20:23:14
你让你的生活过于复杂了。我个人倾向于将数据加载到表中,并将图表部署到给定表中。当数据集展开时,表也会展开,图表将自动刷新。在你的情况下(共享wb或类似的)可能不起作用,但对我来说,它通常会起作用。
发布于 2015-04-03 19:54:34
最好创建一个中间字符串,并且我用更有效的方法更改了您的ConvertToLetter (我之前也使用了相同的算法;)
试试这个:
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
https://stackoverflow.com/questions/29431508
复制相似问题