VBA: присвоение имен нескольким диаграммам с использованием для каждого оператора and с помощью

#excel #vba

#excel #vba

Вопрос:

У меня есть код, который генерирует два графика с использованием инструкции For Each and With . Я хотел бы назвать оба этих графика на основе названия их вкладки.

Например, я генерирую график из листов 1 и 2 и размещаю их на этих листах, поэтому я хотел бы, чтобы эти графики назывались «Лист1» и «Лист2».

В моем коде я сначала определяю имя диаграммы в виде строки, затем я устанавливаю переменную chart name равной именам рабочих листов и, наконец, я устанавливаю ActiveChart.Name равную определенной переменной chart name. Моя проблема в том, что при запуске этого кода я получаю сообщение об ошибке, по какой-то причине VBA не нравится, как я называю эти диаграммы. Я высоко ценю любую информацию, которая может помочь мне решить эту проблему. Спасибо!

Мой код:

 Sub Charts()

Dim ws as Worksheet
Dim sChtName As String

For Each ws In Sheets(Array("Sheet1", "Sheet2"))
With ws
    Charts.Add
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Sheets(ws.Name).Range("A1:E6"), PlotBy:=xlColumns
    sChtName = ws.Name
    ActiveChart.Name = sChtName
    ActiveChart.Location where:=xlLocationAsObject, Name:=ws.Name
End With
Next ws
End Sub
  

Комментарии:

1. Что это за сообщение об ошибке и в какой строке?

2. Просто любопытно.. почему вы не вставляете диаграмму непосредственно в лист, а не создаете лист диаграммы, а затем перемещаете его?

3. Разве вам не нужно вставлять встроенные диаграммы? Если да, то они вставляются другим способом…

Ответ №1:

Пара вещей

  1. Вы не можете назвать процедуру как Charts в Sub Charts() . Это будет мешать Charts.Add . Используйте что-то вроде (например) Sub AddCharts()
  2. У вас не может быть второго листа с таким же именем. ActiveChart.Name = sChtName выдаст ошибку, поскольку имя уже было занято. Вы можете использовать переменную для изменения имени диаграммы.
  3. Нет необходимости в With ws - End With , если вы не планируете его использовать.
  4. Sheets(ws.Name) : Поскольку у вас уже есть объект, используйте это.

Например

 Option Explicit

Sub AddCharts()
    Dim ws As Worksheet
    Dim sChtName As String
    Dim i As Long

    For Each ws In Sheets(Array("Sheet1", "Sheet2"))
        Charts.Add
        ActiveChart.ChartType = xlLine
        ActiveChart.SetSourceData Source:=ws.Range("A1:E6"), PlotBy:=xlColumns
        sChtName = ws.Name amp; i
        ActiveChart.Name = sChtName
        i = i   1
        ActiveChart.Location where:=xlLocationAsObject, Name:=ws.Name
    Next ws
End Sub
  

Также в качестве дополнительной меры предосторожности проверьте, есть ли лист с именем sChtName = ws.Name amp; i , прежде чем присваивать имя листу диаграммы.