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个参数 - 是系列标签 第二个参数 - x轴标签的日期范围 第四个参数 - 数据范围
当我像
那样硬编码时,它工作正常ActiveChart.SetSourceData Source:=Range("A1,C1:H1,A3:A4,C3:H4")
我希望在“I”列中填充数据时,上面的行在代码的帮助下变为如下所示
ActiveChart.SetSourceData Source:=Range("A1,D1:I1,A3:A4,D3:I4")
答案 0 :(得分:1)
您可能希望借用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",
,其中引号外的逗号是参数分隔符,而不是范围之间的分隔符。
答案 1 :(得分:1)
你过度复杂的生活。我个人倾向于将我的数据加载到表中并将图表部署到给定的表。当数据集扩展时,表格也会扩展,您的图表将自动刷新。可能不适用于您的情况(共享wb等),但对我而言,它通常可以解决问题。
答案 2 :(得分:0)
创建一个中间字符串更好,我用更高效的东西改变了你的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