Что представляет собой число в макросе 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
Хорошо, у меня была одна и та же ситуация, и это в основном стили диаграммы. Я попытался выяснить точную нумерацию, но потом понял, что запись - это гораздо более простой способ узнать номера стилей, как вы это делали здесь.
Чтобы ответить на вопрос, запишите макросы, чтобы узнать, какой стиль вы хотите реализовать в своих макросах.