#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:
Пара вещей
- Вы не можете назвать процедуру как
Charts
вSub Charts()
. Это будет мешатьCharts.Add
. Используйте что-то вроде (например)Sub AddCharts()
- У вас не может быть второго листа с таким же именем.
ActiveChart.Name = sChtName
выдаст ошибку, поскольку имя уже было занято. Вы можете использовать переменную для изменения имени диаграммы. - Нет необходимости в
With ws - End With
, если вы не планируете его использовать. 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
, прежде чем присваивать имя листу диаграммы.