Excel 根据动态用户范围绘制图表的步骤
目的是根据Excel 根据动态用户范围绘制图表的步骤,excel,vba,excel-charts,Excel,Vba,Excel Charts,目的是根据列A(X轴)绘制值。用户在单元格G4中选择一个列名,G4的值可以是B,C,C,D。必须根据列名绘制图表 我能够编写下面的代码来选择数据,但是我不能动态地选择数据 Sub Chart() Dim Lastrow As Long Dim TimeAxis As Range Dim Values As Range Dim cht As Object Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row TimeAxis = R
列A
(X轴)绘制值。用户在单元格G4
中选择一个列名,G4
的值可以是B
,C
,C
,D
。必须根据列名绘制图表
我能够编写下面的代码来选择数据,但是我不能动态地选择数据
Sub Chart()
Dim Lastrow As Long
Dim TimeAxis As Range
Dim Values As Range
Dim cht As Object
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
TimeAxis = Range("A1:A" & Lastrow).Select '<----- X Axis (Static)
Values = Range("B1:B" & Lastrow).Select '<----- User selected as per cell G4 (Dynamic)
'Plot TimeAxis Vs Values
Set cht = ActiveSheet.Shapes.AddChart2
cht.Chart.SetSourceData Source:=rng '<------ User Range (Dynamic)
cht.Chart.ChartType = xlXYScatterLines
End Sub
子图表()
最后一排一样长
变暗时间轴作为范围
将值设置为范围
作为对象的Dim-cht
Lastrow=ActiveSheet.Cells(Rows.Count,1).End(xlUp).Row
时间轴=范围(“A1:A”&Lastrow)。选择“请注意,行计数变量的类型必须为Long
,因为Excel的行数超过Integer
所能处理的行数:将Lastrow的行数设为Long
。我建议使用VBA,因为Integer
没有任何好处
必须使用设置时间轴
(因为范围是对象)并删除。选择
。也看到
.
最后,Set
yourrng
否则它是空的,您不能在Source:=rng
中使用它
所以你最终会得到这样的结果:
Option Explicit
Sub GenerateChart() 'dont use "chart" as procedure name it is a type in VBA and therefore a reserved word
Dim LastRow As Long
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
Dim TimeAxis As Range
Set TimeAxis = Range("A2:A" & LastRow) 'X Axis values start at A2!!!
Dim SelCol As String
SelCol = ActiveSheet.Range("G4") 'read column name from G4
Dim Values As Range
Set Values = Range(SelCol & "1:" & SelCol & LastRow) '<----- User selected as per cell G4 (Dynamic)
'Plot TimeAxis Vs Values
Dim cht As Object
Set cht = ActiveSheet.Shapes.AddChart2
cht.Chart.SetSourceData Source:=Values '<------ User Range (Dynamic)
cht.Chart.FullSeriesCollection(1).XValues = TimeAxis 'x axis values
cht.Chart.ChartType = xlXYScatterLines
End Sub
选项显式
Sub-GenerateChart()'不要使用“图表”作为过程名称。它是VBA中的一种类型,因此是保留字
最后一排一样长
LastRow=ActiveSheet.Cells(ActiveSheet.Rows.Count,1).End(xlUp).Row
变暗时间轴作为范围
设置时间轴=范围(“A2:A”&LastRow)”X轴值从A2开始!!!
像线一样暗淡的颜色
SelCol=ActiveSheet.Range(“G4”)从G4读取列名
将值设置为范围
Set Values=Range(SelCol&“1:&SelCol&LastRow)请注意,行计数变量的类型必须为Long
,因为Excel的行数超过Integer
可以处理的行数:Dim LastRow As Long
。我建议使用VBA,因为Integer
没有任何好处
必须使用设置时间轴
(因为范围是对象)并删除。选择
。也看到
.
最后,Set
yourrng
否则它是空的,您不能在Source:=rng
中使用它
所以你最终会得到这样的结果:
Option Explicit
Sub GenerateChart() 'dont use "chart" as procedure name it is a type in VBA and therefore a reserved word
Dim LastRow As Long
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
Dim TimeAxis As Range
Set TimeAxis = Range("A2:A" & LastRow) 'X Axis values start at A2!!!
Dim SelCol As String
SelCol = ActiveSheet.Range("G4") 'read column name from G4
Dim Values As Range
Set Values = Range(SelCol & "1:" & SelCol & LastRow) '<----- User selected as per cell G4 (Dynamic)
'Plot TimeAxis Vs Values
Dim cht As Object
Set cht = ActiveSheet.Shapes.AddChart2
cht.Chart.SetSourceData Source:=Values '<------ User Range (Dynamic)
cht.Chart.FullSeriesCollection(1).XValues = TimeAxis 'x axis values
cht.Chart.ChartType = xlXYScatterLines
End Sub
选项显式
Sub-GenerateChart()'不要使用“图表”作为过程名称。它是VBA中的一种类型,因此是保留字
最后一排一样长
LastRow=ActiveSheet.Cells(ActiveSheet.Rows.Count,1).End(xlUp).Row
变暗时间轴作为范围
设置时间轴=范围(“A2:A”&LastRow)”X轴值从A2开始!!!
像线一样暗淡的颜色
SelCol=ActiveSheet.Range(“G4”)从G4读取列名
将值设置为范围
设置值=范围(SelCol和“1:”&SelCol和LastRow)'On lineSet cht=ActiveSheet.Shapes.AddChart2
它给出了以下错误运行时错误'438':对象不支持此属性或方法
,因此我将该行更改为Set cht=ActiveSheet.Shapes.AddChart
,但现在它在第cht.Chart.FullSeriesCollection(1)行显示了相同的错误.XValues=TimeAxis的x轴值
。尝试使用系列集合(1)
取而代之。在第行Set cht=ActiveSheet.Shapes.AddChart2
上,它给出了以下错误运行时错误“438”:对象不支持此属性或方法
因此我将该行更改为Set cht=ActiveSheet.Shapes.AddChart
,但现在它在第行cht.Chart.FullSeriesCollection(1)上显示了相同的错误.XValues=TimeAxis的x轴值
。尝试使用系列集合(1)
。