VBA Powerpoint 2010从csv数据创建图表

时间:2015-07-28 07:02:53

标签: vba charts powerpoint-2010

我正在尝试创建一个makro,以便根据存储在csv文件中的数据自动生成powerpoint 2010中的图表。我得到了生成图表并阅读csv文件,但现在我仍然坚持显示数据。

到目前为止,这是我的代码:

Sub CreateChart()
Dim myChart As Chart
Dim gChartData As ChartData
Dim gWorkBook As Excel.Workbook
Dim gWorkSheet As Excel.Worksheet
Dim strPath As String
Dim lngLastRow As Long
Dim mySystemFileObject

' Create the chart and set a reference to the chart data.
Set myChart = ActivePresentation.Slides(1).Shapes.AddChart.Chart
Set gChartData = myChart.ChartData

' read the csv file
strPath = "C:\path\to\my\data.csv"

' Set the Workbook and Worksheet references.
Set gWorkBook = gChartData.Workbook
Set gWorkSheet = gWorkBook.Worksheets(1)


With gWorkSheet.QueryTables.Add(Connection:="TEXT;" & strPath,     Destination:=gWorkSheet.Range("A1"))
    .TextFileDecimalSeparator = "."
    .TextFileThousandsSeparator = " "
    .TextFileParseType = xlDelimited
    .TextFileCommaDelimiter = True
    .Refresh
End With
gWorkBook.RefreshAll

' Does not work, returns Runtime Error 1004 
'gWorkSheet.ListObjects("Tabelle1").Resize gWorkSheet.Range("A1:G5")

myChart.SetSourceData ("='Tabelle1'!A7:G74")
myChart.Refresh

'gWorkSheet.Range("A7:G74").Select

' Clean up the references.
Set gWorkSheet = Nothing
' gWorkBook.Application.Quit
gWorkBook.Close

Set gChartData = Nothing
Set myChart = Nothing

End Sub

现在的问题是用VBA选择范围A1:G74并在图表中显示数据。可能我只是错过了正确的功能。 任何想法或帮助表示赞赏!

祝你好运, 吉姆

1 个答案:

答案 0 :(得分:0)

解决方案是,一次只能改变一个方向。

所以我通过将csv数据作为文本文件读取来解决问题,而不是调整图表范围,然后用csv文件中的数据填充图表

strRange = "A1:D" + CStr(UBound(tmpData.XValues))
            gWorkSheet.ListObjects("Tabelle1").Resize gWorkSheet.Range(strRange)
            ' change dim 2
            If ((UBound(myData, 2) * 2) + 1 > 4) Then
                strRange = "A1:" + HelperFunctions.ConvertToLetter2((UBound(myData, 2) * 2) + 1) + CStr(UBound(tmpData.XValues))
                gWorkSheet.ListObjects("Tabelle1").Resize gWorkSheet.Range(strRange)
            End If

然后通过以下方式将数据写入单元格:

For l = 1 To UBound(tmpData.XValues)

                    gWorkSheet.Cells(l, k + 1).Value = tmpData.XValues(l - 1)
                    gWorkSheet.Cells(l, k + 2).Value = tmpData.YValues(l - 1)
            Next