Здравствуйте!
Помогите, пожалуйста, решить проблему. Я хотел бы, чтобы размер графика полностью совпадал со всей диаграммой, для этого я plotarea приравниваю к parent (m.Chart.PlotArea.Left = m.Chart.Parent.Left). Если запускать макрос с листа на котором находятся данные, то все прекрасно работает, но если запускать с другого листа, то выводится ошибка method 'left' of object 'plotarea' failed. Run time error. Подскажите, есть ли способы исправить эту ошибку? Запускать макрос с того же листа не получится, потому что листов много и на всех есть plotarea. Спасибо.
Bregra, какая у вас версия Excel?
Вообще, это:
m.Chart.PlotArea.Left
расстояние между левым краем области построения и левым краем диаграммы.
А это:
m.Chart.Parent.Left
расстояние между левым краем диаграммы и левым краем листа.
Вы делаете бессмысленное действие.
Если вы хотите чтобы левый край графика совпал с левым краем диаграммы, то нужно установить здесь ноль:
m.Chart.PlotArea.Left = 0
Версия excel 2007. Моя задача нарисовать график в ячейке, для этого я приравниваю parent к размерам ячейки, а потом я хочу область приравнять к области диаграммы. Код работает если его выполнять на листе на котором находятся данные, но если его запускать с другого листа, то он работать перестает. Сам код
Set w = Sheets("Sheet1")
Set m = w.Shapes.AddChart(clustered)
Set n = w.Cells(3, 3)
n.RowHeight = 10
n.ColumnWidth = 7
m.Chart.SetSourceData Source:=Range("e8:h8"), PlotBy:=xlColumns
m.Chart.Parent.Left = n.Left
m.Chart.Parent.Width = n.Width
m.Chart.Parent.Height = n.Height
m.Chart.Parent.Top = n.Top
m.Chart.PlotArea.Left = m.Chart.Parent.Left
m.Chart.PlotArea.Width = m.Chart.Parent.Width
m.Chart.PlotArea.Height = m.Chart.Parent.Height
m.Chart.PlotArea.Top = m.Chart.Parent.Top
Вот так логично:
m.Chart.PlotArea.Left = 0
m.Chart.PlotArea.Top = 0
Все тоже самое не помогает, выводит такую же ошибку. Если запускать с листа, где данные работает, но если перейти на другой лист, то работать перестает.
Посмотрю в течение дня.
Возник такой вопрос. Ячейка Cells(3, 3) очень маленькая и вы в неё вставляете диаграмму. Не понятно, что происходит. Такая диаграмма маленькая или в чём смысл?
Я в диаграмме все надписи убрал, поэтому график будте виден хорошо, если не будет выдаваться ошибки)) И размеры ячейки можно изменить, дело не в них. Я как понимаю ошибка происходит из-за того, что excel почему то не может выполнять Plotarea с другим листом. Может я путь как то неправильно для него прописал. PS Кстати range записан как Range(Sheets("Sheet1").Cells(8,5),Sheets("Sheet1").Cells(8,8))
Спасибо.
После того, как макрос создаёт диаграмму, нужно отобразить на мониторе лист, на котором была создана диаграмма, а затем снова можете перейти на нужный лист. При этом обновление монитора (Application.ScreenUpdating = False) отключать нельзя.
Пока можно предположить, что это сбой в работе программы "Excel".
Код
Sub Макрос1()
Dim sh As Excel.Worksheet, chrt As Excel.Chart, cel As Excel.Range
'1. Vba-именование листа, на котором нужно создать диаграмму.
Set sh = Sheets("Sheet1")
'2. Создание диаграммы.
Set chrt = sh.Shapes.AddChart(xlColumnClustered).Chart
'3. Отображение на мониторе листа, чтобы не было ошибки при работе с "PlotArea".
sh.Select
'4. Отображение на мониторе нужного листа.
Worksheets(2).Select
'5. Vba-именование ячейки, в которую нужно поместить диаграмму.
Set cel = sh.Cells(3, 3)
'6. Изменение размеров ячейки.
cel.RowHeight = 10
cel.ColumnWidth = 7
'7. Настройка диаграммы.
chrt.SetSourceData Source:=sh.Range("E8:H8"), PlotBy:=xlColumns
'8. Перемещение и изменение размеров диаграммы.
chrt.Parent.Left = cel.Left
chrt.Parent.Top = cel.Top
chrt.Parent.Width = cel.Width
chrt.Parent.Height = cel.Height
'9. Настройка области построения диаграммы.
chrt.PlotArea.InsideLeft = -4
chrt.PlotArea.InsideTop = -4
chrt.PlotArea.Width = chrt.Parent.Width
chrt.PlotArea.Height = chrt.Parent.Height
End Sub
Спасибо. Этот вариант работает. Но возникла другая проблема. Вариант работает если просто запускаешь макрос. Но если запускаешь макрос через форму, то проблема остается. А в чем разница между пунктами 3 и 4?
Пункты 3 и 4 делают разное. Пункт 3 отображает на мониторе лист, на котором была создана диаграмма. А пункт 4 отображает на мониторе лист, который отображался на мониторе перед запуском макроса.
По поводу UserForm сейчас посмотрю у себя.
У меня нет ошибки при использовании UserForm. Я тестировал так. Создал UserForm с одной кнопкой. Кнопка запускает макрос, который я выложил на форуме. Ошибок не было.
Спасибо. Сейчас еще раз проверю, может я что то неправильно написал в коде, поэтому не хочет исправлять ошибку.
Спасибо все работает. Это часть макроса, который я делаю и в общем файле почему то работать не хочет. Сейчас буду ломать голову почему. Спасибо за помощь, вы мне очень помогли.