Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Живые графики в UserForm, возможно ли это? - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Живые графики в UserForm, возможно ли это? (Макросы/Sub)
Живые графики в UserForm, возможно ли это?
t330 Дата: Вторник, 02.04.2019, 17:50 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 53
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Всем добрый день!

Во вложении пример файла где диаграмма (если нажать на кнопочку "Диаграмма" на листе) отображается не на листе , а в выскакивающей 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) ' источник данных для построения Диаграммы (сами данные + названия категорий)
    
'   Добавление графика
    Application.ScreenUpdating = False
    Set TempChart = ActiveSheet.Shapes.AddChart.Chart
   ' TempChart.SetSourceData Source:=SourceData
    
'   Настройка графика
    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]
К сообщению приложен файл: chart_in_userfo.xlsm(27.8 Kb)


Сообщение отредактировал t330 - Вторник, 02.04.2019, 17:51
 
Ответить
СообщениеВсем добрый день!

Во вложении пример файла где диаграмма (если нажать на кнопочку "Диаграмма" на листе) отображается не на листе , а в выскакивающей 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) ' источник данных для построения Диаграммы (сами данные + названия категорий)
    
'   Добавление графика
    Application.ScreenUpdating = False
    Set TempChart = ActiveSheet.Shapes.AddChart.Chart
   ' TempChart.SetSourceData Source:=SourceData
    
'   Настройка графика
    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]

Автор - t330
Дата добавления - 02.04.2019 в 17:50
Karataev Дата: Вторник, 02.04.2019, 18:06 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1313
Репутация: 513 ±
Замечаний: 0% ±

Excel
см. файл
К сообщению приложен файл: 3587755-kar.xlsm(29.0 Kb)


Киви-кошелек: 9166309108
Яндекс-деньги: 410014131888288


Сообщение отредактировал Karataev - Вторник, 02.04.2019, 19:21
 
Ответить
Сообщениесм. файл

Автор - Karataev
Дата добавления - 02.04.2019 в 18:06
t330 Дата: Вторник, 02.04.2019, 19:17 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 53
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016


см. файл


Круто, спасибо!
 
Ответить
Сообщение


см. файл


Круто, спасибо!

Автор - t330
Дата добавления - 02.04.2019 в 19:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Живые графики в UserForm, возможно ли это? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!