Что представляет собой число в макросе VBA AddChart2?

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

ActiveSheet.Shapes.Addchart2(286,xl3DColumnClustered).Select

Пожалуйста, помогите мне, поскольку я не могу понять, что представляет собой номер 286. Я знаю, что синтаксис Addchart2:

expression.AddChart2(Style,XlChartType,Left,Top,Width,Height,NewLayout)

Если я изменил значение "286" на "285", диаграмма появится с синим фоном. Выдается ошибка, если число равно 100.

Может ли кто-нибудь сказать мне, что представляет число?

Спасибо.

Ответ 1

Можно также указать только ChartType, и приложение будет использовать стиль по умолчанию.

Set oShp = ActiveSheet.Shapes.AddChart2(XlChartType:=xl3DColumnClustered)
oShp.Chart.SetSourceData Source:=RngDta

На этом рисунке показан ChartStyle по умолчанию для всех ChartTypes (исключая StockHLC и StockVOHLC)

enter image description here

Ответ 2

Это не будет напрямую отвечать на ваш вопрос, но это поможет вам понять, что происходит.

Это чисто гипотеза с моей стороны, но я бы догадался, что это недокументированное битовое поле. Как вы знаете, поле бит - это просто способ использовать число. Таким образом, у нас есть байтовая переменная, которая может быть 8 бит (или флагов). Таким образом, в байте мы можем хранить до 8 значений.

Пример. У нас есть поле, называемое битами "DaysOpen" 1-7, так как магазин открыт в тот день недели. (Мы проигнорируем 8-й бит.) Итак, если магазин открыт M-F, который будет двоичным 0111 1100.

Затем вы просто конвертируете это число в десятичное, и мы видим, что оно 124.

Эта переменная является вариантом, поэтому может быть что угодно: от байта до Лонга, что означает, что он может хранить до 64 различных флагов.

В качестве примечания (если вам интересно) вы можете использовать битовые поля, например:

Option Explicit

Public Enum DayFlags
    'Notice these are power of 2.
    dfSunday = 1
    dfMonday = 2
    dfTuesday = 4
    dfWednesday = 8
    dfThursday = 16
    dfFriday = 32
    dfSaturday = 64
End Enum

Sub Example()
    Dim openHours As DayFlags
    'Set the flags:
    openHours = dfMonday Or dfTuesday Or dfThursday
    'See the binary?
    MsgBox Right$("00000000" & Excel.WorksheetFunction.Dec2Bin(openHours), 8)
    'Notice the order is right to left. This is call endianness.
    'You can check for a specific flag like this:
    MsgBox IsOpenOnDay(openHours, dfMonday) & vbNewLine & IsOpenOnDay(openHours, dfFriday)
    'You can add a flag like this:
    openHours = openHours Or dfFriday
    MsgBox IsOpenOnDay(openHours, dfMonday) & vbNewLine & IsOpenOnDay(openHours, dfFriday)
    'You can remove a flag like this:
    openHours = openHours Xor dfFriday
    MsgBox IsOpenOnDay(openHours, dfMonday) & vbNewLine & IsOpenOnDay(openHours, dfFriday)
End Sub

Private Function IsOpenOnDay(ByVal openHours As DayFlags, ByVal day As DayFlags) As Boolean
    IsOpenOnDay = ((openHours And day) = day)
End Function

Ответ 3

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

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