Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA使用保存范围作为图表的输入_Vba_Excel - Fatal编程技术网

VBA使用保存范围作为图表的输入

VBA使用保存范围作为图表的输入,vba,excel,Vba,Excel,在VBA中进行匹配操作后-我得到一个范围变量 Set rngSel = ActiveSheet.Range(Cells(3, 28).Offset(0, startIdx - 1), Cells(3, 28).Offset(0, endIdx - 1)) 它告诉我,我想在条形图中显示的数据在A3和Z3之间(总是在一行中),例如。我也可以打印这个 MsgBox ("rngSel=" & rngSel.Cells.Address) 但是,现在我想使用rngSel为我的图表提供输入。我

在VBA中进行匹配操作后-我得到一个范围变量

 Set rngSel = ActiveSheet.Range(Cells(3, 28).Offset(0, startIdx - 1), Cells(3, 28).Offset(0, endIdx - 1))
它告诉我,我想在条形图中显示的数据在A3和Z3之间(总是在一行中),例如。我也可以打印这个

 MsgBox ("rngSel=" & rngSel.Cells.Address)
但是,现在我想使用rngSel为我的图表提供输入。我试过了

ActiveChart.SetSourceData Source:=Sheets("Diagramm 1").rngSel
然而,这不起作用。rngSel仅提供x坐标范围(例如A3到Z3。y值在A4到Z4之间。基于rngSel对象,我如何告诉我的图表1仅从中获取数据 A3:Z4?不手动指定,但动态使用rngSel

全宏

Sub Aku()
    Dim startIdx As Integer, endIdx As Integer
    Set valRng = ActiveSheet.Range("AB3:LS3")

    startIdx = Application.Match(CLng(Cells(2, 18).Value), valRng, 0)
    endIdx = Application.Match(CLng(Cells(2, 22).Value), valRng, 0)

    Set rngSel = ActiveSheet.Range(Cells(3, 28).Offset(0, startIdx - 1), Cells(3, 28).Offset(0, endIdx - 1))

    MsgBox ("rngSel=" & rngSel.Cells.Address)
    ActiveChart.SetSourceData Source:=rngSel.Resize(2), PlotBy:=xlRows


End Sub

在OP进一步澄清后编辑

试试这个:

Sub Aku()
    Dim startIdx As Integer, endIdx As Integer
    Dim rngSel As Range, valRng As Range

    With ActiveSheet
        Set valRng = .Range("AB3:LS3")

        startIdx = Application.Match(CLng(Cells(2, 18).Value), valRng, 0)
        endIdx = Application.Match(CLng(Cells(2, 22).Value), valRng, 0)

        Set rngSel = .Range(Cells(3, 28).Offset(0, startIdx - 1), Cells(3, 28).Offset(0, endIdx - 1))
    End With
    Worksheets("Sheet 1").ChartObjects("Diagramm 1").Chart.SetSourceData Source:=rngSel.Resize(2), PlotBy:=xlRows
End Sub

它假设您正在运行此宏,而活动工作表是从中读取值的工作表

只有rngsel可以执行此操作。或ActiveChart.SetSourceData:=工作表(“图表1”)。范围(rngsel.address)不一定能满足您的要求,但可能是“rngsel.Resize(2)”这就是你要找的-我在rngSel中存储了一个从A3到Z3的范围-但是图表源应该是A3到z4-如果我使用nathan解决方案,我会遇到一个调试错误-有人能帮忙吗?有一个错误,debuggin语句中缺少一个对象变量或with block变量。它不应该是ActiveChart.SetSourceData Sou吗rce:=rngSel.Resize(2,),PlotBy:=xlRows-但是我无法编译,但是我想在范围中添加一行而不是一列-?@Sonnecken56,你通过了吗?所以我又遇到了同样的错误-是不是图表1部分不在那里的问题?对象变量还是带变量错误的块-又一次。我在问题中粘贴了我的整个宏,如果我执行ActiveChart.SetSourceData源:=Sheets(“图表1”).rngSel.Resize(2)-我得到一个索引超出范围的错误