Excel VBA中具有不同Y值和一个X值的图形
这是我用来创建一个图形的代码,它在指定的路径中搜索.csv{使用excel应用程序创建的}文件。它根据列“C”{X轴}绘制列“B”{Y轴}。。我想在Y轴上再加一列“A”,保持列“C”为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
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