2016-09-07 212 views
0

下面提到的代码工作正常。但后来我的查询是:--- 目前我有从A1到P4的输入数据表值,但它可以改变:例如数据值可以从A1到S7。 (数据总是以excel表格中的A开头) 但是在下面给出的代码中,我已经手动给出了范围。我需要在范围部分做什么更改,以便它能够自动找出列范围?vba图表的动态数据范围

  Sub to_Draw_chart() 
       Dim ws_InputSheet As String 
       ws_InputSheet = "Sheet3" 
       Charts.Add 
       ActiveChart.ChartType = xlColumnStacked 
       ActiveChart.SetSourceData Source:=Sheets(ws_InputSheet).Range(ws_InputSheet & "!$A$1:$P$4"), PlotBy:=xlColumns 
       With ActiveChart 
        .HasTitle = True 
        .ChartTitle.Characters.Text = "Time_Plotter" 
        .Axes(xlValue).MaximumScale = 1000 
        .Axes(xlValue).MajorUnit = 250 
        .Axes(xlCategory).CategoryType = xlCategoryScale 
        .Axes(xlCategory).CategoryType = xlAutomatic 
       End Sub 
+0

@siddarthRout只是抓住你关注任何你可以帮我解决我发布的问题的机会,谢谢 – user28

+0

请在我的回答中试试下面的代码 –

回答

1

我用你ws_InputSheetAs WorkSheet创建图表,我想你会发现下面simplier代码如下:

Option Explicit 

Sub to_Draw_chart() 

    Dim ws_InputSheet As Worksheet, ws_OutputSheet As Worksheet 
    Dim dataRng As Range 

    Set ws_InputSheet = ThisWorkbook.Sheets("Sheet3") 

    With ws_InputSheet 
     Set dataRng = .Range("A1").CurrentRegion 
    End With 

    Charts.Add 
    ActiveChart.ChartType = xlColumnStacked 

    ActiveChart.SetSourceData Source:=dataRng, PlotBy:=xlColumns 
    With ActiveChart 
     .HasTitle = True 
     .ChartTitle.Characters.Text = "Time_Plotter" 
     .Axes(xlValue).MaximumScale = 1000 
     .Axes(xlValue).MajorUnit = 250 
     .Axes(xlCategory).CategoryType = xlCategoryScale 
     .Axes(xlCategory).CategoryType = xlAutomatic 
    End With 

End Sub 
+0

我试过了你给出的代码。但之后它显示编译器错误。对象必须是用户定义的类型,对象/变体。代码正在使用ws_InputSheet。 – user28

+0

@ user28是否将定义更改为'Dim ws_InputSheet As Worksheet'?之后你是否将它设置为'Set ws_InputSheet = ThisWorkbook.Sheets(“Sheet3”)'? –

+0

非常感谢。有效。是的,我没有改变昏暗ws_InputSheet作为工作表。但现在everythng工作正常。 – user28

0

试试这个

Option Explicit 

Sub to_Draw_chart() 
    Dim ws_InputSheet As String, ws_OutputSheet As String 

    ws_InputSheet = "Sheet3" 

    Dim dataRng As Range 
    With Worksheets(ws_InputSheet) 
     Set dataRng = .Range("A1").CurrentRegion 
    End With 

    Charts.Add 
    ActiveChart.ChartType = xlColumnStacked 
' ActiveChart.SetSourceData Source:=Sheets(ws_OutputSheet).Range(ws_InputSheet & "!$A$1:$P$4"), PlotBy:=xlColumns 
    ActiveChart.SetSourceData Source:=Sheets(ws_OutputSheet).Range(dataRng.Address(True, True, True, True)), PlotBy:=xlColumns 
    With ActiveChart 
     .HasTitle = True 
     .ChartTitle.Characters.Text = "Time_Plotter" 
     .Axes(xlValue).MaximumScale = 1000 
     .Axes(xlValue).MajorUnit = 250 
     .Axes(xlCategory).CategoryType = xlCategoryScale 
     .Axes(xlCategory).CategoryType = xlAutomatic 
    End With 
End Sub 
+0

ActiveChart.SetSourceData来源:=表格(ws_OutputSheet).Range(dataRng.Address(True,True,True,True)) ,PlotBy:= xlColumns 在这一行o F代码,运行时错误1004:应用程序定义或对象定义的错误显示.. @ user3598756 – user28

0

尝试下面的代码。这将从主动式选择

Sub to_Draw_chart() 
    Dim ws_InputSheet As String 
    Dim SelRange As Range 
    Sheets("Sheet3").Activate 
    Set SelRange = Selection 
    ws_InputSheet = "Sheet3" 
    Charts.Add 
    ActiveChart.ChartType = xlColumnStacked 
    ActiveChart.SetSourceData Source:=SelRange, PlotBy:=xlColumns 
    With ActiveChart 
     .HasTitle = True 
     .ChartTitle.Characters.Text = "Time_Plotter" 
     .Axes(xlValue).MaximumScale = 1000 
     .Axes(xlValue).MajorUnit = 250 
     .Axes(xlCategory).CategoryType = xlCategoryScale 
     .Axes(xlCategory).CategoryType = xlAutomatic 
    End With 
End Sub 
+0

我试过这段代码,但它只是生成空白图表没有任何数据被绘制..我的问题是在这个代码中的位置已经提到它应该从Sheet3中选择数据?而且主动选择意味着excel表格中被选中的单元格,这是什么意思? – user28

+0

是的。究竟。因此,如果您在运行此操作时处于不同的工作表中,则需要切换到sheet3以使此代码正常工作。那就是包含'Sheets(“Sheet3”)。在'Set SelRange = Selection'之前激活'' –

+0

对不起,它不工作。仍然是同样的问题。 – user28