2016-01-26 11 views
0

Я написал макрос, который импортирует большой файл данных CSV, организует данные и создает диаграммы. Диаграммы создаются:Excel VBA macro для копирования и вставки диаграмм работает иногда

  • Копирование шаблона диаграммы
  • Вставить на другой вкладке
  • Rename диаграмма
  • Добавить серии данных
  • Повторите для каждого столбца данных

Проблема У меня есть то, что, когда я запускаю макрос нормально, он фактически не копирует шаблонную диаграмму. Таким образом, в буфере обмена ничего не происходит, когда он переходит к вставке, что вызывает ошибку. Вот реальный код:

wbGen.Sheets("Dashboard").ChartObjects("Chart 0").Activate 
ActiveChart.ChartArea.Copy 
wbGen.Sheets("Charts").Activate 
ActiveSheet.Cells(iRotor * 16 - 31, iChartA * 7 - 6).Select 
ActiveSheet.Paste 'Debug mode points to this line 
ActiveSheet.ChartObjects("Chart 0").Activate 
ActiveSheet.Shapes("Chart 0").Name = "Chart " & iChart 

Вот загвоздка: если я нажимаю Debug, вернуть курсор к первой строке выше, и нажмите продолжить, то код выполняет отлично. Я не могу понять, почему он работает в режиме отладки, но не нормально. Я ценю любую помощь, которую вы можете предоставить.

В качестве побочного примечания мои попытки избавиться от заявлений Activate и Select не были плодотворными. Любая помощь, которую я могу получить в этой области, также будет оценена по достоинству.

+0

Что вы пытаетесь сделать в строке над ошибкой? – Kathara

+0

Каково значение 'iRotor' и' iChartA', когда код не работает? –

+0

Строка 4 определяет, где наклеивается диаграмма. Например, первая итерация (когда код не работает) имеет 'iRotor = 2' и' iChartA = 1'. Это вызывает выбор ячейки (1,1) и наложенную там диаграмму. На следующей итерации 'iRotor = 2' и' iChartA = 2', поэтому следующий график вставляется в ячейку (1, 8). –

ответ

0

Закрыть VBE редактор при выполнении этого кода ...

Sheets("Dashboard").ChartObjects("Chart 0").Copy 
Sheets("Charts").Select 
Sheets("Charts").Cells(iRotor * 16 - 31, iChartA * 7 - 6).Select 
Sheets("Charts").PasteSpecial Format:="Microsoft Office Drawing Object", Link:=False, DisplayAsIcon:=False 
0

Попробуйте что-то вроде этого:

Dim chtTemplate As Chart 
Set chtTemplate = wbGen.Sheets("Dashboard").ChartObjects("Chart 0").Chart 
DoEvents 
chtTemplate.ChartArea.Copy 

или

Dim chtTemplate As ChartObject 
Set chtTemplate = wbGen.Sheets("Dashboard").ChartObjects("Chart 0") 
DoEvents 
chtTemplate.Copy 

затем продолжить.

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