【问题标题】:Create an Excel chart with VBA without manually inputing a range使用 VBA 创建 Excel 图表,无需手动输入范围
【发布时间】:2013-06-04 20:55:59
【问题描述】:

我在网上浏览了一段时间并尝试了不同的东西,但没有奏效。我有一组数据在不同的工作表中长度会​​有所不同,我编写了一个宏将它们全部放在一个工作表中,现在它们都有不同的行数。我试图将所有这些都放在一个图表上,但是在指定范围时我被卡住了。所有帮助将不胜感激,下面是我从录制的宏中操作的代码:

Sub charttest()

    Dim r As Range
    Set r = ActiveSheet.Range("A1").CurrentRegion

    Range("D9").Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=Range("'OBA 1'!$A$1" & "r.Columns.Coun, r.Rows.Coun")
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
End Sub

【问题讨论】:

    标签: excel charts range vba


    【解决方案1】:

    尝试更改以下行:

    ActiveChart.SetSourceData Source:=Range("'OBA 1'!$A$1" & "r.Columns.Coun, r.Rows.Coun")
    

    进入(假设ActivesheetOBA 1 表:

    ActiveChart.SetSourceData Source:=r
    

    或进入(在其他情况下):

    ActiveChart.SetSourceData Source:=Range("'OBA 1'!" & r.Address)
    

    【讨论】:

    • KazJaw 我仍在开发该程序,但在将其实施到更广泛的方案时遇到了一个问题,这是我的代码:
    • Next i For i = 1 To 3 Dim g As Range Set g = Sheets(i).Range("A1").CurrentRegion Sheets(i).Shapes.AddChart.Select Sheets(i) .SetSourceData Source:=Range(Sheets(i) & g.Address) Sheets(i).SetSourceData Source:=g Sheets(i).ChartType = xlXYScatterSmoothNoMarkers Next i
    • 看,你在混淆代码结构。我不知道你目前的问题是什么,但我看到了什么:从这个Source:=Range("'OBA 1'!" & r.Address) 你做了这个完全不同的Source:=Range(Sheets(i) & g.Address) ,没有',没有!,这是必不可少的。所以,试试Source:=Range("'" & Sheets(i).Name & "'!" & g.Address)。一个提示 - 在更改代码的下一部分之前更改一件事并进行测试。请不要将您的代码放在 cmets 中 - 这很难阅读。您的问题是新问题,因此您可以在不同的问题中处理它们,而不是在这里继续。
    • 但您来对地方了——在 SO 中。如果您有任何问题,请提出新问题。不要重复他们,接下来接受人们的正确答案,我可以保证,这里很少有好人可以提供帮助:)
    【解决方案2】:

    我检查了我的工作并更新了我的代码,因为我不再满足我的需求,我将代码分成几部分运行,并使用上面的方法最终在我的图表函数上出现错误 13,我确定错误来自 Source 行。有人可以建议我遵循的道路吗?

    Sub t_feuille(f_Work As Worksheet)
    
    Dim num_line As Integer, t_Work As Worksheet
    Dim myrange As Range
    
    'instals time column
    f_Work.Activate
    f_Work.Cells(1, 1) = "Time"
    For num_line = 2 To last_line(t_Work)
      f_Work.Cells(num_line, 1) = num_line - 2
    Next
    
    'graph set up
    
      Set myrange = ActiveSheet.Cells(1, 1).CurrentRegion
      Application.CutCopyMode = False
      ActiveChart.ChartWizard _
        Source:=Sheets(f_Work).Range(myrange), _
        Gallery:=xlXYScatterSmoothNoMarkers, Format:=4, PlotBy:=xlColumns, _
        CategoryLabels:=1, SeriesLabels:=1, HasLegend:=1, _
        Title:=f_Work, CategoryTitle:="", _
        ValueTitle:="", ExtraTitle:=""
    
    End Sub
    
    Function last_line(f_Work) As Integer
    Dim num_col As Integer, num_line As Integer
    
      num_line = 0
      For num_col = 1 To ActiveSheet.Cells(1, 10000).End(xlToLeft).Column
        If ActiveSheet.Cells(100000, num_col).End(xlUp).Row > num_line Then
          num_line = ActiveSheet.Cells(100000, num_col).End(xlUp).Row
        End If
    Next
    
      last_line = num_line
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2012-10-20
      • 2019-02-20
      相关资源
      最近更新 更多