Добавление серийной коллекции в диаграмму с помощью UserForm (combobox)

Я изучаю использование VBA для Excel в Excel 2016. На данный момент я работаю над заданием на этом веб-сайте: http://www.homeandlearn.org/vba_charts_and_user_forms.html, в котором я хочу показать график рассеяния одного результатов футбольных команд. Это делается путем выбора команды с помощью combobox в пользовательской форме.

Результат кода (см. Ниже) должен быть диаграммой рассеяния с одной строкой и заголовком, например: http://www.homeandlearn.org/images/vba_charts/chart_arsenal.gif (по какой-либо причине невозможно загрузить его)

Однако это результат моего кода.

введите описание изображения здесь

Как возможно, что с тем же кодом, что и на веб-сайте, Диаграмма не может отображать выбранные данные и заголовок? Я также задаюсь вопросом, откуда взялась пятая серия, поскольку у меня только четыре столбца.

Код выглядит следующим образом (и уникален для кода, описанного на веб-сайте):

Private Sub cmdLoad_Click() If cbSelect.Text = "Select a chart" Then MsgBox "Please select a chart" Exit Sub End If Dim MyChart As Chart Dim ChartData As Range Dim ChartIndex As Integer Dim ChartName As String ChartIndex = cbSelect.ListIndex Select Case ChartIndex Case 0 Set ChartData = ActiveSheet.Range("B2:B20") ChartName = ActiveSheet.Range("B1").Value Case 1 Set ChartData = ActiveSheet.Range("C2:C20") ChartName = ActiveSheet.Range("C1").Value Case 2 Set ChartData = ActiveSheet.Range("D2:D20") ChartName = ActiveSheet.Range("D1").Value Case 3 Set ChartData = ActiveSheet.Range("E2:E20") ChartName = ActiveSheet.Range("E1").Value End Select Application.ScreenUpdating = False Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart MyChart.SeriesCollection.NewSeries MyChart.SeriesCollection(1).Name = ChartName MyChart.SeriesCollection(1).Values = ChartData MyChart.SeriesCollection(1).XValues = ActiveSheet.Range("A2:A20") 'Save chart as an image, remove the chart, then set updating screen to ON' Dim imageName As String imageName = ThisWorkbook.Path & "\gs16_pictures" & Application.PathSeparator & "TempChart.gif" MyChart.Export Filename:=imageName, FilterName:="GIF" ActiveSheet.ChartObjects(1).Delete Application.ScreenUpdating = True 'Load picture in user form UserForm1.Image1.Picture = LoadPicture(imageName) 

cbSelect инициализируется следующим образом

 Private Sub UserForm_Initialize() cbSelect.AddItem Range("B1") 'Arsenal cbSelect.AddItem Range("C1") 'Man City cbSelect.AddItem Range("D1") 'Newcastle cbSelect.AddItem Range("E1") 'Cardiff cbSelect.TextAlign = fmTextAlignCenter End Sub 

Проблема заключалась в заявлении

 Set MyChart = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart 

Этот оператор автоматически построил всю таблицу данных. Чтобы предотвратить это, необходимо было явно указать SourceData. Ниже приведен код, который вам нужен вместо строк, начинающихся с MyChart.SeriesCollection

 With MyChart .SetSourceData Source:=ChartData .HasTitle = True .ChartTitle.Text = ChartName .SeriesCollection(1).XValues = ActiveSheet.Range("A2:A20") End With 

Я не уверен, почему существует разница между Excel 2016 и примером с сайта. Возможно, Excel «умнее», чем раньше, и интерпретировал исходные данные.

  • Excel VBA Userform - Как увеличить / уменьшить дату на один месяц
  • Excel VBA Открыть книгу, выполнить действия, сохранить как, закрыть
  • Выход VBA в отношении кнопок выбора
  • Excel / VBA - ошибка времени выполнения 91 возникает только после ввода и выхода из режима разработки
  • Добавление изображения в рабочий лист из пользовательской формы (excel vba)
  • Internet Explorer не будет закрыт после завершения моего модуля
  • Возврат ответа с помощью VBA в TextBox
  • Excel VBA Userform IIf (IsDate) не сохраняет пробел
  • Как обнаружить mouse_down на кадре Userform, пока мышь все еще нажата
  • Excel VBA - запись нескольких значений флажков пользовательской формы в одну ячейку
  • EXCEL VBA: код пользовательской формы, улучшение повторяющихся кодов
  • Давайте будем гением компьютера.