2012-04-16 1 views
6

Я портирую код, который я использую для создания диаграмм разброса в Excel из Win 7/Excel 2010, в OS X/Excel 2011. На Mac отображаются точки данных с тенью. Мне не нужна тень, и я не могу понять, как избавиться от нее.Отключить тень маркера на графиках Excel, созданных vba

Использование this worksheet (он просто случайные числа в ячейках A1: B6, если вы не хотите, чтобы загрузить мой макро-включен рабочий лист) следующий код работает нормально, но производит точек данных с тенями:

Sub plotNoShadow() 

    Dim x As Range 
    Dim y As Range 

    Dim cht As ChartObject 

    Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers 
    Set y = ActiveSheet.Range("B1:B6") 

    Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160) 
    With cht.Chart 
    .ChartType = xlXYScatter 
    .SeriesCollection.NewSeries 
    With .SeriesCollection(1) 
     .XValues = x 
     .Values = y 
     .Format.Shadow.Visible = msoFalse 'This seems to parse, but have no effect 
    End With 
    .SetElement (msoElementLegendNone) 
    .SetElement (msoElementPrimaryValueGridLinesNone) 
    End With  
End Sub 

Может кто-нибудь объяснить мне:

  1. Как изменить этот код, чтобы удалить тени и

  2. Как это то, что Тхи s, но установка SeriesCollection (1) .Format.Shadow.Visible to msoFalse позволяет работать без какого-либо видимого эффекта?

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

Screencap to illustrate the three states of shadow existence

+1

Вы уверены, что это тень, а не трехмерная настройка? Попробуйте что-то вроде '.Format.ThreeD.Visible = False' –

+0

@ Тим Уильямс: Хороший вопрос Тим. :) Тем не менее, при выключении MAC 3-мерная программа все равно даст вам первый снимок, как в моем посте –

+0

@Drew Steen: Как вы получили средний снимок? –

ответ

6

Некоторые стили графики по умолчанию в Excel, которые производят небольшой 3D-эффект, также имеют незначительную тень, как указано ранее.

В моем Excel (в Windows 7) стиль диаграммы по умолчанию равен 2, поэтому не появляется теневой или трехмерный эффект. Я подозреваю, что на Mac стиль диаграммы по умолчанию отличается.

Чтобы исправить это, вы можете установить Chart Style в коде:

With cht.Chart 
    .ChartType = xlXYScatter 
    .ChartStyle = 2 
    ..... 

В Excel параметры ChartStyle имеют возможность изменять все аспекты внешнего вида диаграммы, в том числе внешнего вида Маркер. Единственное, что устанавливает MarkStyle - это форма маркера. Все другие аспекты внешнего вида маркера переопределяются при изменении ChartStyle.

EDIT

Вышеприведенные комментарии по-прежнему в основном верно, но я нашел способ, чтобы отключить тень. Как и многие вещи с Excel, это не так просто, как вы думаете. Установка свойства видимости тени не влияет на код (по какой-либо причине), поэтому вам нужно установить теневой тип на «Нет тени».

Sub plotNoShadow() 

    Dim x As Range 
    Dim y As Range 

    Dim cht As ChartObject 

    Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers 
    Set y = ActiveSheet.Range("B1:B6") 

    Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160) 
    With cht.Chart 
    .ChartType = xlXYScatter 
    .ChartStyle = 26 'Something 3D with a default shadow. This line can be left out. 
    .SeriesCollection.NewSeries 
    With .SeriesCollection(1) 
     .XValues = x 
     .Values = y 
     .Format.Shadow.Type = msoShadow30 'This is the code for an inner shadow 
    End With 
    .SetElement (msoElementLegendNone) 
    .SetElement (msoElementPrimaryValueGridLinesNone) 
    End With 

End Sub 

EDIT Опять

На самом деле, msoShadow30 является "внутренняя тень" стиль и может выглядеть странно, в зависимости от вашего стиля маркера. msoShadow41 - это самое близкое к «Нет тени», которое я смог найти. На самом деле это код для тени ниже, но по умолчанию он слишком слаб, чтобы видеть. Если он появляется, цвет всегда можно изменить, чтобы он исчез.

Или еще лучше, установите tranparency на 1 (полностью прозрачный):

.Format.Shadow.Transparency = 1.0 'Fully transparent 
+0

+1 на '.Format.Shadow.Type = msoShadow41' :) (Протестировано в Excel 2011). Добавление этой строки в код, который я дал, и изменение' .MarkerSize' до 9, дали точное изображение, как показано в вопросе OP. Кстати, мы должны исключить '.ChartStyle = 26', как вы предложили. Он дает совсем другой маркер. –

+0

Ницца. Для чего стоит, просто установка .chartStyle на 2 дает мне именно то, что я искал - сюжет, подходящий для публикации в печати, в котором дополнительные визуальные doo-dads не помогают. –

+0

Я обнаружил, что «.ChartStyle = 2» достаточно, чтобы удалить все беспринципные тени, свечения и градиенты, встроенные в графику Mac по умолчанию. –

2

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

К сожалению, вы ничего не можете с этим поделать. Смотрите снимок ниже, и вы поймете, что я имею в виду.

Snapshot:

enter image description here

Альтернатива:

Однако вы можете играть с размером маркера, чтобы минимизировать этот эффект. Попробуйте этот код.

Sub plotNoShadow() 

    Dim x As Range 
    Dim y As Range 

    Dim cht As ChartObject 

    Set x = ActiveSheet.Range("A1:A6") 'haphazard numbers 
    Set y = ActiveSheet.Range("B1:B6") 

    Set cht = ActiveSheet.ChartObjects.Add(Left:=150, Top:=50, Width:=200, Height:=160) 
    With cht.Chart 
    .ChartType = xlXYScatter 
    .SeriesCollection.NewSeries 
    With .SeriesCollection(1) 
     .MarkerStyle = 2 
     .MarkerSize = 7 
     .XValues = x 
     .Values = y 
     .Format.Shadow.Visible = msoFalse 'This seems to parse, but have no effect 
    End With 
    End With 

End Sub 
+0

Wow - MS действительно делает все возможное, чтобы полностью исключить использование Excel для готовых к публикации сюжетов. Я думал, что перехитрил их, но, видимо, нет. –

+2

Но подождите - должен быть какой-то способ избавиться от остаточной тени. Когда я вручную выбираю набор данных, нажмите «Формат данных» <Тень, затем установите флажок «Тень», чтобы включить тени, затем нажмите его еще раз, чтобы отключить тени, тень полностью удалена. Таким образом, где-то должен быть какой-то другой атрибут тени, который можно отключить, но я не знаю, что это такое. –

+0

Я уже проверил это :) нет другого атрибута для Shadow :) Можете ли вы опубликовать sceenshot того, что у вас есть сейчас? –

0

Вы можете убить тень через легенду диаграммы:

cht.Chart.Legend.LegendEntries (1). LegendKey.Shadow = False

1

Нажмите на строку данных, перейдите в раздел Формат данных. В разделе «Тень» поле «тень», вероятно, будет снято, не так ли? Проверь это. Это активирует элементы управления редактирования внизу. Затем установите «прозрачность» на 100%. И вы также можете установить «цвет» на белый.

2

Это бесплатное избыточное форматирование в графиках Mac Excel сильно затруднило преобразование моих многочисленных программ на Mac. К счастью, я обнаружил:

ActiveChart.ChartStyle = 2 

который применяет стандартные форматы без теней, градиентов и свечения. Не нужно возвращаться и переформатировать каждую мелочь каждой серии на графике.

0

Это поведение непослушных диаграмм не допускается! Desist shadowy series ...

With .Shadow 
    .ForeColor.RGB = &HFFFFFF 
    .Visible = msoFalse 
End With