2015-06-15 2 views
0

Я совершенно новый для VBA. Я написал макрос, который создает около 10 сводных диаграмм и некоторых нормальных диаграмм после фильтрации и резки некоторых данных из электронной таблицы базы данных. Теперь я хочу написать подраздел, который проходит через одно и то же форматирование. Суб выглядит следующим образом:Доступ к PivotChart SeriesCollection с помощью Sub

Sub FormatChart(Cht As ChartObject, title As String) 
Cht.Activate 
MsgBox ActiveChart.SeriesCollection.Count 
With ActiveChart 
    .HasTitle = True 
    .ChartTitle.Text = title 
    .Axes(xlValue).HasMajorGridlines = False 
End With 
ActiveChart.SeriesCollection(1).Select 
With Selection.Format.Fill 
    .Visible = msoTrue 
    .ForeColor.RGB = RGB(255, 182, 0) 
End With 
End Sub 

я первоначально не включал все Активизирует и выбирает, но не мог заставить макрос работать без них и не видят его как конец мира - наборы данных никогда не будут массовыми, поэтому скорость не так важна, и я отключу экранирование, чтобы пользователи не могли нажимать на ячейки/другие объекты и нарушать макрос при его запуске.

Вот моя проблема. Если я вынимаю второй цикл With, все происходит отлично, а сетки удаляются и заголовок добавляется. Тем не менее, всякий раз, когда я пытаюсь редактировать цвета столбцов с указанным выше, я получаю ошибку времени выполнения «1004»: недопустимый параметр. Я также попытался сохранить содержимое второго с циклом внутри первого, но затем переместил его, чтобы попробовать использовать выбор, чтобы узнать, не изменилось ли оно.

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

MsgBox ActiveChart.SeriesCollection.Count 

Я получаю «0».

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

EDIT: Решение было то, что я проходил каждый график к вышеуказанной части после того, как я создал диаграмму, но до того, как я установил источник данных для диаграммы. Doh!

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

Я пометил Joehannah как ответ на вопрос (хотя это не технически решение), потому что это заставило меня проверить мой код и заметить, что вышеупомянутое может вызвать проблему - если я не должен этого делать, меня, и я постараюсь это исправить!

+0

Попробуйте этот '.Format.Line.ForeColor.RGB' [Также проверьте этот ответ.] (Http://stackoverflow.com/q/27027264/1389394) – bonCodigo

+0

Привет, bonCodigo, к сожалению, все мои диаграммы - это гистограммы, а не линейных диаграмм.Ранее я рассматривал этот ответ и не хочу ссылаться на какую-либо именованную серию, поскольку я использую sub для ссылки на несколько диаграмм. Сказав, что я попытался ссылаться на именованную серию, чтобы увидеть, будет ли она работать, с «ActiveChart.SeriesCollection (« Всего »). Это все еще не сработало :( – FraserES

+0

В приведенной выше ссылке есть точная информация, которую вы искали, поэтому она была дана. Ответ ниже имеет одинаковую информацию. Установив объект диаграммы в ссылочную переменную, это способ пойдите вокруг. Каждая диаграмма имеет также имя, не обязательно имя, данное вами, но 'chart1',' chart2'. Чтобы сохранить чистоту, почему бы вам не дать имя при создании объектов? – bonCodigo

ответ

0

Мне сказали оставить свой собственный ответ, так как я понял проблему.

я проходил каждый график этой функции сразу после его создания, а именно:

Set ptr1 = Sheets("withinBRSPivots").PivotTables("UniqueClicks").TableRange1 
Set cht1 = Sheets("BRS Overview").ChartObjects.Add(Left:=950, Top:=500, _ 
    Width:=400, Height:=300) 
cht1.Name = "UCChart" 
Charter.FormatChart cht1, "Average Number of Unqique Clicks" 

Я тогда установить исходные данные для диаграммы после выполнения указанных выше. Это означало, что когда диаграмма была передана моей подписи chartformat, у нее не было исходных данных. Это привело к тому, что вы могли редактировать заголовок и линии сетки, но не серийный набор. Исправить было просто переместить подстроку FormatChart после того, как я установил исходные данные.

Большое спасибо всем, кто разместил ответы!

0

Вам лучше использовать Set cht = (create chart object) для каждого графика, а затем сразу же вызвать метод форматирования, проходящий в cht.

+0

Привет, Joehanna, я бы предпочел не добавлять код форматирования для каждого графика, так как он будет буквально идентичен и предпочтет просто использовать sub, чтобы мой код был коротким и аккуратным насколько возможно (основная часть уже о 800 строк). Есть ли какая-либо причина, в частности, что это невозможно сделать, передав диаграмму в качестве аргумента в подпункт? – FraserES

+0

Я не сказал, поставьте код в строке. Держите его как отдельный метод. Просто вызовите метод формата сразу после создания каждой диаграммы. – joehanna

+0

Итак, я собирался сказать, что это именно то, что я делаю в данный момент, когда я проверил свой код и понял, что является источником проблемы: D. Я вызывал свой блок диаграммы после того, как создал диаграмму, но прежде чем установить какие-либо исходные данные. Очевидно, это означает, что такие вещи, как hasTitle, работали, но поскольку на диаграмме не было данных, серийных коллекций не было. Я дурак! Я переместил chartformat после того, как я установил исходные данные, и все было исправлено. Большое вам спасибо за подсказку! :) – FraserES

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