Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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
Excel VBA中具有不同Y值和一个X值的图形_Excel_Vba - Fatal编程技术网

Excel VBA中具有不同Y值和一个X值的图形

Excel VBA中具有不同Y值和一个X值的图形,excel,vba,Excel,Vba,这是我用来创建一个图形的代码,它在指定的路径中搜索.csv{使用excel应用程序创建的}文件。它根据列“C”{X轴}绘制列“B”{Y轴}。。我想在Y轴上再加一列“A”,保持列“C”为X轴。。我该怎么做 这是代码 Sub Draw_Graph() Dim strPath As String Dim strFile As String Dim strChart As String Dim i As Integer Dim j As Integer

这是我用来创建一个图形的代码,它在指定的路径中搜索.csv{使用excel应用程序创建的}文件。它根据列“C”{X轴}绘制列“B”{Y轴}。。我想在Y轴上再加一列“A”,保持列“C”为X轴。。我该怎么做

这是代码

Sub Draw_Graph()
    Dim strPath As String
    Dim strFile As String
    Dim strChart As String
    Dim i As Integer
    Dim j As Integer

    strPath = "C:\PortableRvR\report\"
    strFile = Dir(strPath & "*.csv")
    i = 1

    Do While strFile <> ""
        With ActiveWorkbook.Worksheets.Add
            With .QueryTables.Add(Connection:="TEXT;" & strPath & strFile, _
                Destination:=.Range("A1"))
                Parent.Name = Replace(strFile, ".csv", "")
                TextFileParseType = xlDelimited
                TextFileTextQualifier = xlTextQualifierDoubleQuote
                TextFileConsecutiveDelimiter = False
                TextFileTabDelimiter = False
                TextFileSemicolonDelimiter = False
                TextFileCommaDelimiter = True
                TextFileSpaceDelimiter = False
                TextFileColumnDataTypes = Array(1)
                TextFileTrailingMinusNumbers = True
                Refresh BackgroundQuery:=False
                Files(i) = .Parent.Name
                i = i + 1
            End With
        End With
        strFile = Dir
    Loop

    numOfFiles = i - 1
    chartName = "Chart 1"

    For j = 1 To numOfFiles
        strFile = Files(j)
        Sheets(strFile).Select
        Plot_y = Range("B1", Selection.End(xlDown)).Rows.Count
        Plot_x = Range("C1", Selection.End(xlDown)).Rows.Count

        Sheets("GraphDisplay").Select
        If j = 1 Then ActiveSheet.ChartObjects(chartName).Activate
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(j).Name = strFile
        ActiveChart.SeriesCollection(j).XValues = Sheets(strFile).Range("C1:C" & Plot_x)
        ActiveChart.SeriesCollection(j).Values = Sheets(strFile).Range("B1:B" & Plot_y)
        ActiveChart.SeriesCollection(j).MarkerStyle = -4142
        ActiveChart.SeriesCollection(j).Smooth = False
    Next j

    ActiveSheet.ChartObjects(chartName).Activate
    ActiveChart.Axes(xlValue).DisplayUnit = xlMillions
    ActiveChart.Axes(xlValue).HasDisplayUnitLabel = False
End Sub
Sub-Draw_-Graph()
将strPath设置为字符串
作为字符串的Dim strFile
像弦一样的暗弦
作为整数的Dim i
作为整数的Dim j
strPath=“C:\PortableRvR\report\”
strFile=Dir(strPath&“*.csv”)
i=1
当strFile“”时执行
使用ActiveWorkbook.Worksheets.Add
使用.QueryTables.Add(连接:=“TEXT;”&strPath&strFile_
目的地:=.范围(“A1”))
Parent.Name=Replace(strFile,.csv,“”)
TextFileParseType=xlDelimited
TextFileTextQualifier=xlTextQualifierDoubleQuote
textfileconsutivedelimiter=False
TextFileTabDelimiter=False
textfilesemicolondimiter=False
textfilecommadelimitor=True
TextFileSpaceDelimiter=False
TextFileColumnDataTypes=数组(1)
TextFileTrailingMinusNumbers=True
刷新背景查询:=False
文件(i)=.Parent.Name
i=i+1
以
以
strFile=Dir
环
numofiles=i-1
chartName=“图表1”
对于j=1到NUMOF文件
strFile=文件(j)
工作表(strFile)。选择
Plot_y=范围(“B1”,Selection.End(xlDown)).Rows.Count
Plot_x=范围(“C1”,Selection.End(xlDown)).Rows.Count
图纸(“图形显示”)。选择
如果j=1,则ActiveSheet.ChartObjects(chartName).Activate
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(j).Name=strFile
ActiveChart.SeriesCollection(j).XValues=工作表(strFile).Range(“C1:C”和Plot_x)
ActiveChart.SeriesCollection(j).Values=Sheets(strFile).Range(“B1:B”和Plot_y)
ActiveChart.SeriesCollection(j).MarkerStyle=-4142
ActiveChart.SeriesCollection(j).Smooth=False
下一个j
ActiveSheet.ChartObjects(chartName).Activate
ActiveChart.Axes(xlValue).DisplayUnit=xlm
ActiveChart.Axes(xlValue).HasDisplayUnitLabel=False
端接头

您可以为每个文件添加2个系列(j=1到2*numofiles步骤2的
中的j和j+1),并重复j+1系列的所有操作,除了:

ActiveChart.SeriesCollection(j).Values = Sheets(strFile).Range("A1:A" & Plot_y)
ActiveChart.SeriesCollection(j+1).Values = Sheets(strFile).Range("B1:B" & Plot_y)

不适用于积分

我原打算将此作为一条评论发布(因此不要选择此作为答案。全部归功于@Aprillion),但该评论不会像本文那样格式化代码

每当你像Aprillion提到的那样添加一个系列时,你还必须再添加一行。我只是用一小段数据测试了一下,效果很好

'<~~ You have to call this everytime you add a new series
ActiveChart.SeriesCollection.NewSeries 
ActiveChart.SeriesCollection(1).Values = "=Sheet1!$B$1:$B$6"
'<~~ You have to call this everytime you add a new series
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Values = "=Sheet1!$A$1:$A$6"

“您是否尝试过ActiveChart.SeriesCollection(j).Values=Sheets(strFile).Range(“A1:B”和Plot__y)?如果您已经接受了答案,则无法更改您的问题。请问一个新问题。你可以从那个问题中引用这个问题。我已经回滚了更改。我仍然会收到相同的错误,我应该对这些行进行任何更改吗?Plot_y=Range(“B1”,Selection.End(xlDown)).Rows.Count Plot_x=Range(“C1”,Selection.End(xlDown)).Rows.Count在这种情况下,请在原始代码中仅尝试
A1:A
-如果仍然出现错误,则可能是数据有问题,而不是代码有问题:))我不知道问题出在哪里,然后:(@user1270123:如果你同意的话,我可以研究一下这个问题。:)但是有可能看到任何一个csv文件吗?也可以从该csv文件手动创建一个图形,并发布一个屏幕截图,说明它应该是什么样子。你可以使用www.wikisend.com或skydrive上传文件,然后在此处发布链接:)@user1270123:很快就会看到它。我目前正在另一个岗位上工作。:)找个时间给我。等我写完另一篇文章后,我会看这篇文章:)别担心,我们会把它整理好的;)这是csv文件希望您的查询最终得到排序?
Dim files(1 To 20) As String
Dim numOfFiles As Integer
Dim chartName As String, shName as String

Sub Time_Graph()
    Dim strPath As String, strFile As String, strChart As String
    Dim i As Long, j As Long, n As Long

    strPath = "C:\PortableRvR\report\"
    strFile = Dir(strPath & "*.csv")

    i = 1

    Do While strFile <> ""
        With ActiveWorkbook.Worksheets.Add
            shName = strFile
            ActiveSheet.Name = Replace(shName, ".csv", "")
            With .QueryTables.Add(Connection:="TEXT;" & strPath & strFile, _
                Destination:=.Range("A1"))
                .Name = Replace(strFile, ".csv", "")
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileConsecutiveDelimiter = False
                .TextFileTabDelimiter = False
                .TextFileSemicolonDelimiter = False
                .TextFileCommaDelimiter = True
                .TextFileSpaceDelimiter = False
                .TextFileColumnDataTypes = Array(1)
                .TextFileTrailingMinusNumbers = True
                .Refresh BackgroundQuery:=False
                files(i) = .Parent.Name
                i = i + 1
            End With
        End With
        strFile = Dir
    Loop

    numOfFiles = i - 1
    chartName = "Chart 1"

    For j = 1 To numOfFiles
        If n = 0 Then n = j Else n = n + 2
        strFile = files(j)
        Sheets(strFile).Select
        Plot_y = Range("B1", Selection.End(xlDown)).Rows.Count
        Plot_x = Range("C1", Selection.End(xlDown)).Rows.Count

        Sheets("GraphDisplay").Select

        If j = 1 Then ActiveSheet.ChartObjects(chartName).Activate

        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(n).Name = strFile & " - Col B Values"
        ActiveChart.SeriesCollection(n).XValues = "=" & strFile & "!$C$1:$C$" & Plot_x
        ActiveChart.SeriesCollection(n).Values = "=" & strFile & "!$B$1:$B$" & Plot_y

        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(n + 1).Name = strFile & " - Col A Values"
        ActiveChart.SeriesCollection(n + 1).XValues = "=" & strFile & "!$C$1:$C$" & Plot_x
        ActiveChart.SeriesCollection(n + 1).Values = "=" & strFile & "!$A$1:$A$" & Plot_y

        ActiveChart.SeriesCollection(j).MarkerStyle = -4142
        ActiveChart.SeriesCollection(j).Smooth = False
        ActiveChart.SeriesCollection(n + 1).MarkerStyle = -4142
        ActiveChart.SeriesCollection(n + 1).Smooth = False
    Next j

    ActiveSheet.ChartObjects(chartName).Activate
    ActiveChart.Axes(xlValue).DisplayUnit = xlMillions
    ActiveChart.Axes(xlValue).HasDisplayUnitLabel = False
End Sub