2014-08-19 4 views
0

У меня есть следующий Sub, чтобы создать круговую диаграмму:Sub для создания круговой диаграммы

Sub CreatePieChart(dataSource As String, chartTitle As String, positionX As Double, positionY As Double) 
    Dim newChart As Shape 

    Range(dataSource).Select 
    Set newChart = ActiveSheet.Shapes.AddChart 

    With newChart 
     .Select 
     .Chart.ChartType = xlPie 
     .Chart.SetSourceData Source:=Range(dataSource) 
     .Chart.chartTitle.Select 
     .Chart.chartTitle.Text = chartTitle 
     .Chart.SeriesCollection(1).Select 
     .Chart.SeriesCollection(1).ApplyDataLabels 
     .Top = positionY 
     .Left = positionX 

    End With 

End Sub 

Он отлично работает, когда я называю его в первый раз, но когда я хочу создать вторую таблицу, я получаю следующее сообщение об ошибке:

ошибка выполнения «1004»: приложения или объект, определенный ошибка

ошибка происходит на этой линии:

Set newChart = ActiveSheet.Shapes.AddChart

Надеюсь, вы, ребята, можете мне помочь. Заранее спасибо

EDIT:

первого вызова подразделов:

CreatePieChart "A1:B6", "first", 10, 200

второй вызов:

CreatePieChart "A1:A6,D1:D6", "second", 10, 400

+0

вы можете просто добавить различные вызовы в 'CreatePieChart', чтобы увидеть, какие параметры передаются каждый раз? – smagnan

+0

Ваш код отлично подходит для меня. –

ответ

0

Перепробовав различные вещи, я придумал это решение, которое работает с множеством DATAS я выбираю (так что я надеюсь, что он будет работать для вас тоже):

Решение:

Private Sub call_test() ' No interest but to call CreatePieChart 
    CreatePieChart "A1:B6", "first", 10, 200 
    CreatePieChart "A1:A6,D1:D6", "second", 10, 400 
End Sub 

Sub CreatePieChart(dataSource As String, chartTitle As String, positionX As Double, positionY As Double) 

    Dim newChart As Shape 
    Set newChart = ActiveSheet.Shapes.AddChart 

    With newChart 
     .Chart.ChartType = xlPie 
     .Chart.SetSourceData Source:=Range(dataSource) 
     .Chart.chartTitle.Text = chartTitle 
     .Chart.SeriesCollection(1).ApplyDataLabels 
     .Top = positionY 
     .Left = positionX 
    End With 

End Sub 

Мой набор DATAS:

void void void   
1  4  7 
2  7  4 
3  8  2 
4  4  1 
5  2  2 
6  9  2 

Что вызывает ошибку для меня было злоупотребление .Select: Вы не можете использовать Select на разобщенных диапазонах, поэтому я не работал с "A1:A6,D1:D6". Я должен был сделать некоторые другие модификации, но это работает для меня.

ПРИМЕЧАНИЕ: Для выбора разобщенных диапазонов, используйте Union: сравни Ranges on MSDN

+0

Спасибо! Просто выяснилось, что элемент «Выбор» вызывал ошибку, но не знал почему;) – oHoodie

+0

@oHoodie. Ничего не найдено, вы нашли решение самостоятельно. Мой совет - стараться избегать 'Select' как можно больше, это не очень эффективно и может привести к затруднению отслеживания ошибок – smagnan

0

Ну, я нашел решение, которое работает, я просто не» Знаю почему. Единственное, что я изменил, это то, что я оставил весь выбор. Новый код:

Sub CreatePieChart(dataSource As String, chartTitle As String, positionX As Double, positionY As Double) 
    Dim newChart As Shape 

    Set newChart = ActiveSheet.Shapes.AddChart 

    With newChart 
     .Chart.ChartType = xlPie 
     .Chart.SetSourceData Source:=Range(dataSource) 
     .Chart.chartTitle.Text = chartTitle 
     .Chart.SeriesCollection(1).ApplyDataLabels 
     .Top = positionY 
     .Left = positionX 
    End With 

End Sub 

Это действительно странно, но по крайней мере сейчас оно работает. Спасибо за ваши усилия.

Смежные вопросы