#excel #vba #charts #counting
Вопрос:
Я хотел бы создать макрос, который подсчитывает количество диаграмм в заданном диапазоне, а затем выполняет определенные действия в зависимости от подсчитанного числа. Я знаю activesheet.chartobjects.count
, что будет учитываться по всему листу, как бы я изменил, чтобы считать в пределах диапазона?
Вот скелет моего кода.
Sub chrt_chck()
Dim rng As Range
Dim x As Long
Set rng = Range("A1:F10")
x = ActiveSheet.rng.ChartObjects.Count
If x > 1 Then
'select and delete all charts in range
End If
If x = 1 Then
'select that chart and update format
Else
'create chart and set format
End If
End Sub
Ответ №1:
Пожалуйста, попробуйте следующий способ:
Sub chrt_chck()
Dim rng As Range, chO As ChartObject, x As Long, arrChO() As ChartObject, k As Long, El
Set rng = Range("B2:D15") ' Range("A1:F10")
ReDim arrChO(ActiveSheet.ChartObjects.count - 1)
For Each chO In ActiveSheet.ChartObjects
If Not Intersect(chO.TopLeftCell, rng) Is Nothing Then
x = x 1
Set arrChO(k) = chO: k = k 1
End If
Next
If x > 1 Then
'select and delete all charts in range
For Each El In arrChO
Debug.Print El.name
El.Delete
Next
End If
If x = 1 Then
'select that chart and update format
With arrChO(0)
.Select
Debug.Print .name
'do wahtever needed with the chart...
End With
Else
'create chart and set format
End If
End Sub
Он подсчитывает все объекты диаграммы, левый верхний угол которых находится внутри rng
диапазона.
Комментарии:
1. Почему вы определили и x, и k? k мне кажется ненужным. Независимо от того, действует ли кодекс.
2. @Elis:
arrChO
является массивом на основе нуля иx
должен подсчитывать диаграммы… K изначально равно 0. Я мог бы использоватьX - 1
здесь, но я привык иметь для этого отдельную переменную. Иногда существуют условные итерации, в которых полезно использовать что-то простое для проверки в конце, если это необходимо, без путаницы с повторяемой переменной. Я могу сказать, что это дело привычки… Хорошая привычка, я бы (все еще) осмелился поверить… 🙂 Я также мог бы объявить массив1 To ActiveSheet.ChartObjects.count
. Но мой опыт заставил меня использовать то решение, которое я использую.3. Незначительное исправление: Когда лист не содержит диаграмм, вычисляется как и выдает ошибку, поэтому я сделал отступ и в состоянии IF, которое зависит от значения .
arrChO(ActiveSheet.ChartObjects.count - 1)
arrChO(-1)
Redim
for
ActiveSheet.ChartObjects.count
4. Проверьте перед этим, если количество >0… теперь я за рулем.