2015-07-28 3 views
0

Я пытаюсь создать макрос для автоматического создания диаграмм в PowerPoint 2010 из данных, хранящихся в файле csv. Я добрался до создания диаграммы и прочитал файл csv, но теперь им удалось отобразить данные.VBA 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 

Теперь проблема заключается в выборе диапазона A1: G74 с помощью VBA и отображения данных в таблице. Наверное, мне просто не хватает правильной функции. Любые идеи или помощь приветствуются!

С наилучшими пожеланиями, Джим

ответ

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 
Смежные вопросы