Во вложении пример файла где диаграмма (если нажать на кнопочку "Диаграмма" на листе) отображается не на листе , а в выскакивающей UserForm в виде gif файла.
Для этого, сначала Диаграмма создается на самом листе, потом она записывается во временный gif файл Temp.gif , затем диаграмма с листа удаляется , а созданный на ее основе Temp.gif подгружается на UserForm.
Чтобы получить новую Диаграмму на UserForm , нужно сначала закрыть старую UserForm, потом снова нажать кнопку "Диаграмма" на листе. Это не удобно.
Вопрос, можно ли впринципе сделать так, чтобы эта гифочная Диаграмма на UserForm обновлялась без закрытия, а просто при перемещении активной ячейки на листе, в частности при пермещении курсора с 4 по 16 строку (в этих сроках находятся данные/Source для Диаграмм)? Или это вообще невозможно?
п/с Как сделать Диаграмму, обновляемую при перемещении курсора по строкам с данными и которая расположена не на UserForm, а на Листе Экселя, я знаю. Интересно , можно ли такой же финт сделать с UserForm.
Модуль UserForm: [vba]
Код
Option Explicit
Sub ShowChart() Dim UserRow As Long UserRow = ActiveCell.Row If UserRow < 3 Or IsEmpty(Cells(UserRow, 1)) Then MsgBox "Переместите указатель ячейки в строку с данными." Exit Sub End If CreateChart (UserRow) UserForm1.Show vbModeless ' Показываем UserForm с гифкой диаграммы в vbmodeless режиме End Sub
[/vba]
Модуль общий: [vba]
Код
' Процедура создания Диаграммы (принимает номер ряда r, в котором содержатся данные для построения диаграммы) Sub CreateChart(r) Dim TempChart As Chart Dim CatTitles As Range Dim SrcRange As Range, SourceData As Range Dim fname As String
Set CatTitles = ActiveSheet.Range("A2:F2") ' создается диаппазон с названиями категорий по оси Х Set SrcRange = ActiveSheet.Range(Cells(r, 1), Cells(r, 6)) Set SourceData = Union(CatTitles, SrcRange) ' источник данных для построения Диаграммы (сами данные + названия категорий)
' Настройка графика With TempChart .ChartType = xlColumnClustered .SetSourceData Source:=SourceData, PlotBy:=xlRows ' диаграмма строится по Sourcedata, а свойство PlotBy показывает, что построение идет по ряду, а по столбцу .HasLegend = False .PlotArea.Interior.ColorIndex = xlNone .Axes(xlValue).MajorGridlines.Delete .ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False .Axes(xlValue).MaximumScale = 0.6 .ChartArea.Format.Line.Visible = False End With
' Настройка размеров графика With ActiveSheet.ChartObjects(1) .Width = 300 .Height = 200 .Activate End With
' Запись графика в гифку temp.gif fname = ThisWorkbook.Path & Application.PathSeparator & "temp.gif" TempChart.Export Filename:=fname, filterName:="GIF" ActiveSheet.ChartObjects(1).Delete ' удаление Диаграммы с листа Application.ScreenUpdating = True End Sub
[/vba]
Всем добрый день!
Во вложении пример файла где диаграмма (если нажать на кнопочку "Диаграмма" на листе) отображается не на листе , а в выскакивающей UserForm в виде gif файла.
Для этого, сначала Диаграмма создается на самом листе, потом она записывается во временный gif файл Temp.gif , затем диаграмма с листа удаляется , а созданный на ее основе Temp.gif подгружается на UserForm.
Чтобы получить новую Диаграмму на UserForm , нужно сначала закрыть старую UserForm, потом снова нажать кнопку "Диаграмма" на листе. Это не удобно.
Вопрос, можно ли впринципе сделать так, чтобы эта гифочная Диаграмма на UserForm обновлялась без закрытия, а просто при перемещении активной ячейки на листе, в частности при пермещении курсора с 4 по 16 строку (в этих сроках находятся данные/Source для Диаграмм)? Или это вообще невозможно?
п/с Как сделать Диаграмму, обновляемую при перемещении курсора по строкам с данными и которая расположена не на UserForm, а на Листе Экселя, я знаю. Интересно , можно ли такой же финт сделать с UserForm.
Модуль UserForm: [vba]
Код
Option Explicit
Sub ShowChart() Dim UserRow As Long UserRow = ActiveCell.Row If UserRow < 3 Or IsEmpty(Cells(UserRow, 1)) Then MsgBox "Переместите указатель ячейки в строку с данными." Exit Sub End If CreateChart (UserRow) UserForm1.Show vbModeless ' Показываем UserForm с гифкой диаграммы в vbmodeless режиме End Sub
[/vba]
Модуль общий: [vba]
Код
' Процедура создания Диаграммы (принимает номер ряда r, в котором содержатся данные для построения диаграммы) Sub CreateChart(r) Dim TempChart As Chart Dim CatTitles As Range Dim SrcRange As Range, SourceData As Range Dim fname As String
Set CatTitles = ActiveSheet.Range("A2:F2") ' создается диаппазон с названиями категорий по оси Х Set SrcRange = ActiveSheet.Range(Cells(r, 1), Cells(r, 6)) Set SourceData = Union(CatTitles, SrcRange) ' источник данных для построения Диаграммы (сами данные + названия категорий)
' Настройка графика With TempChart .ChartType = xlColumnClustered .SetSourceData Source:=SourceData, PlotBy:=xlRows ' диаграмма строится по Sourcedata, а свойство PlotBy показывает, что построение идет по ряду, а по столбцу .HasLegend = False .PlotArea.Interior.ColorIndex = xlNone .Axes(xlValue).MajorGridlines.Delete .ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False .Axes(xlValue).MaximumScale = 0.6 .ChartArea.Format.Line.Visible = False End With
' Настройка размеров графика With ActiveSheet.ChartObjects(1) .Width = 300 .Height = 200 .Activate End With
' Запись графика в гифку temp.gif fname = ThisWorkbook.Path & Application.PathSeparator & "temp.gif" TempChart.Export Filename:=fname, filterName:="GIF" ActiveSheet.ChartObjects(1).Delete ' удаление Диаграммы с листа Application.ScreenUpdating = True End Sub