Как создать диаграмму с источником из другого листа - PullRequest
0 голосов
/ 11 марта 2019

Перед тем, как спросить, я много искал в Интернете, и ответы, которые я нашел, не решили проблему.Рабочий лист «Данные» находится в той же рабочей книге, что и рабочий лист «Отчеты».

enter image description here

Это часть моего кода, которая имеет значение для этого вопроса: Private Function CreateChart(ByVal DataRow As Integer, ByVal DataCol As Integer) Dim ChartRowOffset As Integer Charts.Add ActiveChart.ChartType = xlPie ActiveChart.SetSourceData Source:=Sheets("Data").Range(Cells(2, DataCol), Cells(DataRow - 1, DataCol + 1)), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Report" ActiveChart.HasTitle = True ActiveChart.ChartTitle.Select ActiveChart.ChartTitle.Text = ThisWorkbook.Sheets("Data").Cells(1, DataCol).Value If DataCol > 1 Then ChartRowOffset = (DataCol - 1) * 2 Else ChartRowOffset = 2 End If With ActiveChart.Parent .Top = ThisWorkbook.Sheets("Report").Cells(ChartRowOffset, 1).Top .Left = ThisWorkbook.Sheets("Report").Cells(ChartRowOffset, 1).Left End With End Function

Я получаю код ошибки 1004 «Ошибка приложения или объекта» при попытке выбрать источник из другого листа в этой строке: ActiveChart.SetSourceData Source:=Sheets("Data").Range(Cells(2, DataCol), Cells(DataRow - 1, DataCol + 1)), PlotBy:=xlColumns

Если я сделаю это без Sheets («Данные»), он не выдаст ошибку и создаст диаграмму, но выберет ячейки на листе «Reports», а не нужную мне рабочую таблицу.Я попытался выбрать рабочий лист «Данные», активировать его, но пока ничего не получалось.

Буду признателен за любую помощь.

1 Ответ

1 голос
/ 11 марта 2019

Пожалуйста, попробуйте следующее, чтобы исправить проблему стиля ссылки -

ActiveChart.SetSourceData Source:= _
Sheets("Data").Range(Cells(2, DataCol).Address, Cells(DataRow - 1, DataCol + _
1).Address), PlotBy:=xlColumns

Печально известная Ошибка: 1004 будет преследовать вас до смерти из-за подобных вещей.Кроме того, если можно, ваш код будет быстрее, короче и проще для чтения, если вы будете использовать с инструкциями, где это применимо.

Пример:

With ActiveChart
    .Location Where:=xlLocationAsObject, Name:="Report"
    .HasTitle = True
    .ChartTitle.Select
    .ChartTitle.Text = ThisWorkbook.Sheets("Data").Cells(1, DataCol).Value
End WIth

- ****** ОБНОВЛЕНИЕ ******* -

После тестирования я обнаружил, что должен был переустановить переменную ... Однако мне это показалось безумным,протестировано и работает для меня:

Private Function CreateChart()

Dim cht As Chart
Dim rng As Range

Set rng = ThisWorkbook.Worksheets("Sheet1").UsedRange
Set cht = Charts.Add

With cht
    .SetSourceData Source:=rng, PlotBy:=xlColumns
    .ChartType = xlPie
    .Location Where:=xlLocationAsObject, Name:="Sheet1"
End With

Set cht = ActiveChart

With cht
    .HasTitle = True
    .ChartTitle.Text = ThisWorkbook.Sheets(1).Name
End With

End Function

Дэнни,

ExcelVBADude

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...